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代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
# -*- 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的多線程機制發揮了作用。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://segmentfault.com/a/1190000021556119