本文作者朱凱是環(huán)信測試主管,有近20年測試工作經(jīng)驗,服務(wù)過多種行業(yè)領(lǐng)域。擅長性能測試,有多個大型項目的性能測試經(jīng)驗。
互聯(lián)網(wǎng)時代,因為超過系統(tǒng)承載能力而出現(xiàn)的宕機情況,時有發(fā)生,不僅給用戶帶來極為不好的體驗,也讓互聯(lián)網(wǎng)廠商蒙受了巨大的損失。
根據(jù)Aberdeen Group的研究報告,對于Web網(wǎng)站,1秒的頁面加載延遲相當(dāng)于少了11%的PV(page view 打開頁面的次數(shù)),相當(dāng)于降低了16%的顧客滿意度。
Compuware公司分析了超過150個網(wǎng)站和150萬個瀏覽頁面,發(fā)現(xiàn)頁面響應(yīng)時間從2秒增長到10秒,會導(dǎo)致38%的頁面瀏覽放棄率。
如何對系統(tǒng)的承載能力和響應(yīng)時間做出準(zhǔn)確的評估,為資源的合理配置及優(yōu)化提供依據(jù),性能測試就成了必不可少的測試手段,本文會給讀者推薦一款業(yè)界占有率最高的一款性能測試工具——Jmeter。
下面會從成本、報表系統(tǒng)和擴展性三個維度來介紹下業(yè)界最高占有率的性能測試工具Jmeter。
1、成本
費用成本
Jmeter開源,免費,工具費用成本為0。
使用成本
部署成本非常低,僅依賴jdk,jmeter包解壓即可使用,真正做到開箱即用。
腳本編寫門檻很低,Jmeter有UI操作界面,方便快速,常規(guī)場景0代碼即可使用。
豐富的組件滿足不同的場景需求:
各種好用的函數(shù)能讓數(shù)據(jù)生成更加快捷:
廣泛的協(xié)議支持滿足絕大多數(shù)性能測試場景:
-
Web - HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET,...)
-
SOAP / REST Webservices
-
Websocket
-
MQTT
-
XMPP
-
FTP
-
Database via JDBC
-
LDAP
-
Message-oriented Middleware (MOM) via JMS
-
Mail - SMTP(S), POP3(S) and IMAP(S)
-
Native commands or shell scripts
-
TCP
-
Java Objects
2、報表系統(tǒng)
Jmeter能生成豐富的html格式報表系統(tǒng),從不同維度對性能測試結(jié)果進(jìn)行分析,以下是部分Jmeter報告的示例圖。
報告的基本信息,包括執(zhí)行時間、應(yīng)用性能指數(shù)和請求概要信息等:
統(tǒng)計概要信息,包括請求名、請求數(shù)量、成功數(shù)量、錯誤率、平均響應(yīng)時間、吞吐率(tps)和網(wǎng)絡(luò)流量等:
錯誤概要信息,包括錯誤類型、錯誤數(shù)量、錯誤類型占比和錯誤數(shù)量百分比等:
Top 5錯誤概要信息,包括錯誤請求名、請求數(shù)量、top 5錯誤請求類型和top 5錯誤請求數(shù)量等:
整個測試運行期間的響應(yīng)時間圖,包括所有請求的響應(yīng)時間圖:
整個測試運行期間的響應(yīng)時間分布百分比圖,包括P90、P95、P99、Max和Min:
整個測試運行期間的活動線程數(shù):
整個測試運行期間的吞吐字節(jié)數(shù):
-
Jmeter如需生成報告,需先記錄日志文件,此日志通常會非常大,注意將該文件生成到磁盤空間足夠的區(qū)域。
-
Jmeter生成報告前會在命令執(zhí)行目錄生成一個temp文件夾,該文件夾空間占用會非常大,注意在磁盤空間足夠的區(qū)域執(zhí)行命令。
3、軟件擴展性
Jmeter本身是100%Java實現(xiàn),擴展非常方便?梢宰约洪_發(fā)各種協(xié)議包、邏輯組件等。
另外不得不提的就是Jmeter本身的社區(qū)支持,plugins manager,目前已有100+插件,且還在不斷快速增加中,插件遍布jmeter的各種組件類型,極大的方便了使用者的快速組合出各種性能測試場景。
plugins manager的安裝和使用也非常的容易。從https://jmeter-plugins.org/install/Install/頁面下載jmeter-plugins-manager-1.7.jar,放到j(luò)meter的lib/ext目錄后重啟jmeter,即可從菜單中找到插件中心:
橫向擴展性
當(dāng)我們要進(jìn)行百萬級TPS性能測試時,單個實例難免力不從心,這個時候,Jmeter的分布式測試模式能很好的解決這個問題。Jmeter的分布式工作模式為一master,多slave模式,如下圖:
性能測試過程啟動后,master機器下發(fā)腳本到各slave機,由slave機對目標(biāo)機器發(fā)起請求,如下圖:
單個jmeter實例啟用的線程數(shù)建議1000-2000之間,太多可能會導(dǎo)致jmeter自身性能下降。
-
分布式測試時,腳本由master機器下午到各slave機,所以slave機并不需要放置測試腳本;測試腳本中如果有讀取本地csv的動作,會從各slave機本地讀取,為了降低部署成本,分布式測試時,不建議有讀取本地文件的行為。
-
分布式測試時,在master機器上執(zhí)行腳本的過程如果中斷測試,會導(dǎo)致第二次測試無法連接到slave機器,此情況需要重啟所有slave機器。
4、一個小示例
最后,讓我們用一個簡單的例子來領(lǐng)略Jmeter構(gòu)建性能測試方案的快捷性:
1.在Test Plan下添加一個Thread Group并配置好參數(shù)
2.在Thread Group下添加HTTP Request并配置好參數(shù)
3.在Thread Group下添加HTTP Header Manager并配置好參數(shù)
4.在Thread Group下添加View Results Tree和Summary Report并啟動測試
5.查看View Results Tree中的詳細(xì)信息和Summary Report中的匯總信息
GUI模式通常用來創(chuàng)建和調(diào)試腳本,正式做性能測試推薦用命令行來測試:jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]