1. 程式人生 > >一文弄懂使用Jmeter來進行效能測試

一文弄懂使用Jmeter來進行效能測試

該文章是基於上一次文章的 [軟體測試漫談(web測試,自動化測試,Jmeter)](https://mp.weixin.qq.com/s/YsqHLfdihVo2sJxSZQIXWg) 的續篇, 主要是詳細講解 Jmeter 的入門教程。 因為上次的文章只是簡單地講解了 Jmeter 的使用和一些概念,所以很多初學者像按照原來的文章操作 Jmeter 進行測試是比較麻煩的,所有才有了這篇後續,以幫助開發者能快速使用 Jmeter 來進行測試。如果還沒看過之前那個文章,建議先看一下,學習一下Jmeter的基本概念,以便熟悉該文章操作的一些概念。該文章基於 Jmeter 版本 5.1.1 和 Windows 10。 ### 測試需求 模擬20個 谷歌瀏覽器型別 使用者 同時 訪問 http://www.baidu.com/ 和 https://www.csdn.net/api/articles (該連結是獲取 csdn 上的文章,如果正確會返回狀態 "status": "true",) 在負載達到30 QPS 時的平均響應時間 和 結果準確度。 ### 操作步驟 0. 在 Jmeter 官網上下載 Jmeter 安裝包,下載地址: [https://apache.osuosl.org//jmeter/binaries/apache-jmeter-5.2.1.zip](https://apache.osuosl.org//jmeter/binaries/apache-jmeter-5.2.1.zip),需要先安裝了 Jdk ,解壓 開啟檔案 `apache-jmeter-5.1.1\bin\jmeter.bat` #### 簡單設定請求 1. 在測試計劃中選擇新建執行緒組,重新命名執行緒組為20個模擬使用者執行緒組。 ![新建執行緒組](https://img-blog.csdnimg.cn/2020040909121816.png) 在 Number of Threads 欄 填寫 20 ,設定 執行緒數為 20。在 Loop Count 欄填寫 10000,設定 迴圈請求10000 次。 ![設定執行緒數](https://img-blog.csdnimg.cn/20200409092220284.png) 2. 線上程組上右鍵,選擇新增 Http 請求的取樣器 ![新增取樣器](https://img-blog.csdnimg.cn/20200409091729188.png) 重新命名該取樣器為請求百度地址,在 `Server Name or IP` 欄填寫 `www.baidu.com` ,`Prot Number` 欄填寫 `80` 埠,如果是https 協議,則填寫 `443` 埠。 ![設定請求百度地址請求](https://img-blog.csdnimg.cn/20200409092520322.png) 3. 再線上程組上填寫 HTTP 請求取樣器,並按照如下圖來進行設定和重新命名為 `請求 csdn 文章` 。 ![設定請求csdn文章](https://img-blog.csdnimg.cn/20200409092842474.png) 4. 設定結果檢視 ,線上程組右鍵,新增結果樹 ![新建結果樹](https://img-blog.csdnimg.cn/20200409093350702.png) 重新命名為 `結果檢視`,然後點選 上方的 綠色的執行按鈕,即可,檢視到傳送的請求 HTTP 請求。點選結果樹中的,任意一個請求可以看到請求的請求頭,請求時間,響應頭,響應時間等具體資訊。 ![設定結果檢視樹](https://img-blog.csdnimg.cn/20200409093531581.png) 然後,我們可以通過新增 總報表 的監聽器 來檢視 請求的總體傳送情況 ![總的報告](https://img-blog.csdnimg.cn/2020040923125381.png) ![總的請求傳送情況](https://img-blog.csdnimg.cn/20200409231504267.png) #### 一些特定引數設定 5. 設定吞吐量/QPS Jmeter 提供了一個很有用的定時器,叫做 Constant Throughput Timer (常數吞吐量定時器),該定時器可以很方便地控制給定的取樣器傳送請求的吞吐量。 線上程組上右鍵新建吞吐量定時器 ![新增吞吐量定時器](https://img-blog.csdnimg.cn/20200409230638827.png) 在 Target throughput( in smples per minute )(每分鐘的目標吞吐量): 實際填寫的數值為:60 * QPS ,所以這裡我們填寫1200,然後 Calculate Through based on 選擇 All active threads 。 ![設定吞吐量](https://img-blog.csdnimg.cn/20200409231147480.png) `注意`:這裡計算的吞吐量有時候並不準確,一般進行測試的時候,我們會選擇提高一些吞吐量的值以達到實際要求的 QPS 6. 設定請求頭的引數,設定瀏覽器型別 對於某些請求,有可能我們需要設定請求的請求頭的資訊,例如:瀏覽器型別,鑑權資訊 token 等,這時候,我們可以通過新增 http 請求頭的配置元件來完成。 ![配置元件](https://img-blog.csdnimg.cn/20200409231817842.png) 新增配置元件之後,我們新增上瀏覽器的請求頭資訊. ![新增配置資訊](https://img-blog.csdnimg.cn/20200409232144752.png) 這時候再點選執行,可以看得到傳送的請求中,請求頭包含了我們設定的資訊: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200409232421431.png) 7. 判斷返回結果的是否成功 預設 Jmeter 是根據響應碼來判斷結果是否請求請求的,非200 的判斷為不成功,如果我們想根據響應內容判斷,則需要新增斷言器,來自己判斷內容包含哪些字元等,一般我們新增響應資訊的斷言器,即可。 ![新增斷言器](https://img-blog.csdnimg.cn/20200409232457547.png) 我們加上如果請求響應資訊中包含了字元 `{"status":"true` 我們則判斷該請求成功,否則失敗,我們可以這樣來設定斷言。 ![設定結果斷言器](https://img-blog.csdnimg.cn/20200409232943514.png) 如果我們想單單針對某個請求來進行斷言,我們可以,將斷言放到某個請求裡面,這樣它就會只判斷該請求。這裡我們只針對 獲取 csdn的文章的請求來斷言。 #### 最終的結果 我們完成以上配置之後,點選執行,等待結果執行穩定好,檢視 總報告情況 可以得到以下 截圖 ![總結果](https://img-blog.csdnimg.cn/20200409234916331.png) 可以看到,再QPS 約為 5 的情況下,兩個請求的總體的情況平均響應時間為 2.371 秒,當前總共傳送了 733個請求,錯誤率 為 3.14%(暫定的時候,後面幾個請求會斷開,也算入了錯誤率的)。由於這兩個請求的響應時間都比較慢和定義的使用者數只為20個,所以QPS 比較難達到20 . 讀者後面可以自己提高 執行緒數 或者替換請求地址來測試看看。 ### 注意事項 1. 一般而已如果需要進行很高的QPS 的效能測試,不要使用介面來測試,配置完成後,儲存jmx 檔案之後,再使用命令列來測試會更好,因為介面執行的話,會佔用很大資源,實際傳送的請求可能得不到自己想要的QPS。介面執行命令,啟動 jmeter 的時候就有提示。`jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]` ![執行命令](https://img-blog.csdnimg.cn/20200409233625117.png) ## 參考資源 1. [Jmeter 中文教程 板書](//download.csdn.net/download/weixin_37610397/12313606) ![CrudBoys](https://img-blog.csdnimg.cn/202011141438511