jmeter重點(詳細)


之前,寫過一篇文章:jmeter,學這些重點就可以了,今天就來把一些重點細節點說一下。 

測試計划

可以理解為各種測試元件的容器

其中:

定義整個測試中使用的重復值(全局變量),一般定義服務器的ip、端口,這樣,我們改下值,就可以測試不同的環境了,比如測試環境、灰度環境等;

或者把對應的幾個測試環境都設置為變量,后面用哪個,就引用哪個,不過這個引用,最好是在請求默認值中引用,實例參考:https://www.cnblogs.com/uncleyong/p/10988524.html

默認不勾選,如果測試計划下有多個啟用的線程組,他們是並行執行的(也就是混合場景);如果勾選,是順序執行,即前一個線程組執行完了,才執行下一個線程組,大家可以試一下;相當於lr的group模式;

調試的時候用,會打印更多日志,不勾選,勾選的話很影響性能,會有詳細的請求記錄,消耗資源;

函數測試模式勾選了,還要把查看結果樹寫到一個路徑下的文件中,函數測試模式才生效

 

一般用於添加jar包配合着beanshell使用,注意:lib目錄下加入了新的jar包,需要重啟jmeter;參考鏈接中“方式一:把jar包加入到classpath”:https://www.cnblogs.com/uncleyong/p/11475577.html

 

線程組

相當於LR中場景設計,可以設置一些並發策略,模擬並發用戶發送請求

其中:

 默認即可,並發過程中,遇到錯誤,繼續執行下一次請求

線程數:並發數

啟動所有線程需要的時間,如果線程數是100,這里是10,表示每秒啟動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,實例參考:https://www.cnblogs.com/uncleyong/p/10990373.html

發送文件,實例參考:https://www.cnblogs.com/uncleyong/p/9794250.html

上圖,客戶端實現默認是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是一個數組

從0到${classIds_matchNr},(0, ${classIds_matchNr}],左開右閉
每次循環,獲取到的值放到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,則下面的設置失效

線程共享模式:

  所有現場:所有線程共享一個數據文件

  當前線程組:一個線程組一份數據文件,線程組內是所有線程共享一個數據文件

  當前線程:每個線程一份數據文件

  如果多個線程組,每個線程取值和測試計划中“獨立運行每個線程組”是否勾選沒有關系

總結,和LR差異
無隨機、無每次出現、無once
模擬隨機:其實把文件中值打亂,也相當於隨機

 

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的隨機數,可以通過${__Random(1,1000,key)}生成隨機數,通過${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

上圖大概意思是:https://mp.weixin.qq.com/s/0zL3HbmJ_YluNPdQ1QwRbA

 

關於jmeter腳本

腳本基本上不用錄制方式,參考接口設計文檔直接寫,或者fiddler抓包寫。

要想了解錄制,實例參考:https://www.cnblogs.com/uncleyong/p/10990053.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM