測試計劃
- 線程組
- 【Sampler】
- 【邏輯控制器】
- 【前置處理器】
- 【後置處理器】
- 【斷言】:檢查點
- 【定時器】:思考時間、集合點
- 【配置元件】
- 【監聽器】:檢視結果樹、聚合報告
- 作用域
- jmeter執行順序
- 函數助手
- beanshell
- 日志相關
- 分布式壓測
- 生成報告
- jmeter最佳實踐
- 關于jmeter腳本
- 性能測試場景設計
之前,寫過一篇文章:jmeter,學這些重點就可以了,今天就來把一些重點細節點說一下。
測試計劃
可以了解為各種測試元件的容器
其中:
使用者定義變量:定義整個測試中使用的重複值(全局變量),一般定義伺服器的ip、端口,這樣,我們改下值,就可以測試不同的環境了,比如測試環境、灰階環境等;或者把對應的幾個測試環境都設定為變量,後面用哪個,就引用哪個,不過這個引用,最好是在請求預設值中引用,預設不勾選,如果測試計劃下有多個啟用的線程組,他們是并行執行的(也就是混合場景);
如果勾選,是順序執行,即前一個線程組執行完了,才執行下一個線程組,大家可以試一下;相當于lr的group模式;調試的時候用,會列印更多日志,不勾選,勾選的話很影響性能,會有詳細的請求記錄,消耗資源;函數測試模式勾選了,還要把檢視結果樹寫到一個路徑下的檔案中,函數測試模式才生效
一般用于添加jar包配合着beanshell使用,注意:lib目錄下加入了新的jar包,需要重新開機jmeter;參考連結中“方式一:把jar包加入到classpath”:參考其他文章:https://www.cnblogs.com/uncleyong/p/11475577.html
線程組
相當于LR中場景設計,可以設定一些并發政策,模拟并發使用者發送請求
其中:
預設即可,并發過程中,遇到錯誤,繼續執行下一次請求
線程數:并發數
在指定的時間内啟動線程,如果線程數是100,這裡是10,表示10秒内啟動100線程,但是不一定是每秒啟動10個線程,循環次數:不勾選永遠,後面的次數生效;類似LR中運作時設定中疊代次數;循環控制器是循環,相當于LR中的for循環
排程器配置:
循環次數中勾選永遠,持續時間就是并發的時間,一般10-15分鐘,根據業務實際情況來設定If Loop Count is not -1 or Forever, duration will be min(Duration, Loop Count * iteration duration),如果未勾選永遠,建議不要勾選排程器和設定持續時間
在目前時間之後的啟動延遲時間後開始運
【Sampler】
線上程組下(在測試計劃下面不能添加取樣器),是被請求内容;假如請求是:http://192.168.168.168:8057/user/query?name=全棧測試筆記
自動重定向:隻記錄最後跳轉請求,會丢失初始請求的Cookie等資訊;
跟随重定向:記錄整個請求過程所有資訊, 過程請求為sub-sampler,即子請求
POST請求時,使用的Content-Type,檔案上傳的時候使用;預設不勾選,此時的Content-Type是application/x-www-form-urlencoded
參數中,如果有特殊字元時(“=”、“&”、“?”等),最好選上“編碼”,否則字元串可能會被截斷;
自動添加參數名和值之間的等号
發送json和發送檔案
上圖,用戶端實作預設是HttpClient4,也可以從配置檔案中看到,當然也可以改配置檔案
用戶端設定逾時時間
jmeter在發出 HTTP請求并獲得響應的HTML檔案内容後,且對該HTML進行分析并擷取HTML中包含的所有資源(圖檔等),預設不選中,此選項和loadrunner中是否下載下傳非html資源類似;
響應儲存為32位的MD5加密字元
(重點)HTTP請求:執行個體參考:測試必備:jmeter測試http協定接口的各種傳參方式
BeanShell Sampler,執行個體參考:https://www.cnblogs.com/uncleyong/p/7189778.html,或者:https://www.cnblogs.com/uncleyong/p/9429752.html
Debug Sampler:調試的時候用,隻看到jmeter變量,執行個體參考:https://www.cnblogs.com/uncleyong/p/10939647.html
如果是其它協定,比如dubbo、websocket、webservice、smtp、tcp、jdbc,添加對應的取樣器等即可,如果沒有,那麼就需要我們自己開發,是以,java基礎是必備的。
dubbo,執行個體參考:https://www.cnblogs.com/uncleyong/p/10732754.html
websocket,執行個體參考:https://www.cnblogs.com/uncleyong/p/10735967.html
webservice,執行個體參考:https://www.cnblogs.com/uncleyong/p/10990172.html
smtp,執行個體參考:https://www.cnblogs.com/uncleyong/p/10990159.html
tcp,執行個體參考:https://www.cnblogs.com/uncleyong/p/10739526.html
jdbc,執行個體參考:https://www.cnblogs.com/uncleyong/p/10990333.html
【邏輯控制器】
事務控制器
事務控制器:要把多個請求作為一個事務時才用,建議将這四個請求放在一個事務控制器中,并且勾選‘Generate parent sample’
ForEach控制器
類似計數器:https://www.cnblogs.com/uncleyong/p/13667202.html
ForEach的應用:先請求A頁面,通過正規表達式擷取到多個值,然後循環這些值,依次作為B請求的入參
classIds_matchNr=8,是jmeter正則個數的統計(${refName_matchNr}來引用函數總共發現的比對組合數目),表示比對到8個結果
是以,可以通過Debug PostProcessor取樣器看到jmeter提供給我們的變量
輸入變量classIds是一個數組
1、從0到${classIds_matchNr},(0, ${classIds_matchNr}],左開右閉。
2、每次循環,擷取到的值放到classId中。
請求名稱也加上變量,友善檢視
僅一次控制器
僅一次控制器,是控制線程内部的循環隻執行一次:
1個vuser,運作3次,檢視結果樹中1個結果
3個vuser,運作1次,檢視結果樹中3個結果
3個vuser,運作2次,檢視結果樹中3個結果
應用場景:非分布式壓測中,隻執行一次的被關聯請求,比如登入
if控制器
https://www.cnblogs.com/uncleyong/p/13667202.html
循環控制器
https://www.cnblogs.com/uncleyong/p/13667202.html
【前置處理器】
發送請求前做的一些處理
BeanShell PreProcessor
執行個體參考:https://www.cnblogs.com/uncleyong/p/9429752.html,或者:https://www.cnblogs.com/uncleyong/p/7189778.html
【後置處理器】
發送請求後做的一些處理
正規表達式提取器
關聯的方式很多,我喜歡用萬能的正則,另外,大家可以看之前寫的:jmeter關聯的5種方式,或者:https://www.cnblogs.com/uncleyong/p/10779268.html
Debug PostProcessor
用于調試,除了可以看到jmeter變量,還可以看到配置資訊,最好放在正規表達式提取器後面,否則看不到提取的結果;
BeanShell PostProcessor
執行個體參考:https://www.cnblogs.com/uncleyong/p/10939647.html
【斷言】:檢查點
響應斷言
斷言内容可以多個
斷言持續時間
響應時間大于設定的值,就報錯
BeanShell斷言
執行個體參考:https://www.cnblogs.com/uncleyong/p/7189778.html
【定時器】:思考時間、集合點
固定定時器
相當于lr的思考時間
高斯随機定時器
下圖表示思考時間在200-400ms之間
Synchronizing Timer:集合點
集合政策,集合線程數小于等于線程組設定的線程數,還可以設定逾時時間
【配置元件】
HTTP資訊頭管理器
執行個體參考:https://www.cnblogs.com/uncleyong/p/11668665.html
HTTP Cookie管理器
域填寫ip或者域名,路徑根據實際情況填寫,預設/
執行個體參考:https://www.cnblogs.com/uncleyong/p/11668665.html
CSV 資料檔案設定
執行個體參考:https://www.cnblogs.com/uncleyong/p/12154065.html,或者:https://www.cnblogs.com/uncleyong/p/10988524.html
大量的變量值,我們一般用csv參數化
檔案名:通過浏覽,選擇參數化的檔案,參數化檔案可以是多種格式,我一般用txt。
檔案編碼:讀取檔案的編碼,預設是US-ASCII,一般選擇UTF-8。
變量名稱(西文逗号間隔):參數檔案中每列的名稱,如有多列,用英文逗号間隔,如果隻有一列,則不加分隔符。忽略首行(隻在設定了變量名稱後才生效):如果參數檔案中有很多列,為了區分每列,就在首行把列名寫上,此時就要選True,
比如:username,passwd,age,addr,phone
jack,123456,18,beijing,119
tom,123456,19,beijing,110
分隔符(用'\t'代表制表符):是變量值的分隔符,比如上面,分隔符就是英文逗号。提醒:分隔符不能是參數化的值中的符号,否則會被截斷,比如,你參數化整個json,逗号作為分隔符,而json中就有逗号,是以,發送請求的時候,會被截斷。
是否允許帶引号?:如果是False,請求中保留引号;如果是True:請求中去掉引号
遇到檔案結束符再次循環?: True表示循環,False就取值EOF
遇到檔案結束符結束線程?:值不夠,停止線程,一般保持預設False,如果設定為true,則下面的設定失效
線程共享模式:
所有現場:所有線程共享一個資料檔案
目前線程組:一個線程組一份資料檔案,線程組内是所有線程共享一個資料檔案
目前線程:每個線程一份資料檔案
如果多個線程組,每個線程取值和測試計劃中“獨立運作每個線程組”是否勾選沒有關系
HTTP請求預設值
一般填入ip、端口,後續的http取樣器不填寫,就讀取http請求預設值
計數器
https://www.cnblogs.com/uncleyong/p/13667202.html
類似forEach
【監聽器】:檢視結果樹、聚合報告
檢視結果樹
可以導入jtl檔案檢視結果
勾選表示僅展示失敗的請求
可以選擇結果展示方式為文本、html等
可以檢視請求的内容
請求的響應結果
聚合報告
Label:每個JMeter的element的Name值。例如HTTP Request的Name
#Samples:送出請求數量。如第三行記錄,模拟20個使用者,循環100次,是以顯示了2000
Average:平均響應時間(機關:ms)。預設是單個Request的平均響應時間,當使用了Transaction Controller時,也可以以Transaction為機關顯示平均響應時間
Median:中位數,也就是50%使用者的響應時間
90%Line:90%使用者的響應時間【90%的使用者響應時間不會超過這個值】
95%Line:同理
99%Line:同理
Min:最小響應時間
Max:最大響應時間
Error%:本次測試中出現錯誤的請求的數量/請求的總數;預設情況下,http200就是成功(http400這些就是error),如果加了斷言,斷言不通過的也算是error
Throughput:吞吐量。預設情況下表示每秒完成的請求數(包含成功和失敗的)
KB/sec:每秒從伺服器端接收到的資料量。
作用域
說起來既複雜又簡單,為了大家不花過多時間在上面,我隻說最簡單的方式:
全局的放線程組下,局部的,專屬哪個取樣器,就放哪個取樣器下。
jmeter執行順序
配置元件 → 前置處理器 → 定時器 → 取樣器 → 後置處理器 → 斷言 → 監聽器;
同一層級的,順序執行;
函數助手
常用的函數需要掌握
随機函數
舉例:生成1-1000的随機數,可以通過下面生成随機數,通過${key}可以擷取這個随機數;
1、${__Random(1,1000,key)}
總之,需要某個功能可以先在函數助手中找找,沒有的話,再考慮beashell實作。
官網:https://jmeter.apache.org/usermanual/functions.html
函數清單:
時間函數(含代碼方式)
13位時間戳:${__time(,)}
10位時間戳:${__time(/1000,)}
jmeter擷取目前時間、時間運算、時間比較、時間轉換
https://www.cnblogs.com/uncleyong/p/12768623.html
加密函數
sha-256:https://www.cnblogs.com/uncleyong/p/12765569.html
md5:https://www.cnblogs.com/uncleyong/p/9429752.html
計數器:Counter
上面不勾選,這樣,每個線程擷取到的值都是不一樣的。
00000表示格式,也可以加字首,寫成test00000
随機變量
00000表示格式,也可以加字首,寫成test00000
beanshell
beanshell相關的,執行個體參考:玩轉jmeter:beanshell必備技能
日志相關
日志級别預設INFO
檢視日志
分布式壓測
分布式壓測也是需要掌握的,執行個體參考:jmeter5.1分布式壓測
生成報告
執行個體參考:https://www.cnblogs.com/uncleyong/p/9548723.html
jmeter最佳實踐
最後,我們來看看官方的最佳實踐,位址是:http://jmeter.apache.org/usermanual/best-practices.html
關于jmeter腳本
腳本基本上不用錄制方式,參考接口設計文檔直接寫,或者fiddler抓包寫。
要想了解錄制,執行個體參考:https://www.cnblogs.com/uncleyong/p/10990053.html
性能測試場景設計
性能測試中混合場景設計舉例:https://www.cnblogs.com/uncleyong/p/12667392.html