原文連接:http://www.51testing.com/html/49/n-3721249.htmlhtml
當你想作性能測試的時候,你會選擇什麼樣的測試工具呢?是會選擇wrk?jmeter?locust?仍是loadrunner呢?java
今天,筆者將根據本身使用經驗,針對jmeter、locust、wrk和loadrunner經常使用的性能測試工具進行簡單介紹和對比。首先,四者基本對比圖:python
. | loadrunner | jmeter | locust | wrk |
---|---|---|---|---|
分佈式壓力 | 支持 | 支持 | 支持 | 不支持 |
單機併發能力 | 低 | 低 | 高 | 低 |
併發機制 | 進程/線程 | 線程 | 協程 | 線程 |
開發語言 | C/Java | Java | Python | C |
報告與分析 | 完善 | 簡單圖標 | 簡單圖表 | 簡單結果 |
受權方式 | 商業收費 | 開源免費 | 開源免費 | 開源免費 |
測試腳本形式 | C/Java | GUI | Python | C |
資源監控 | 支持 | 不支持 | 不支持 | 不支持 |
因爲loadrunner爲商業收費模式,對於公司級測試使用而言涉及到受權問題,所以,本文暫不對loadrunner進行詳細討論。web
wrk是輕量化的http性能測試工具,採用線程+網絡異步IO模型,網絡異步IO可使得系統使用不多的線程模擬大量的網絡鏈接以增大併發量、提升壓力。編程
使用方式例如:網絡
./wrk -c 1000 -t 8 -d 10s http://www.baidu.com
主要包括如下參數:併發
- -t(--thread) 須要模擬的線程數;
- -c(connection) 須要模擬的鏈接數;
- --timeout 超時的時間;-d(--duration) 測試的持續時間
①wrk只支持http協議類型請求(如get、post等),但如果須要執行get以外的http類型請求須要使用者自行編寫lua腳本;異步
②只容許單機測試,不支持多機分佈式壓力測試,所以wrk適合性能基準測試,對於模擬上萬的用戶併發測試顯得有點力不從心;tcp
③測試結果簡單,無詳細圖表解析,舉例以下;編程語言
wrk測試結果輸出:
jmeter一樣採用線程併發機制,但其主要依靠增長線程數提升併發量,當單機模擬數以千計的併發用戶時,對於CPU和內存的消耗比較大。與上述wrk相比,jmeter自己具備如下優勢和缺點:
①界面可視化操做,可使用錄製腳本方式對較爲複雜的用戶流建模,還能夠建立斷言來驗證測試行爲是否經過;
②表格、圖形、結果樹等多類可視化數據分析和報告輸出,舉例以下;
jmeter聚合報告及表格查看結果:
③支持http、ftp、tcp等多種協議類型測試;
④支持分佈式壓力測試,但對於上萬的用戶併發測試須要多臺測試機支持,資源要求比較大;
⑤能夠用於測試固定吞吐量下的系統性能,例如在100QPS(QPS:每秒查詢率)下系統的響應時間和資源消耗;
jmeter的GUI模式消耗資源較大,當須要測試高負載時,須要先使用GUI工具來生成XML測試計劃,而後在非GUI模式下導入測試計劃運行測試,而且關閉不須要的偵聽器(收集數據與展現測量的組件),由於偵聽器也會消耗掉本用於生成負載的大量資源。測試結束後後,須要將原始結果數據導入GUI以才能查看結果。
locust是一個的簡單易用的分佈式負載測試工具,主要用來對網站進行負載壓力測試。locust使用python語言開發,測試資源消耗遠遠小於java語言開發的jmeter。且其支持分佈式部署測試,可以輕鬆模擬百萬級用戶併發測試。
與jmeter和wrk相比,locust具備如下優缺點:
①不一樣與wrk和jmeter使用線程數提升併發量,locust藉助於協程實現對用戶的模擬,相同物理資源(機器cpu、內存等)配置下locust能支持的併發用戶數相比jmeter能夠提高一個數量級;
②相比wrk對複雜場景測試的捉襟見肘和jmeter須要界面點擊錄製複雜場景的麻煩,locust只需用戶使用python編寫用戶場景完成測試;
③不一樣與jmeter複雜的用戶使用界面,locust的界面乾淨整潔,能夠實時顯示測試的相關細節(如發送請求數、失敗數和當前發送請求速度等);
④locust雖然是面向web應用測試的,可是它能夠用來測試幾乎全部系統。給locust編寫一個客戶端,能夠知足你全部的測試要求;
同wrk同樣,locust測試結果輸出不如jmeter的測試結果展現類型多;
locust測試結果:
本文簡單介紹和對比了wrk、jmeter及locust三種性能測試工具,但願能給你們帶來基礎的認識。此外讓咱們最後一塊兒來看看面臨如下測試需求,咱們應該如何在三者中進行選擇:
建議使用jmeter工具
建議使用wrk工具
建議使用locust工具
建議使用jmeter工具
建議使用jmeter或locust工具
http請求:wrk,使用lua語言編寫腳本;
locust,使用python語言編寫腳本;
①參數-c(connection,線連接數)與操做系統文件句柄數相關,-c不能超過文件句柄數設置,開始測試前應保證系統可用端口數大於-c設置;
②參數-t(--thread,線程數)與操做系統cpu核數有關,-t不宜設置過大,過大的線程數設置反而會因線程調度反而使性能下降。以下圖所示,操做系統爲8核cpu:相同鏈接數和測試時長條件下,不一樣線程數對同一系統REST接口測試,從測試結果能夠看出當thread=8(與cpu核數一致)時系統性能測試結果最佳,性能波動最小;
8核cpu:相同鏈接數和測試時長條件下,不一樣線程數對同一系統REST接口測試結果對比圖