手把手簡單介紹一下Jmeter的使用方法,以某平台APP登錄接口為例:
1)單接口壓測。
2)依賴其它接口參數。以獲取用戶信息為例。
- CSV參數化。
- 參數提取。 Json提取器與正式表達式提取器。
方便初學者使用,Jmeter可以友好的選擇簡體中文:
一、單接口壓測
步驟:
- 添加 ->線程(用戶)->線程組
- 在線程組上 添加->取樣器->HTTP請求
- 在HTTP請求上 添加->配置元件->察看結果樹
Jmeter結果頁:
操作演示:
任何接口信息都預先使用抓包工具查看接口信息。這里使用的是Fiddler:
根據抓包信息,填入HTTP請求組件:這里服務器用是的域名,某些局域網測試環境使用的是IP地址加端口,端口號不要忘記填寫。內容編碼utf-8
HTTP信息頭管理器配置 Content-Type:application/json
運行一下,在察看結果樹中,可以看到HTTP請求成功,響應數據為服務器的返回數據,后面用戶信息查詢需要依賴這些結果數據,並且需要通過Json提取器或正則表達式提取器進行提取后才能使用。
添加響應斷言,響應數據內容可以作為這個接口的斷言,而且可以自定義失敗消息,設置如下:
償試將登錄的用戶名11165234970,改為1116523497:
如果要對此接口進行單用戶壓測,需要設置線程組屬性,並增加聚合報告:
注釋:
線程組屬性與聚合報告:
線程組屬性:
名稱:就如字面意思,起個有意義的名字就行 線程數:這里選擇1,表示用戶數,模擬多少用戶請求 Ramp-Up Period:單位是秒,默認時間是1秒。它指定了啟動所有線程所花費的時間,比如,當前的設定表示“在1秒內啟動1個線程,每個線程的間隔時間為1秒”。如果你需要Jmeter立即啟動所有線程,將此設定為0即可 循環次數:表示每個線程執行多少次請求。 調度器:選中之后可以配置啟動時間,立即或者預定的時間
聚合報告中,各項指標的說明: 1.Label:每個Jmeter的元素(例如HTTP請求)都有一個Name屬性,這里顯示的就是Name屬性值 2.樣本:表示你這次測試中一共發出了多少請求,如果模擬10個用戶,每個用戶迭代10次,那么這是顯示100 3.平均值Average:平均響應時間 4.中位數Median:也就是50%用戶的響應時間 5.百分位90%Line:90%用戶的響應時間 6.最小值Min:最小響應時間 7.最大值Max:最大響應時間
8.異常Error%:本次測試中出現錯誤的請求數量/請求的總數 9.吞吐量Throughput:吞吐量,表示每秒完成的請求數,(number of requests) / (total time) 10.KB/sec:每秒從服務器端接收、發送的數據量
二、參數依賴
為解決如下兩個問題,引入CSV參數化與參數提取器:
- 如果只使用一個用戶登錄,緩存讓登錄接口的測試數據不夠精准。使用CSV批量處理登錄用戶。
- 登錄后查看用戶信息時,需要依賴登錄接口返回的數據。使用提取器提取相關參數。第二個接口用到登錄后返回的 "accesstoken"和"customerguid"
1)CSV參數化操作如下:
參數文件:
測試賬號,密碼都是123456 (這是首行,配置CSV時選擇忽略) 11123081796 11165234970 11140921586 11102047359 11170609243 11192610487 11169120403 11181027064 11159706481 11105198230 ...
說明, 如果有多個參數,文件可如下設置,CSV變量名稱填寫 usr,passwd,code 英文逗號
11123081796,123456,0512 11140921586,123456,0520
因為文件第一行是說明,因此忽略首行=Ture,
設置線程屬性, 線程數10。 在HTTP請求消息體中將具體的Phone值改為 “$(usr)”,運行測試,查看結果樹:
響應數據中的Phone與上傳文件中的帳號依次順序顯示。
2)參數提取
添加Json提取器,正則表達式提取器:
Json提取器, 可以提取響應消息為Json格式的value值,針對此文的響應消息如下:
{
"Error": 0,
"Message": "",
"Data": {
"CustomerGuid": "f0214d55-91d5-4b42-8c24-93521ed2636a",
"Phone": "11140921586",
"AccessToken": "f1fd35a5e12a46e5"
},
"Exception": null
}
通過Json提取器可以提取Error、Message、Data、Exception的值。但不能提取值中值,比如不能提取CustomerGuid、Phone、AccessToken的值,想要提取則要用到正值表達式提取器。
正式表達式提取器頁面說明:
1.主體:接口的返回body.
2.引用名稱:其他地方引用提取值的變量名稱,如填寫的是:usr,具體的引用方式是${usr}
3.正則表達式:提取內容的正則表達式【注意:()表示提取,對於你要提取的內容需要用小括號括起來】,如, "AccessToken":"(.*?)" 此表達式可以匹配"AccessToken": "f1fd35a5e12a46e5",並將值賦值給變量atoken。其它的類似,抄抄。
4.模板:用$$引用起來,如果在正則表達式中有多個正則提取(多個括號),則可以是$2$,$3$等等,表示解析到的第幾個值給usr(正常情況,填寫$1$)
5.匹配數字:0代表隨機,-1代表所有,其余正整數代表將在已提取的內容中,第幾個匹配的內容。【注意:在使用正則表達式提取器的過程中,如果匹配數字選擇的是-1,還可以通過${usr_1}的方式來取第1個匹配的內容,${usr_2}來取第2個匹配的內容。】
6.缺省值:正則匹配失敗時,取的值.
下一個接口需要用到登錄后的兩個參數,設置兩個正式表達試提取器。
兩個HTTP請求用的HTTP信息頭管理器一樣的,因此將第一個HTTP請求信息頭管理器上移,讓兩個HTTP請求共享。
第二個HTTP請求用戶信息地址: https://xxx.xxx.com/sz/Profile/ProfileInfoRequest?accesstoken=839b5280143748d8&customerguid=41e3bff2-7d25-4805-a7b3-ec2816f91f70&sourcetype=9
抓包信息:get請求,用到登錄后返回的 "accesstoken"和"customerguid"。 如下填寫:
運行測試,第二個Http請求會自動拼接參數為一個完整的URL: