分享安利 | 好家伙,還不會模擬線上并發(fā)測試?

前言
隨著互聯(lián)網(wǎng)規(guī)模的不斷發(fā)展壯大,系統(tǒng)接口的并發(fā)要求也是越來越高了,雖然現(xiàn)在已經(jīng)有了很多技術(shù)可以提升系統(tǒng)的并發(fā)性能,但是測試又遇到了新的問題,我們該如何模擬線上環(huán)境的并發(fā)量呢?
今天我們推薦的這款測試利器,就可以很好地解決你的問題,一起來看看吧。
Jmeter
jmeter是什么
這一款工具是Apache開源基金會下的一個開源項目,是由純java開發(fā)的,在測試圈比較知名,對于做過測試工作的小伙伴,這個工具應(yīng)該不陌生。

百度百科的解釋:
Apache JMeter是Apache組織開發(fā)的基于Java的壓力測試工具。用于對軟件做壓力測試,它最初被設(shè)計用于Web應(yīng)用測試,但后來擴展到其他測試領(lǐng)域。它可以用于測試靜態(tài)和動態(tài)資源,例如靜態(tài)文件、Java小服務(wù)程序、CGI腳本、Java對象、數(shù)據(jù)庫、FTP服務(wù)器, 等等。JMeter可以用于對服務(wù)器、網(wǎng)絡(luò)或?qū)ο竽M巨大的負載,來自不同壓力類別下測試它們的強度和分析整體性能。另外,JMeter能夠?qū)?yīng)用程序做功能/回歸測試,通過創(chuàng)建帶有斷言的腳本來驗證你的程序返回了你期望的結(jié)果。為了最大限度的靈活性,JMeter允許使用正則表達式創(chuàng)建斷言。
Apache jmeter可以用于對靜態(tài)的和動態(tài)的資源(文件,Servlet,Perl腳本,java對象,數(shù)據(jù)庫和查詢,F(xiàn)TP服務(wù)器等等)的性能進行測試。它可以用于對服務(wù)器、網(wǎng)絡(luò)或?qū)ο竽M繁重的負載來測試它們的強度或分析不同壓力類型下的整體性能。你可以使用它做性能的圖形分析或在大并發(fā)負載測試你的服務(wù)器/腳本/對象。
簡單來說,他就是一款壓測工具,可以對我們的接口進行壓力測試,找到接口高并發(fā)場景下可能存在的系統(tǒng)缺陷。
它能干什么
根據(jù)官網(wǎng)給出的說明,它可以完成以下工作:
能夠加載和性能測試許多不同的應(yīng)用程序/服務(wù)器/協(xié)議類型: 網(wǎng)絡(luò)協(xié)議- HTTP,HTTPS(Java,NodeJS,PHP,ASP.NET等)SOAP/REST網(wǎng)絡(luò)服務(wù)FTP服務(wù)通過 JDBC連接的數(shù)據(jù)庫LDAP通過 JMS的面向消息的中間件(MOM)郵件協(xié)議- SMTP(S),POP3(S)和IMAP(S)本機命令或 Shell腳本TCP協(xié)議Java對象功能齊全的 Test IDE,可進行快速的Test Plan記錄(來自瀏覽器或本機應(yīng)用程序),構(gòu)建和調(diào)試。** CLI模式(命令行模式(以前稱為非GUI)/無頭模式)**從任何Java兼容操作系統(tǒng)(Linux、Windows、Mac OSX等)加載測試完整且可隨時呈現(xiàn)的動態(tài) HTML 報告 通過從大多數(shù)流行的響應(yīng)格式,HTML,JSON, XML或任何文本格式中提取數(shù)據(jù)的能力,輕松實現(xiàn)關(guān)聯(lián) 100%基于Java,具有完全的可移植性 。完整的多線程框架允許通過多個線程進行并發(fā)采樣,并通過單獨的線程組同時對不同的函數(shù)進行采樣。 緩存和脫機分析/重放測試結(jié)果。 高度可擴展的核心: 可插拔采樣器允許無限的測試功能。 可腳本化的采樣器(與 Groovy和BeanShell等JSR223兼容的語言)可以使用可插入計時器選擇幾個負載統(tǒng)計信息。 數(shù)據(jù)分析和可視化插件可實現(xiàn)出色的可擴展性和個性化。 函數(shù)可用于為測試提供動態(tài)輸入或提供數(shù)據(jù)操作。 通過針對 Maven,Gradle和Jenkins的第三方開源庫,輕松進行持續(xù)集成。
從上面的說明來看,Jmeter支持的協(xié)議很豐富,同時具備了極強的可擴展性和可移植性,因為是基于java開發(fā)的,所以它本身也是跨平臺的,同時還可以集成到maven、Gradle和Jenkins中,可以實現(xiàn)自動化測試,這一點就很強了。
開箱
接下來,我們就看下如何使用jmeter來完成我們的接口測試。
下載
首先,我們先去官網(wǎng)下載最新版本jmeter:
https://jmeter.apache.org/download_jmeter.cgi
最新版本是5.4.1,運行環(huán)境基于jdk1.8+

