1. 程式人生 > >想做性能測試不知道怎麽選順手的工具?

想做性能測試不知道怎麽選順手的工具?

timeout 超過 load 發的 分布式部署 可視化數據 界面 數量級 www.

原文鏈接:http://www.51testing.com/html/49/n-3721249.html

前言

當你想做性能測試的時候,你會選擇什麽樣的測試工具呢?是會選擇wrk?jmeter?locust?還是loadrunner呢?

今天,筆者將根據自己使用經驗,針對jmeter、locust、wrk和loadrunner常用的性能測試工具進行簡單介紹和對比。首先,四者基本對比圖:
技術分享圖片

由於loadrunner為商業收費模式,對於公司級測試使用而言涉及到授權問題,因此,本文暫不對loadrunner進行詳細討論。

wrk

wrk是輕量化的http性能測試工具,采用線程+網絡異步IO模型,網絡異步IO可以使得系統使用很少的線程模擬大量的網絡連接以增大並發量、提高壓力。

wrk操作簡單、易於使用,使用方式例如:

./wrk -c 1000 -t 8 -d 10s http://www.baidu.com

主要包括以下參數:

-t(--thread) 需要模擬的線程數;-c(connection) 需要模擬的連接數;--timeout 超時的時間;-d(--duration) 測試的持續時間

其中:

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

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

技術分享圖片

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

其他說明:

①wrk只支持http協議類型請求(如get、post等),但若是需要執行get之外的http類型請求需要使用者自行編寫lua腳本;

②只允許單機測試,不支持多機分布式壓力測試,因此wrk適合性能基準測試,對於模擬上萬的用戶並發測試顯得有點力不從心;

③測試結果簡單,無詳細圖表解析,舉例如下;

wrk測試結果輸出:
技術分享圖片

jmeter

jmeter同樣采用線程並發機制,但其主要依靠增加線程數提高並發量,當單機模擬數以千計的並發用戶時,對於CPU和內存的消耗比較大。與上述wrk相比,jmeter本身具有以下優點和缺點:

優點如下:

①界面可視化操作,可以使用錄制腳本方式對較為復雜的用戶流建模,還可以創建斷言來驗證測試行為是否通過;

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

③支持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測試結果:
技術分享圖片

總結

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

①我想使用界面操作的形式對我的系統做性能測試,並且希望我的測試數據有個良好的可視化展示方式;

——建議使用jmeter工具

②我想要對我系統的http rest接口進行性能測試,但是我之前沒有進行過任何測試,我不知道我的系統QPS是個什麽樣的水平;

——建議使用wrk工具

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

——建議使用locust工具

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

——建議使用jmeter工具

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

——建議使用jmeter或locust工具

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

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

——locust,使用python語言編寫腳本;

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

想做性能測試不知道怎麽選順手的工具?