1. 程式人生 > 程式設計 >python利用JMeter測試Tornado的多執行緒

python利用JMeter測試Tornado的多執行緒

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的多執行緒機制發揮了作用。

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