? ? ? ? 當(dāng)你想做性能測試的時(shí)候,你會(huì)選擇什么樣的測試工具呢舔涎?是會(huì)選擇wrk笼踩?jmeter?locust亡嫌?還是loadrunner呢嚎于?
? ? ? 今天,筆者將根據(jù)自己使用經(jīng)驗(yàn)挟冠,針對jmeter于购、locust、wrk和loadrunner常用的性能測試工具進(jìn)行簡單介紹和對比知染。首先肋僧,附上網(wǎng)友總結(jié)的四者基本對比圖:
由于loadrunner為商業(yè)收費(fèi)模式止潘,對于公司級測試使用而言涉及到授權(quán)問題,因此辫诅,本文暫不對loadrunner進(jìn)行詳細(xì)討論凭戴。
1、wrk
? ? ? wrk是輕量化的http性能測試工具炕矮,采用線程+網(wǎng)絡(luò)異步IO模型么夫,網(wǎng)絡(luò)異步IO可以使得系統(tǒng)使用很少的線程模擬大量的網(wǎng)絡(luò)連接以增大并發(fā)量、提高壓力肤视。
wrk操作簡單档痪、易于使用,使用方式例如:./wrk -c 1000 -t 8 -d 10s http://www.baidu.com钢颂。主要包括以下參數(shù):
-t(--thread) 需要模擬的線程數(shù)钞它;-c(connection) 需要模擬的連接數(shù)拜银;--timeout 超時(shí)的時(shí)間殊鞭;-d(--duration) 測試的持續(xù)時(shí)間
其中:
①參數(shù)-c(connection,線鏈接數(shù))與操作系統(tǒng)文件句柄數(shù)相關(guān)尼桶,-c不能超過文件句柄數(shù)設(shè)置操灿,開始測試前應(yīng)保證系統(tǒng)可用端口數(shù)大于-c設(shè)置;
②參數(shù)-t(--thread泵督,線程數(shù))與操作系統(tǒng)cpu核數(shù)有關(guān)趾盐,-t不宜設(shè)置過大,過大的線程數(shù)設(shè)置反而會(huì)因線程調(diào)度反而使性能降低小腊。如下圖所示救鲤,操作系統(tǒng)為8核cpu:相同連接數(shù)和測試時(shí)長條件下,不同線程數(shù)對同一系統(tǒng)REST接口測試秩冈,從測試結(jié)果可以看出當(dāng)thread=8(與cpu核數(shù)一致)時(shí)系統(tǒng)性能測試結(jié)果最佳本缠,性能波動(dòng)最小入问;
其他說明:
①wrk只支持http協(xié)議類型請求(如get、post等)芬失,但若是需要執(zhí)行g(shù)et之外的http類型請求需要使用者自行編寫lua腳本楣黍;
②只允許單機(jī)測試,不支持多機(jī)分布式壓力測試棱烂,因此wrk適合性能基準(zhǔn)測試租漂,對于模擬上萬的用戶并發(fā)測試顯得有點(diǎn)力不從心;
③測試結(jié)果簡單,無詳細(xì)圖表解析窜锯,舉例如下张肾;
2、jmeter
? ? ? jmeter同樣采用線程并發(fā)機(jī)制锚扎,但其主要依靠增加線程數(shù)提高并發(fā)量吞瞪,當(dāng)單機(jī)模擬數(shù)以千計(jì)的并發(fā)用戶時(shí),對于CPU和內(nèi)存的消耗比較大驾孔。與上述wrk相比芍秆,jmeter本身具有以下優(yōu)點(diǎn)和缺點(diǎn):
優(yōu)點(diǎn)如下:
①界面可視化操作,可以使用錄制腳本方式對較為復(fù)雜的用戶流建模翠勉,還可以創(chuàng)建斷言來驗(yàn)證測試行為是否通過妖啥;
②表格、圖形对碌、結(jié)果樹等多類可視化數(shù)據(jù)分析和報(bào)告輸出荆虱,舉例如下;
③支持http朽们、ftp怀读、tcp等多種協(xié)議類型測試;
④支持分布式壓力測試骑脱,但對于上萬的用戶并發(fā)測試需要多臺測試機(jī)支持菜枷,資源要求比較大;
⑤可以用于測試固定吞吐量下的系統(tǒng)性能叁丧,例如在100QPS(QPS:每秒查詢率)下系統(tǒng)的響應(yīng)時(shí)間和資源消耗啤誊;
缺點(diǎn):
jmeter的GUI模式消耗資源較大,當(dāng)需要測試高負(fù)載時(shí)拥娄,需要先使用GUI工具來生成XML測試計(jì)劃蚊锹,然后在非GUI模式下導(dǎo)入測試計(jì)劃運(yùn)行測試,并且關(guān)閉不需要的偵聽器(收集數(shù)據(jù)與展示測量的組件)稚瘾,因?yàn)閭陕犉饕矔?huì)消耗掉本用于生成負(fù)載的大量資源牡昆。測試結(jié)束后后,需要將原始結(jié)果數(shù)據(jù)導(dǎo)入GUI以才能查看結(jié)果孟抗。
3迁杨、locust
? ? ? locust是一個(gè)的簡單易用的分布式負(fù)載測試工具,主要用來對網(wǎng)站進(jìn)行負(fù)載壓力測試凄硼。locust使用python語言開發(fā)铅协,測試資源消耗遠(yuǎn)遠(yuǎn)小于java語言開發(fā)的jmeter。且其支持分布式部署測試摊沉,能夠輕松模擬百萬級用戶并發(fā)測試狐史。
? ? ? ? 與jmeter和wrk相比,locust具有以下優(yōu)缺點(diǎn):
優(yōu)點(diǎn):
①不同與wrk和jmeter使用線程數(shù)提高并發(fā)量,locust借助于協(xié)程實(shí)現(xiàn)對用戶的模擬骏全,相同物理資源(機(jī)器cpu苍柏、內(nèi)存等)配置下locust能支持的并發(fā)用戶數(shù)相比jmeter可以提升一個(gè)數(shù)量級;
②相比wrk對復(fù)雜場景測試的捉襟見肘和jmeter需要界面點(diǎn)擊錄制復(fù)雜場景的麻煩姜贡,locust只需用戶使用python編寫用戶場景完成測試试吁;
③不同與jmeter復(fù)雜的用戶使用界面,locust的界面干凈整潔楼咳,可以實(shí)時(shí)顯示測試的相關(guān)細(xì)節(jié)(如發(fā)送請求數(shù)熄捍、失敗數(shù)和當(dāng)前發(fā)送請求速度等);
④locust雖然是面向web應(yīng)用測試的母怜,但是它可以用來測試幾乎所有系統(tǒng)余耽。給locust編寫一個(gè)客戶端,可以滿足你所有的測試要求苹熏;
缺點(diǎn):
同wrk一樣碟贾,locust測試結(jié)果輸出不如jmeter的測試結(jié)果展示類型多;
4轨域、總結(jié)
? ? ? 本文簡單介紹和對比了wrk袱耽、jmeter及l(fā)ocust三種性能測試工具,希望能給大家?guī)砘A(chǔ)的認(rèn)識疙挺。此外讓我們最后一起來看看面臨以下測試需求扛邑,我們應(yīng)該如何在三者中進(jìn)行選擇:
①我想使用界面操作的形式對我的系統(tǒng)做性能測試怜浅,并且希望我的測試數(shù)據(jù)有個(gè)良好的可視化展示方式铐然;
——建議使用jmeter工具
②我想要對我系統(tǒng)的http rest接口進(jìn)行性能測試,但是我之前沒有進(jìn)行過任何測試恶座,我不知道我的系統(tǒng)QPS是個(gè)什么樣的水平搀暑;
——建議使用wrk工具
③我想對我的系統(tǒng)模擬用戶操作進(jìn)行復(fù)雜場景的性能測試;
——建議使用locust工具
④我想測試我的系統(tǒng)在一定QPS情況下跨琳,一段時(shí)間內(nèi)的性能指標(biāo)(cpu消耗自点、內(nèi)存消耗等);
——建議使用jmeter工具
⑤我想使用勻速請求的方式脉让,對我的系統(tǒng)進(jìn)行性能測試桂敛;
——建議使用jmeter或locust工具
⑥我想體驗(yàn)編程的樂趣,自己編寫腳本進(jìn)行性能測試溅潜;
——http請求:wrk术唬,使用lua語言編寫腳本;
——locust滚澜,使用python語言編寫腳本粗仓;
——或者,just do it by yourself,自己選擇編程語言編寫性能測試腳本借浊。~.~