阿里性能專家全方位對比Jmeter和Locust,到底誰更香?

近些年,隨著互聯網行業的不斷髮展,用戶規模也有了爆發性的增長。產品的性能成為影響用戶體驗的重要因素。因此,性能測試越來越受到大型互聯網企業的重視。

在做性能測試時,通常都會藉助一些壓測工具來模擬大量的併發用戶。目前業界壓測工具種類繁多,比如Loadrunner、Jmeter、Locust、Ngrinder、Apache ab、Wrk、Webbench等。


面臨這麼多的壓測工具,我們應該如何做出選擇呢?你在公司裡現在用的是什麼工具呢?


相信很多小夥伴此刻喊出了“Jmeter”的名字,確實是,這幾年Jmeter因其使用簡單,學習成本低,跨平臺等特性,在行業內應用非常的廣泛,擁有非常高的人氣。作為一款網紅工具,Jmeter既能做接口性能測試,也可以做自動化測試。深受廣大人民群眾的喜愛。


另一方面,Python語言近些年在行業裡也非常火,人生苦短、我用Python!使用Python來做自動化和接口測試也是非常的方便。因此,Python屆的壓測工具Locust也逐步成為越來越多人的選擇。

阿里性能專家全方位對比Jmeter和Locust,到底誰更香?

那麼,在實際性能測試過程中,到底選擇Jmeter還是Locust,除了語言上的差異,它們各自有什麼優點和缺點嗎?

阿里性能專家全方位對比Jmeter和Locust,到底誰更香?


今天,我會從不同的維度,對這兩款工具來做下對比分析,希望能幫助大家選擇適合自己的工具。


發壓能力


一個壓測工具的核心能力就是發壓能力,每秒能發出多少請求,決定這個工具能產生多大的壓力。我們先從發壓能力來對這兩款工具做下對比測試。


測試前的準備

為了方便測試,我首先準備了一個測試環境,一臺壓力機和一臺web服務器,具體信息如下

阿里性能專家全方位對比Jmeter和Locust,到底誰更香?

為了更好的測試兩個工具的發壓能力,必須得找一個性能比較好的項目來做壓測。就好比你現在要測試巔峰姚明的籃球技術,你用潘長江來陪練這就不合適了。你得把奧尼爾找來,這樣姚明才能發揮出自己的全部能力。我在服務器上部署了一個性能VIP課上的接口項目,單接口能支持TPS 1w+


阿里性能專家全方位對比Jmeter和Locust,到底誰更香?


壓力機上分別安裝了Jmeter5.1和Locust 0.13

提前寫好了Jmeter腳本和Locust腳本,兩個腳本里均只保留了http請求和斷言,為了測試最大壓力,沒有做任何參數化,也沒有使用其他影響性能的組件和代碼。

同時,為了避免鏈接數受限,已經優化了兩臺機器的文件句柄數和TCP參數。

好了,一切準備就緒,battle開始,Let’s go !


阿里性能專家全方位對比Jmeter和Locust,到底誰更香?


測試場景一:相同併發下,對商品信息接口壓測,測試工具的最高TPS


Jmeter測試

前置條件:為了提升性能,採用了no-gui模式壓測,Jvm堆內存配置為2G。從10併發開始,壓測運行2分鐘

Jmeter測試結果


阿里性能專家全方位對比Jmeter和Locust,到底誰更香?


Jmeter結果分析:可以看到在20併發時,壓力機的CPU已經達到了90%,接近極限,TPS為3979,web服務器CPU在80%以內,還有一些剩餘空間,證明還是沒壓到極限。


Locust測試

前置條件:

1、考慮到Locust是單進程的,不能充分利用多核CPU,於是在壓力機上開啟一個master進程,2個slave進程,組成一個單機分佈式系統。

2、將腳本中的wait_time設置為0,即多次循環之間不等待。

3、使用no-web模式進行壓測(實際對比測試,web模式和no-web模式性能沒明顯差別)


Locust測試結果

阿里性能專家全方位對比Jmeter和Locust,到底誰更香?

看我結果我驚呆了,相同併發下,Jmeter跑出了3000+TPS,Locust只有1500+?而且還把壓力機的CPU消耗到了100%

想到了Locust官網曾提到過,默認情況下,Locust使用requests庫發送HTTP請求,性能不太好,如果要產生更高的壓力,建議使用FastHttpLocust作為HTTP客戶端來壓測,性能可以提升5-6倍

