壓力測試(Stress Test)婿屹,也稱為強度測試灭美、負載測試。壓力測試是模擬實際應用的軟硬件環(huán)境及用戶使用過程的系統(tǒng)負荷昂利,長時間或超大負荷地運行測試軟件届腐,來測試被測系統(tǒng)的性能铁坎、可靠性、穩(wěn)定性等犁苏。目前互聯(lián)網(wǎng)的環(huán)境下厢呵,壓力測試是必不可少的,其中Apache JMeter是目前主流的開源的壓力測試工具傀顾。
Apache JMeter是Apache組織開發(fā)的基于Java的壓力測試工具。用于對軟件做壓力測試碌奉,它最初被設計用于Web應用測試短曾,但后來擴展到其他測試領域。 它可以用于測試靜態(tài)和動態(tài)資源赐劣,例如靜態(tài)文件嫉拐、Java 小服務程序、CGI 腳本魁兼、Java 對象婉徘、數(shù)據(jù)庫、FTP 服務器咐汞, 等等盖呼。JMeter 可以用于對服務器、網(wǎng)絡或?qū)ο竽M巨大的負載化撕,來自不同壓力類別下測試它們的強度和分析整體性能几晤。另外,JMeter能夠?qū)贸绦蜃龉δ?回歸測試植阴,通過創(chuàng)建帶有斷言的腳本來驗證你的程序返回了你期望的結果蟹瘾。為了最大限度的靈活性,JMeter允許使用正則表達式創(chuàng)建斷言掠手。
開始
下載
Jmeter可以在官網(wǎng)https://jmeter.apache.org/download_jmeter.cgi直接下載編譯過的文件
wget http://mirrors.shu.edu.cn/apache/jmeter/binaries/apache-jmeter-4.0.zip -O jmeter.zip
配置
下載好后解壓憾朴,并修改配置文件,使其啟動時默認使用中文語言
${jmeter-dir}/bin/jmeter.properties 37行左右
#Preferred GUI language. Comment out to use the JVM default locale's language.
language=zh_CN
運行
Windows下雙擊jmeter.bat啟動喷鸽,Linux或者其他用相應的腳本啟動
測試計劃
jmeter可以自定義測試計劃众雷,比較常用的有線程組(用戶組)、線程(用戶)魁衙、控制器报腔、定時器和監(jiān)聽器等
線程組
一般都需要定義一組用戶,用于模擬多用戶并發(fā)請求
如圖剖淀,定義了500用戶纯蛾,依次在30s內(nèi)遞增
線程
線程組內(nèi)定義工作內(nèi)容,或者一些通用的環(huán)境等
例如添加公共的默認請求信息
添加一個循環(huán)邏輯
添加一個Http請求
監(jiān)聽器
監(jiān)聽器用于獲取執(zhí)行情況纵隔,生成或者計算相應的數(shù)據(jù)
例如添加響應時間的報表
測試結果
編寫了一個jmeter腳本對我服務器上的兩個web服務進行了壓力測試翻诉,一個為webmvc炮姨,一個為webflux。由于機器的性能實在有限碰煌,出現(xiàn)了很多連接超時舒岸,但也有驚喜
我模擬在30s內(nèi)啟動500個用戶請求服務,每個用戶請求30次中間間隔隨機1-2s
WebMVC
webmvc 在并發(fā)請求上去后芦圾,貌似服務崩了蛾派,以至于后面的請求都未完成,我在半個小時后再次訪問web服務个少,仍然無響應洪乍。而從結果來看,數(shù)據(jù)庫服務也被擠下去夜焦。
[圖片上傳失敗...(image-e587ff-1526534671667)]
WebFlux
webflux 在并發(fā)方面帶給我一些驚喜壳澳,500的并發(fā)對于1核1G1M的機器來說,實在的太勉強了(還跑著數(shù)據(jù)庫)茫经,測試過程中也出現(xiàn)了較多的連接超時巷波,但是,服務一直保持可用卸伞。也查看過CPU抹镊,在連接超時的時間,CPU已經(jīng)被占滿瞪慧。應該是無法處理導致直接不接收相應的請求髓考。這也導致測試完成后,服務一直保持正常弃酌,訪問返回了正確結果氨菇。
插件
MQTT
jmeter還有許多插件,擴展它所支持的環(huán)境妓湘,例如MQTT插件https://github.com/emqtt/mqtt-jmeter查蓉,可用來測試MQTT服務,MQTT服務作為物聯(lián)網(wǎng)的重要組測部分榜贴,能進行壓力測試可以做到更好的評估豌研。
??Mine Site:https://www.dnocm.com/articles/almond/jmeter-info/