python利用JMeter測試Tornado的多線程

 更新時間:2020-01-12 19:00:28   作者:佚名   我要評論(0)

JMeter的簡介
  JMeter是Apache組織開發的基于Java的壓力測試工具。用于對軟件做壓力測試,它最初被設計用于Web應用測試,但后來擴展到其他測試領域。

JMeter的簡介

  JMeter是Apache組織開發的基于Java的壓力測試工具。用于對軟件做壓力測試,它最初被設計用于Web應用測試,但后來擴展到其他測試領域。 它可以用于測試靜態和動態資源,例如靜態文件、Java 小服務程序、CGI 腳本、Java 對象、數據庫、FTP 服務器, 等等。

  JMeter的下載網址為:https://jmeter.apache.org/download_jmeter.cgi,下載前請先確定電腦中安裝了Java,下載完畢后點擊bin文件夾下的"meter.bat"(Windows系統)或者"jmeter"可執行文件(Unix系統)即可,界面如下:


  我們將在下面的章節中學習如何使用JMeter,以Tornado的多線程為例。

JMeter使用,以Tornado多進程為例

  我們將會以Tornado的多線程為例,描述如何使用JMeter。測試的Tornado多線程的Python代碼如下:

# -*- coding: utf-8 -*-
# author: Jclian91
# place: Sanya Hainan
# time: 2020-01-08 21:48
import time
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from tornado.options import define, options

from tornado import gen
from tornado.concurrent import run_on_executor
from concurrent.futures import ThreadPoolExecutor

# 定義端口為9090
define("port", default=9090, help="run on the given port", type=int)


# 單線程測試
class SanyaHelloHandler(tornado.web.RequestHandler):
  # get 函數
  def get(self):
    time.sleep(0.5)
    self.write('Hello from Sanya!')

# 多線程測試
class ShanghaiHelloHandler(tornado.web.RequestHandler):
  executor = ThreadPoolExecutor(4)

  @gen.coroutine
  def get(self):
    result = yield self.doing()
    self.write(result)

  # 使用tornado 線程池
  @run_on_executor
  def doing(self):
    time.sleep(0.5)
    return 'Hello from Shanghai!'


# 主函數
def server():
  # 開啟tornado服務
  tornado.options.parse_command_line()
  # 定義app
  app = tornado.web.Application(
      handlers=[(r'/sanya', SanyaHelloHandler),
           (r'/shanghai', ShanghaiHelloHandler)
           ],  # 網頁路徑控制
     )
  http_server = tornado.httpserver.HTTPServer(app)
  http_server.listen(options.port)
  http_server.start()
  tornado.ioloop.IOLoop.instance().start()

server()

對上面的程序做個簡單說面:

  • /sanya路徑對應SanyaHelloHandler,該HTTP接口為get請求,單線程;
  • /shanghai路徑對應 ShanghaiHelloHandler,該HTTP接口為get請求,用線程池實現多線程,線程數為4;

  啟動上述Python程序,下一步描述如何使用JMeter。

  首先新建一個測試計劃(Test Plan),取名為tornao測試,如下:

  右擊選擇Add,選擇Threads(Users),再選擇Thread Group,填寫信息如下:


填寫Thread Group的名稱為“tornado單線程測試”,“Number of Threads”為20,表示模擬20個用戶,“Ramp-Up period”為1,表示1秒內發送所有用戶的請求,“Loop Count”為2,表示每個用戶發送2次請求,因此一共為40次請求。

  在“tornado單線程測試”上右擊選擇Add,選擇Sampler,再選擇HTTP Request,填寫信息如下:

該Thread Group用于測試tornado的sanya這個路徑對應的HTTP請求。

  最后我們添加一下對這個測試的一些監控(Listener),用于統計該測試的性能。在“sanya_test”上右擊Add,選擇Listener,依次選擇“View Results Tree”,“Summary Report”,“Aggregate Report”和“Aggregate Graph”,分別代表每次測試結果,總的測試結果,聚合測試結果,聚合測試圖展示。

  在“tornado單線程測試上”右擊選擇start,測試結果如下(只展示Summary Report和Aggregate Graph):


  可以發現,該壓力測試下,請求的平均時間為7472毫秒,1秒2.0次請求(TPS)。

  我們再以同樣的方式測試shanghai這個接口,測試結果如下:



  可以發現,該壓力測試下,請求的平均時間為1718毫秒,1秒7.7次請求(TPS)。

  根據這次測試,我們也發現tornao的多線程機制發揮了作用。

  以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:

  • Tornado實現多進程/多線程的HTTP服務詳解

