天天看點

基于 Jmeter 的百萬級 tps 性能測試實踐

如何對系統的承載能力和響應時間做出準确的評估,為資源的合理配置及優化提供依據,性能測試就成了必不可少的測試手段,本文會給讀者推薦一款業界占有率最高的一款性能測試工具——Jmeter。

本文作者朱凱是環信測試主管,有近20年測試工作經驗,服務過多種行業領域。擅長性能測試,有多個大型項目的性能測試經驗。

​網際網路時代,因為超過系統承載能力而出現的當機情況,時有發生,不僅給使用者帶來極為不好的體驗,也讓網際網路廠商蒙受了巨大的損失。

根據Aberdeen Group的研究報告,對于Web網站,1秒的頁面加載延遲相當于少了11%的PV(page view 打開頁面的次數),相當于降低了16%的顧客滿意度。

Compuware公司分析了超過150個網站和150萬個浏覽頁面,發現頁面響應時間從2秒增長到10秒,會導緻38%的頁面浏覽放棄率。

如何對系統的承載能力和響應時間做出準确的評估,為資源的合理配置及優化提供依據,性能測試就成了必不可少的測試手段,本文會給讀者推薦一款業界占有率最高的一款性能測試工具——Jmeter。

下面會從成本、報表系統和擴充性三個次元來介紹下業界最高占有率的性能測試工具Jmeter。

01、成本

費用成本

Jmeter開源,免費,工具費用成本為0。

使用成本

部署成本非常低,僅依賴jdk,jmeter包解壓即可使用,真正做到開箱即用。

腳本編寫門檻很低,Jmeter有UI操作界面,友善快速,正常場景0代碼即可使用。

基于 Jmeter 的百萬級 tps 性能測試實踐

豐富的元件滿足不同的場景需求:

基于 Jmeter 的百萬級 tps 性能測試實踐

各種好用的函數能讓資料生成更加快捷:

基于 Jmeter 的百萬級 tps 性能測試實踐

廣泛的協定支援滿足絕大多數性能測試場景:

  • 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

02、報表系統

Jmeter能生成豐富的html格式報表系統,從不同次元對性能測試結果進行分析,以下是部分Jmeter報告的示例圖。

報告的基本資訊,包括執行時間、應用性能指數和請求概要資訊等:

基于 Jmeter 的百萬級 tps 性能測試實踐

統計概要資訊,包括請求名、請求數量、成功數量、錯誤率、平均響應時間、吞吐率(tps)和網絡流量等:

基于 Jmeter 的百萬級 tps 性能測試實踐

錯誤概要資訊,包括錯誤類型、錯誤數量、錯誤類型占比和錯誤數量百分比等:

基于 Jmeter 的百萬級 tps 性能測試實踐

Top 5錯誤概要資訊,包括錯誤請求名、請求數量、top 5錯誤請求類型和top 5錯誤請求數量等:

基于 Jmeter 的百萬級 tps 性能測試實踐

整個測試運作期間的響應時間圖,包括所有請求的響應時間圖:

基于 Jmeter 的百萬級 tps 性能測試實踐

整個測試運作期間的響應時間分布百分比圖,包括P90、P95、P99、Max和Min:

基于 Jmeter 的百萬級 tps 性能測試實踐

整個測試運作期間的活動線程數:

基于 Jmeter 的百萬級 tps 性能測試實踐

整個測試運作期間的吞吐位元組數:

基于 Jmeter 的百萬級 tps 性能測試實踐
  • Jmeter如需生成報告,需先記錄日志檔案,此日志通常會非常大,注意将該檔案生成到磁盤空間足夠的區域。
  • Jmeter生成報告前會在指令執行目錄生成一個temp檔案夾,該檔案夾空間占用會非常大,注意在磁盤空間足夠的區域執行指令。

03、擴充性

軟體擴充性

Jmeter本身是100%Java實作,擴充非常友善。可以自己開發各種協定包、邏輯元件等。

另外不得不提的就是Jmeter本身的社群支援,plugins manager,目前已有100+插件,且還在不斷快速增加中,插件遍布jmeter的各種元件類型,極大的友善了使用者的快速組合出各種性能測試場景。

plugins manager的安裝和使用也非常的容易。從https://jmeter-plugins.org/install/Install/頁面下載下傳jmeter-plugins-manager-1.7.jar,放到jmeter的lib/ext目錄後重新開機jmeter,即可從菜單中找到插件中心:

基于 Jmeter 的百萬級 tps 性能測試實踐

橫向擴充性

當我們要進行百萬級TPS性能測試時,單個執行個體難免力不從心,這個時候,Jmeter的分布式測試模式能很好的解決這個問題。Jmeter的分布式工作模式為一master,多slave模式,如下圖:

基于 Jmeter 的百萬級 tps 性能測試實踐

性能測試過程啟動後,master機器下發腳本到各slave機,由slave機對目标機器發起請求,如下圖:

基于 Jmeter 的百萬級 tps 性能測試實踐

單個jmeter執行個體啟用的線程數建議1000-2000之間,太多可能會導緻jmeter自身性能下降。

  • 分布式測試時,腳本由master機器下午到各slave機,是以slave機并不需要放置測試腳本;測試腳本中如果有讀取本地csv的動作,會從各slave機本地讀取,為了降低部署成本,分布式測試時,不建議有讀取本地檔案的行為。
  • 分布式測試時,在master機器上執行腳本的過程如果中斷測試,會導緻第二次測試無法連接配接到slave機器,此情況需要重新開機所有slave機器。

04、一個小示例

最後,讓我們用一個簡單的例子來領略Jmeter建構性能測試方案的快捷性:

1.在Test Plan下添加一個Thread Group并配置好參數

基于 Jmeter 的百萬級 tps 性能測試實踐
基于 Jmeter 的百萬級 tps 性能測試實踐

2.在Thread Group下添加HTTP Request并配置好參數

基于 Jmeter 的百萬級 tps 性能測試實踐
基于 Jmeter 的百萬級 tps 性能測試實踐

3.在Thread Group下添加HTTP Header Manager并配置好參數

基于 Jmeter 的百萬級 tps 性能測試實踐
基于 Jmeter 的百萬級 tps 性能測試實踐

4.在Thread Group下添加View Results Tree和Summary Report并啟動測試

基于 Jmeter 的百萬級 tps 性能測試實踐

5.檢視View Results Tree中的詳細資訊和Summary Report中的彙總資訊

基于 Jmeter 的百萬級 tps 性能測試實踐