windows環(huán)境下選擇zip那個版本,不過也不影響,都是java開發(fā)的,解壓工具能解壓就行。
解壓運行
直接解壓,然后進入bin目錄,然后運行jmeter.bat腳本就可以了,當然前提條件是你要先配置本地的JDK環(huán)境,不會的小伙伴自行百度。

打開之后,它是這樣的

不習慣英文界面的小伙伴可以修改成中文

我不喜歡深色主題,所以我把它改成淺色了,想改的小伙伴自己改:

開始測試
在開始測試之前,我們先要啟動一個接口服務(wù),我本地啟動了一個springboot項目,就是上周的那個項目。單個springboot,內(nèi)置的Tomcat是支持10000并發(fā)的,這一點還是很強的。
打開之后,默認已經(jīng)創(chuàng)建了一個測試計劃,我們可以直接用,修改相應(yīng)配置即可
配置測試計劃
設(shè)置名稱和注釋,這里的配置主要是方便你管理測試計劃,你不設(shè)置也不影響

創(chuàng)建線程組
選中測試計劃,右鍵選擇添加->線程->線程組

設(shè)置線程組配置
這里設(shè)置的就是我們的并發(fā)量,包括線程數(shù)、單個線程循環(huán)次數(shù)、延遲時間、持續(xù)時間等

添加測試請求
選中線程組,右鍵選擇添加->取樣器->HTTP請求。這里需要注意的是添加的時候必須在線程組下創(chuàng)建,否則是沒法測試的,因為所有的測試請求都是通過線程組發(fā)起的。

配置測試請求
這里就是配置我們接口的請求參數(shù),包括協(xié)議、接口地址、請求方式、請求參數(shù)等

這時候就可以選中測試計劃開始測試了,運行之前會提示我們保存測試計劃:

保存完成后,測試自動運行,這時候測試雖然啟動了,但是是不會顯示測試報告的,所以我們還需要增加報告。
增加報告
同樣是選中線程組,右鍵選擇添加->監(jiān)聽器->選擇需要的報告。這里我添加了兩個報告,一個是匯總圖,一個是匯總報告,你也可以根據(jù)自己的需要選擇。

然后再次運行,我們會發(fā)現(xiàn)匯總圖和匯總報告這里就有結(jié)果了:
匯總報告
報告里面包含了接口響應(yīng)時間的統(tǒng)計,包括平均響應(yīng)時間、最大響應(yīng)時間、異常率、系統(tǒng)吞吐量、發(fā)送/接受數(shù)據(jù)的統(tǒng)計等,還是比較詳細的。

匯總圖

圖表是支持配置的,你可以根據(jù)自己的需要進行設(shè)置,選擇圖形左上角的設(shè)置菜單即可

圖表和數(shù)據(jù)都是可以保存的
其他圖表

增加斷言
寫過單元測試的小伙伴肯定聽過或者寫過斷言這個東西,斷言簡單來說就是我們在測試程序的時候,需要對某一段代碼或方法運行結(jié)果進行比對,以判斷程序業(yè)務(wù)邏輯是否正常,也就是做輸入輸出對比的。
比如我們將2傳入一個方法,根據(jù)我們的預期,應(yīng)該是5,如果處理之后結(jié)果與預期一致則斷言通過,否則不通過,單元測試的斷言這里就不說了,有興趣的小伙伴自己去看看。
jmeter添加斷言很簡單,選中線程組,右鍵選擇添加->斷言->選擇你需要的斷言方式。這里我們選擇json斷言

簡單配置
Assert josn path exists設(shè)置json中你也校驗的key,如果你只校驗key存在即可,那可以去掉Additionally assert value的勾,這個配置勾選的話,會校驗上面配置的key的值,而且你需要在expected value設(shè)置預期的值。

這時候直接運行的話,是看不到斷言結(jié)果的,我們還需要增加斷言報告:
直接在監(jiān)聽器下選擇斷言結(jié)果就可以了。

然后再次運行,斷言結(jié)果這里就有數(shù)據(jù)了,斷言如果通過是沒有數(shù)據(jù)顯示的:

但如果你指定的key不存在,就會有錯誤提示了,提示結(jié)果中不存在這個字段:

如果你的返回值與斷言預期結(jié)果不一致,則會提示,結(jié)果不匹配:

補充
jmeter的測試計劃是支持多線程組的,也就是說你的一個測試計劃可以配置多個接口,同時測試。
總結(jié)
jmeter作為一款流行的壓測工具,從上手體驗來看,還是很不錯的,操作沒有特別復雜,只需要簡單配置就可以完成系統(tǒng)壓測,這也可能是它比較流行的原因。目前,很多公司,系統(tǒng)上線前都是用jmeter進行壓測的,這也從側(cè)面體現(xiàn)了它穩(wěn)定、強大的壓測功能。
今天的內(nèi)容依然是干貨滿滿,讓你直接可以開箱即用,而且也滿足了你絕大多數(shù)的測試場景,有接口壓測需要的小伙伴可以用起來了。
- END -