相關文章

  • python利用JMeter測試Tornado的多線程

    python利用JMeter測試Tornado的多線程

    JMeter的簡介   JMeter是Apache組織開發的基于Java的壓力測試工具。用于對軟件做壓力測試,它最初被設計用于Web應用測試,但后來擴展到其他測試領域。
    2020-01-12
  • Java 二分法檢索算法代碼實現詳解

    Java 二分法檢索算法代碼實現詳解

    一,二分法檢索算法介紹 二分法檢索(binary search)又稱折半檢索,二分法檢索的基本思想是設字典中的元素從小到大有序地存放在數組(array)中。是最常用的搜索
    2020-01-12
  • Linux下PHP+Apache的26個必知的安全設置

    Linux下PHP+Apache的26個必知的安全設置

    PHP是一種開源服務器端腳本語言,應用很廣泛。Apache web服務器提供了這種便利:通過HTTP或HTTPS協議,訪問文件和內容。配置不當的服務器端腳本語言會帶來各種各樣
    2020-01-12
  • tensorflow的計算圖總結

    tensorflow的計算圖總結

    計算圖 在 TensorFlow 中用計算圖來表示計算任務。 計算圖,是一種有向圖,用來定義計算的結構,實際上就是一系列的函數的組合。 用圖的方式,用戶通過用一些簡單
    2020-01-12
  • Python3.x+迅雷x 自動下載高分電影的實現方法

    Python3.x+迅雷x 自動下載高分電影的實現方法

    快要過年了,大家都在忙些什么呢?一到年底公司各種搶票,備年貨,被這過年的氣氛一烘,都歸心似箭,哪還有心思上班啊。歸心似箭=產出低下=一行代碼十個錯=無聊。于
    2020-01-12
  • 在微信小程序中渲染HTML內容3種解決方案及分析與問題解決

    在微信小程序中渲染HTML內容3種解決方案及分析與問題解決

    大部分Web應用的富文本內容都是以HTML字符串的形式存儲的,通過HTML文檔去展示HTML內容自然沒有問題。但是,在微信小程序(下文簡稱為「小程序」)中,應當如何渲
    2020-01-12
  • ES2020 新特性(種草)

    ES2020 新特性(種草)

    這幾年,Ecma TC39一年一次更新 ecmascript 規范標準,截止目前,以下特性已進入 finished 狀態,F在帶大家體驗種草 ES2020 新特性。 一:Promise.allSettled
    2020-01-12
  • Python 實現遞歸法解決迷宮問題的示例代碼

    Python 實現遞歸法解決迷宮問題的示例代碼

    迷宮問題 問題描述: 迷宮可用方陣 [m, n] 表示,0 表示可通過,1 表示不能通過。若要求左上角 (0, 0) 進入,設計算法尋求一條能從右下角 (m-1, n-1) 出去的路徑。
    2020-01-12
  • html2canvas屬性和使用方法以及如何使用html2canvas將HTML內容寫入Canvas生成圖片

    html2canvas屬性和使用方法以及如何使用html2canvas將HTML內容寫入Canvas生成圖片

    如何使用JS截取HTML頁面為圖片呢,下面為大家介紹一款JS截圖插件html2canvas.js html2canvas.js 能夠實現在用戶瀏覽器端直接對整個或部分頁面進行截屏。 html2can
    2020-01-12
  • golang并發編程的實現

    golang并發編程的實現

    go main函數的執行本身就是一個協程,當使用go關鍵字的時候,就會創建一個新的協程 channel channel 管道,用于在多個協程之間傳遞信號 無緩存管道 當對無
    2020-01-12

最新評論

北京pk10直播盛源