原文轉(zhuǎn)自:https://blog.csdn.net/lovesoo/article/details/78579547
https://blog.csdn.net/qq_40646143/article/details/79578270
Apache JMeter是一款純java編寫負載功能測試和性能測試開源工具軟件。相比Loadrunner而言,JMeter小巧輕便且免費,逐漸成為了主流的性能測試工具,是每個測試人員都必須要掌握的工具之一。
本文為JMeter性能測試完整入門篇,從Jmeter下載安裝到編寫一個完整性能測試腳本、最終執(zhí)行性能測試并分析性能測試結(jié)果。
運行環(huán)境為Windows 10系統(tǒng),JDK版本為1.8,JMeter版本為3.3。
可以先確認(rèn)下自己電腦有沒有安裝JDK,開始->運行->然后輸入cmd->進入命令行界面,輸入java -version , 出現(xiàn)以下信息就是此電腦已安裝了JDK
由于Jmeter是基于java開發(fā),首先需要下載安裝JDK (目前JMeter只支持到Java 8,尚不支持 Java 9)
1. 官網(wǎng)下載地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
2. 選擇Java SE 8u151/ 8u152,點擊JDK下載
解壓到指定文件夾 D:\1\apache-jmetes\apache-jmeter-5.1.1
接下來就是配置Jmeter環(huán)境變量
(1)“我的電腦”>鼠標(biāo)右鍵菜單>"屬性">"高級系統(tǒng)設(shè)置">"環(huán)境變量";
( 2 ) 在系統(tǒng)變量中添加倆個屬性
① JMETER_HOME=D:\1\apache-jmetes\apache-jmeter-5.1.1 (就是jmeter保存的路徑)
② CLASSPATH=%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar; %JMETER_HOME%\lib\jorphan.jar;
(這個復(fù)制上去就ok)
( 3 ) 在用系統(tǒng)變量path后面加上%JMETER_HOME%\bin 如圖 注意是系統(tǒng)變量
最后在cmd輸入jmeter 直接打開 如圖
我們選取最常見的百度搜索接口:
http://www.baidu.com/s?ie=utf-8&wd=jmeter性能測試
ie:編碼方式,默認(rèn)為utf-8
wd: 搜索詞
搜索結(jié)果,我們可以通過校驗結(jié)果中是否含有搜索詞wd來判斷本次請求成功或失敗。
右鍵點擊“測試計劃” -> “添加” -> “Threads(Users)” -> “線程組”
因為接口調(diào)試需要,我們暫時均使用默認(rèn)設(shè)置,待后面真正執(zhí)行性能測試時再回來配置。
右鍵點擊“線程組” -> “添加” -> “Sampler” -> “HTTP請求”
右鍵點擊“線程組” -> “添加” -> “監(jiān)聽器” -> “察看結(jié)果樹”
我們可以添加用戶自定義變量用以Http請求參數(shù)化,右鍵點擊“線程組” -> “添加” -> “配置元件” -> “用戶定義的變量”:
右鍵點擊“HTTP請求” -> “添加”-> “斷言” -> “響應(yīng)斷言”
類似loadrunner的檢查點,可以檢查響應(yīng)碼是否為200
右鍵點擊“HTTP請求” -> “添加”-> “監(jiān)聽器” -> “斷言結(jié)果”
這時,我們再運行一次就可以看到斷言結(jié)果成功或失敗了 (成功時沒信息)
右鍵點擊“線程組” -> “添加” -> “監(jiān)聽器” -> “聚合報告”,用以存放性能測試報告
右鍵【添加】-【配置元件】-【Csv Data Set Config】
這個配置元件可以允許從你輸入的路徑來讀取文件,然后根據(jù)分隔符獲取到數(shù)據(jù)。
如下圖,輸入的數(shù)據(jù)。
講解:
a,名稱和注釋不需要過多解釋,自己定義。
b,Filename:參數(shù)化文件的讀取位置。這個路徑可以是絕對路徑也是可以相對路徑。在分布式測試中,還是利用相對路徑比較方便,因為有的機器可能安裝路徑不一樣。
c,File Encoding:編碼格式,選擇utf-8
d,Variable Names:變量名稱。這里定義的變量名稱,后面就可以直接用來引用了。(多個變量名稱以逗號隔開。例如username,passwd。參數(shù)化文件中同樣有對應(yīng)的兩列數(shù)據(jù)。)
e,Ignore first line:忽略第一行數(shù)據(jù)。(類似loadrunner中第一行數(shù)據(jù)是變量名稱,如果你的配置文件中為了記憶第一行也是變量名,可以選擇是忽略這行數(shù)據(jù))
f,Delimiter:分隔符,默認(rèn)逗號。
g,Allow quoted data:是非選項,是否允許變量中間有分隔符,這里最好先默認(rèn)false,數(shù)據(jù)中間最好不要有分隔符。
h,Recycle on EOF和Stop thread on EOF按需設(shè)置。是否循環(huán),到結(jié)尾是否停止測試。我這里設(shè)置了True和False
i,Sharing mode:先選擇所有的線程都可以利用此參數(shù)化。
準(zhǔn)備測試數(shù)據(jù)。這里只是簡單的寫了幾個數(shù)據(jù)來演示效果。
在請求中引用該變量。
引用方法是 ${} ;其中{}內(nèi)寫入?yún)?shù)化中的變量。
注:在parameter中加入一些多余的參數(shù)沒有問題,故在訪問百度的請求后面隨意加了一個參數(shù)。
修改循環(huán)次數(shù)。這里設(shè)置6次,是因為參數(shù)里面有5個數(shù)據(jù),測試一下數(shù)據(jù)取完之后的效果。
點擊運行,查看結(jié)果樹。
可以看到共發(fā)送了6次請求,而且請求參數(shù)中已經(jīng)獲取了變量的數(shù)據(jù)。
打開第二個請求??梢钥吹降诙€請求的參數(shù)里面變量值為data-b。
順序讀取的。
找到最后一個請求,點開查看。
請求參數(shù)中searchid是data-a,說明數(shù)據(jù)是從頭開始取的,也就是數(shù)據(jù)是遍歷后循環(huán)的。
參數(shù)化完成了。
點擊線程組,配置本次性能測試相關(guān)參數(shù):線程數(shù),循環(huán)次數(shù),持續(xù)時間等,這里我們配置并發(fā)用戶數(shù)為10,持續(xù)時間為60s
點擊綠色小箭頭按鈕即可啟動測試,測試之前需要點擊小掃把按鈕清除之前的調(diào)試結(jié)果。
待性能測試執(zhí)行完成后,打開聚合報告可以看到:
聚合報告參數(shù)詳解:
1. Label:每個 JMeter 的 element(例如 HTTP Request)都有一個 Name 屬性,這里顯示的就是 Name 屬性的值
2. #Samples:請求數(shù)——表示這次測試中一共發(fā)出了多少個請求,如果模擬10個用戶,每個用戶迭代10次,那么這里顯示100
3. Average:平均響應(yīng)時間——默認(rèn)情況下是單個 Request 的平均響應(yīng)時間,當(dāng)使用了 Transaction Controller 時,以Transaction 為單位顯示平均響應(yīng)時間
4. Median:中位數(shù),也就是 50% 用戶的響應(yīng)時間
5. 90% Line:90% 用戶的響應(yīng)時間
6. Min:最小響應(yīng)時間
7. Max:最大響應(yīng)時間
8. Error%:錯誤率——錯誤請求數(shù)/請求總數(shù)
9. Throughput:吞吐量——默認(rèn)情況下表示每秒完成的請求數(shù)(Request per Second),當(dāng)使用了 Transaction Controller 時,也可以表示類似 LoadRunner 的 Transaction per Second 數(shù)
10. KB/Sec:每秒從服務(wù)器端接收到的數(shù)據(jù)量,相當(dāng)于LoadRunner中的Throughput/Sec
一般而言,性能測試中我們需要重點關(guān)注的數(shù)據(jù)有: #Samples 請求數(shù),Average 平均響應(yīng)時間,Min 最小響應(yīng)時間,Max 最大響應(yīng)時間,Error% 錯誤率及Throughput 吞吐量。
至此,我們使用JMeter完成了一個完整的Http接口性能測試流程,從腳本編寫,執(zhí)行到最終結(jié)果分析。
完整的腳本源碼下載鏈接: https://pan.baidu.com/s/1eS90cVo 密碼: st15