利用JMeter測試Tornado的多線程

JMeter的簡介

  JMeter是Apache組織開發的基於Java的壓力測試工具。用於對軟件作壓力測試,它最初被設計用於Web應用測試,但後來擴展到其餘測試領域。 它能夠用於測試靜態和動態資源,例如靜態文件、Java 小服務程序、CGI 腳本、Java 對象、數據庫、FTP 服務器, 等等。
  JMeter的下載網址爲:https://jmeter.apache.org/dow... ,下載前請先肯定電腦中安裝了Java,下載完畢後點擊bin文件夾下的"meter.bat"(Windows系統)或者"jmeter"可執行文件(Unix系統)便可,界面以下:python

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

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()

對上面的程序作個簡單說面:apache

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

  啓動上述Python程序,下一步描述如何使用JMeter。
  首先新建一個測試計劃(Test Plan),取名爲tornao測試,以下:服務器

tornao測試

  右擊選擇Add,選擇Threads(Users),再選擇Thread Group,填寫信息以下:多線程

tornado單線程測試
填寫Thread Group的名稱爲「tornado單線程測試」,「Number of Threads」爲20,表示模擬20個用戶,「Ramp-Up period」爲1,表示1秒內發送全部用戶的請求,「Loop Count」爲2,表示每一個用戶發送2次請求,所以一共爲40次請求。app

  在「tornado單線程測試」上右擊選擇Add,選擇Sampler,再選擇HTTP Request,填寫信息以下:函數

HTTP請求

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

  最後咱們添加一下對這個測試的一些監控(Listener),用於統計該測試的性能。在「sanya_test」上右擊Add,選擇Listener,依次選擇「View Results Tree」,「Summary Report」,「Aggregate Report」和「Aggregate Graph」,分別表明每次測試結果,總的測試結果,聚合測試結果,聚合測試圖展現。
  在「tornado單線程測試上」右擊選擇start,測試結果以下(只展現Summary Report和Aggregate Graph):工具

summary report of tornado單線程測試
Aggregate Graph of tornado單線程測試

  能夠發現,該壓力測試下,請求的平均時間爲7472毫秒,1秒2.0次請求(TPS)。
  咱們再以一樣的方式測試shanghai這個接口,測試結果以下:

summary report of tornado多線程測試
Aggregate Graph of tornado多線程測試
  能夠發現,該壓力測試下,請求的平均時間爲1718毫秒,1秒7.7次請求(TPS)。

  根據此次測試,咱們也發現tornao的多線程機制發揮了做用。

  本次分享到此結束,歡迎你們交流~

相關文章
相關標籤/搜索