【測試設計】性能測試工具選擇:wrk?jmeter?locust?仍是LR?

原文連接: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

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測試結果輸出:
image

jmeter

jmeter一樣採用線程併發機制,但其主要依靠增長線程數提升併發量,當單機模擬數以千計的併發用戶時,對於CPU和內存的消耗比較大。與上述wrk相比,jmeter自己具備如下優勢和缺點:

優勢

①界面可視化操做,可使用錄製腳本方式對較爲複雜的用戶流建模,還能夠建立斷言來驗證測試行爲是否經過;

②表格、圖形、結果樹等多類可視化數據分析和報告輸出,舉例以下;
jmeter聚合報告及表格查看結果:
image

③支持http、ftp、tcp等多種協議類型測試;

④支持分佈式壓力測試,但對於上萬的用戶併發測試須要多臺測試機支持,資源要求比較大;

⑤能夠用於測試固定吞吐量下的系統性能,例如在100QPS(QPS:每秒查詢率)下系統的響應時間和資源消耗;

缺點

jmeter的GUI模式消耗資源較大,當須要測試高負載時,須要先使用GUI工具來生成XML測試計劃,而後在非GUI模式下導入測試計劃運行測試,而且關閉不須要的偵聽器(收集數據與展現測量的組件),由於偵聽器也會消耗掉本用於生成負載的大量資源。測試結束後後,須要將原始結果數據導入GUI以才能查看結果。

locust

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測試結果:
image

總結

本文簡單介紹和對比了wrk、jmeter及locust三種性能測試工具,但願能給你們帶來基礎的認識。此外讓咱們最後一塊兒來看看面臨如下測試需求,咱們應該如何在三者中進行選擇:

我想使用界面操做的形式對個人系統作性能測試,而且但願個人測試數據有個良好的可視化展現方式;

建議使用jmeter工具

我想要對我係統的http rest接口進行性能測試,可是我以前沒有進行過任何測試,我不知道個人系統QPS是個什麼樣的水平;

建議使用wrk工具

我想對個人系統模擬用戶操做進行復雜場景的性能測試;

建議使用locust工具

我想測試個人系統在必定QPS狀況下,一段時間內的性能指標(cpu消耗、內存消耗等);

建議使用jmeter工具

我想使用勻速請求的方式,對個人系統進行性能測試;

建議使用jmeter或locust工具

我想體驗編程的樂趣,本身編寫腳本進行性能測試;

http請求:wrk,使用lua語言編寫腳本;
locust,使用python語言編寫腳本;

或者,just do it by yourself,本身選擇編程語言編寫性能測試腳本。

附錄

wrk 使用參數說明

①參數-c(connection,線連接數)與操做系統文件句柄數相關,-c不能超過文件句柄數設置,開始測試前應保證系統可用端口數大於-c設置;

②參數-t(--thread,線程數)與操做系統cpu核數有關,-t不宜設置過大,過大的線程數設置反而會因線程調度反而使性能下降。以下圖所示,操做系統爲8核cpu:相同鏈接數和測試時長條件下,不一樣線程數對同一系統REST接口測試,從測試結果能夠看出當thread=8(與cpu核數一致)時系統性能測試結果最佳,性能波動最小;
image

8核cpu:相同鏈接數和測試時長條件下,不一樣線程數對同一系統REST接口測試結果對比圖

相關文章
相關標籤/搜索