阿里性能專家全方位對比Jmeter和Locust,到底誰更香?

趕緊改了下Locust腳本,使用了FastHttpLocust客戶端,再次進行壓測,結果如下


阿里性能專家全方位對比Jmeter和Locust,到底誰更香?


可以看到,使用FastHttpLocust客戶端後,Locust性能大幅提升,在10併發時,TPS就達到了4014,因為壓力機CPU已經100%了,所以20併發下,TPS並沒有什麼明顯增長。


場景總結


1、 在相同硬件配置,測試相同接口,使用相同的併發情況下,Locust產生的壓力確實高於Jmeter,這個也是由於他們的底層實現機制不同,Jmeter基於多線程,Locust基於協程

2、 無論採用哪個工具,單機能產生的TPS大體差不多,相比來說,Locust用更少的併發就能達到相同的TPS。不過Locust對壓力機的CPU消耗也更高

3、 Locust默認的HttpSession客戶端確實挺垃圾的,做壓測還是建議使用FastHttpLocust客戶端,但是Locust官網也提到了,FastHttpLocust並不能完全替代HttpSession,這個還得取決於測試場景,所以這點也是使用中的一個風險


測試場景二:相同配置下,測試工具能支持多少併發

前置條件:

在上一個測試場景中,無論Jmeter還是Locust,在20併發時,壓力機CPU會接近100%了,所以為了測試更高的併發,就得需要換一個性能差一些的接口。大家記住一點,性能差的接口比性能好的接口支持更高的併發

還是先測試Jmeter,從1000併發開始測,逐步增加到10000併發,結果如下


阿里性能專家全方位對比Jmeter和Locust,到底誰更香?


場景總結


從上面兩個工具的高併發測試來看,相同配置的機器上,兩個工具都可以跑出1w併發,不過Jmeter使用的內存高於Locust。再高的併發,個人感覺沒有必要了,單機1w併發已經滿足絕大多數的項目了(在線下測試,大部分項目幾十併發就能測出拐點),如果需要更大規模的,還是建議用多臺機器分佈式發壓。


以上兩個測試場景,都是針對壓測工具的核心能力:TPS能力和併發能力,接下來再來其他方面的對比


測試報告對比

Jmeter有比較豐富的HTML報表,各個維度都有

阿里性能專家全方位對比Jmeter和Locust,到底誰更香?

阿里性能專家全方位對比Jmeter和Locust,到底誰更香?

阿里性能專家全方位對比Jmeter和Locust,到底誰更香?

Locust提供了簡單的數據實時報表,不過也夠用

阿里性能專家全方位對比Jmeter和Locust,到底誰更香?


個人感覺在報表方面,兩個工具相差不是很大,都基本能滿足工作需求


學習成本 & 易用性方面


Jmeter有單獨的GUI界面,有豐富的內置函數,在腳本編寫方面確實比較簡單,基本上不需要寫任何代碼就能完成比較複雜的場景

阿里性能專家全方位對比Jmeter和Locust,到底誰更香?


Locust

沒有GUI界面,完全基於Python代碼,所以你想使用什麼功能,像參數化、關聯、斷言等,都得寫代碼來完成,相比來說學習成本更高

阿里性能專家全方位對比Jmeter和Locust,到底誰更香?


最終總結


發壓能力:相同併發下,Locust(使用FastHttpLocust)> Jmeter

併發能力:Locust和Jmeter旗鼓相當,都能滿足工作需求,Jmeter消耗的內存更高

結果報表:Jmeter好於Locust,但是基本都滿足工作需求

學習成果:Jmeter>Locust

易用性:Jmeter > Locust


使用建議

如果只是做簡單的接口測試、壓力測試,沒有需要寫代碼來擴展的特殊需求,首選Jmeter;

如果某些測試場景需要寫代碼來擴展,你會Java的話,可以選擇Jmeter;

如果某些測試場景需要寫代碼來擴展,你會Python的話,可以選擇Locust;

如果想在單臺機器發起更大的壓力的話,並且Python代碼能力不錯的話,可以選擇Locust,記得一定要使用FastHttpLocust客戶端


作  者:Testfan 北河老師

出  處:微信公眾號:自動化軟件測試平臺


分享到:


相關文章: