天天看點

一文搞定jmeter:工作中jmeter常用功能

作者:軟體測試教育知識

測試計劃

  • 線程組
  • 【Sampler】
  • 【邏輯控制器】
  • 【前置處理器】
  • 【後置處理器】
  • 【斷言】:檢查點
  • 【定時器】:思考時間、集合點
  • 【配置元件】
  • 【監聽器】:檢視結果樹、聚合報告
  • 作用域
  • jmeter執行順序
  • 函數助手
  • beanshell
  • 日志相關
  • 分布式壓測
  • 生成報告
  • jmeter最佳實踐
  • 關于jmeter腳本
  • 性能測試場景設計

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

測試計劃

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

一文搞定jmeter:工作中jmeter常用功能

其中:

使用者定義變量:定義整個測試中使用的重複值(全局變量),一般定義伺服器的ip、端口,這樣,我們改下值,就可以測試不同的環境了,比如測試環境、灰階環境等;或者把對應的幾個測試環境都設定為變量,後面用哪個,就引用哪個,不過這個引用,最好是在請求預設值中引用,預設不勾選,如果測試計劃下有多個啟用的線程組,他們是并行執行的(也就是混合場景);

如果勾選,是順序執行,即前一個線程組執行完了,才執行下一個線程組,大家可以試一下;相當于lr的group模式;調試的時候用,會列印更多日志,不勾選,勾選的話很影響性能,會有詳細的請求記錄,消耗資源;函數測試模式勾選了,還要把檢視結果樹寫到一個路徑下的檔案中,函數測試模式才生效

一文搞定jmeter:工作中jmeter常用功能
一文搞定jmeter:工作中jmeter常用功能

一般用于添加jar包配合着beanshell使用,注意:lib目錄下加入了新的jar包,需要重新開機jmeter;參考連結中“方式一:把jar包加入到classpath”:參考其他文章:https://www.cnblogs.com/uncleyong/p/11475577.html

線程組

相當于LR中場景設計,可以設定一些并發政策,模拟并發使用者發送請求

一文搞定jmeter:工作中jmeter常用功能

其中:

一文搞定jmeter:工作中jmeter常用功能

預設即可,并發過程中,遇到錯誤,繼續執行下一次請求

線程數:并發數

一文搞定jmeter:工作中jmeter常用功能

在指定的時間内啟動線程,如果線程數是100,這裡是10,表示10秒内啟動100線程,但是不一定是每秒啟動10個線程,循環次數:不勾選永遠,後面的次數生效;類似LR中運作時設定中疊代次數;循環控制器是循環,相當于LR中的for循環

一文搞定jmeter:工作中jmeter常用功能

排程器配置:

循環次數中勾選永遠,持續時間就是并發的時間,一般10-15分鐘,根據業務實際情況來設定If Loop Count is not -1 or Forever, duration will be min(Duration, Loop Count * iteration duration),如果未勾選永遠,建議不要勾選排程器和設定持續時間

一文搞定jmeter:工作中jmeter常用功能

在目前時間之後的啟動延遲時間後開始運

【Sampler】

線上程組下(在測試計劃下面不能添加取樣器),是被請求内容;假如請求是:http://192.168.168.168:8057/user/query?name=全棧測試筆記

一文搞定jmeter:工作中jmeter常用功能

自動重定向:隻記錄最後跳轉請求,會丢失初始請求的Cookie等資訊;

跟随重定向:記錄整個請求過程所有資訊, 過程請求為sub-sampler,即子請求

一文搞定jmeter:工作中jmeter常用功能

POST請求時,使用的Content-Type,檔案上傳的時候使用;預設不勾選,此時的Content-Type是application/x-www-form-urlencoded

一文搞定jmeter:工作中jmeter常用功能

參數中,如果有特殊字元時(“=”、“&”、“?”等),最好選上“編碼”,否則字元串可能會被截斷;

一文搞定jmeter:工作中jmeter常用功能

自動添加參數名和值之間的等号

一文搞定jmeter:工作中jmeter常用功能

發送json和發送檔案

一文搞定jmeter:工作中jmeter常用功能
一文搞定jmeter:工作中jmeter常用功能

上圖,用戶端實作預設是HttpClient4,也可以從配置檔案中看到,當然也可以改配置檔案

一文搞定jmeter:工作中jmeter常用功能
一文搞定jmeter:工作中jmeter常用功能

用戶端設定逾時時間

一文搞定jmeter:工作中jmeter常用功能

jmeter在發出 HTTP請求并獲得響應的HTML檔案内容後,且對該HTML進行分析并擷取HTML中包含的所有資源(圖檔等),預設不選中,此選項和loadrunner中是否下載下傳非html資源類似;

一文搞定jmeter:工作中jmeter常用功能

響應儲存為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

一文搞定jmeter:工作中jmeter常用功能

如果是其它協定,比如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’

一文搞定jmeter:工作中jmeter常用功能

ForEach控制器

類似計數器:https://www.cnblogs.com/uncleyong/p/13667202.html

ForEach的應用:先請求A頁面,通過正規表達式擷取到多個值,然後循環這些值,依次作為B請求的入參

一文搞定jmeter:工作中jmeter常用功能
一文搞定jmeter:工作中jmeter常用功能

classIds_matchNr=8,是jmeter正則個數的統計(${refName_matchNr}來引用函數總共發現的比對組合數目),表示比對到8個結果

是以,可以通過Debug PostProcessor取樣器看到jmeter提供給我們的變量

一文搞定jmeter:工作中jmeter常用功能

輸入變量classIds是一個數組

1、從0到${classIds_matchNr},(0, ${classIds_matchNr}],左開右閉。

2、每次循環,擷取到的值放到classId中。

請求名稱也加上變量,友善檢視

一文搞定jmeter:工作中jmeter常用功能

僅一次控制器

僅一次控制器,是控制線程内部的循環隻執行一次:

1個vuser,運作3次,檢視結果樹中1個結果

3個vuser,運作1次,檢視結果樹中3個結果

3個vuser,運作2次,檢視結果樹中3個結果

應用場景:非分布式壓測中,隻執行一次的被關聯請求,比如登入

一文搞定jmeter:工作中jmeter常用功能

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變量,還可以看到配置資訊,最好放在正規表達式提取器後面,否則看不到提取的結果;

一文搞定jmeter:工作中jmeter常用功能

BeanShell PostProcessor

執行個體參考:https://www.cnblogs.com/uncleyong/p/10939647.html

【斷言】:檢查點

響應斷言

斷言内容可以多個

一文搞定jmeter:工作中jmeter常用功能

斷言持續時間

響應時間大于設定的值,就報錯

一文搞定jmeter:工作中jmeter常用功能

BeanShell斷言

執行個體參考:https://www.cnblogs.com/uncleyong/p/7189778.html

【定時器】:思考時間、集合點

固定定時器

相當于lr的思考時間

一文搞定jmeter:工作中jmeter常用功能

高斯随機定時器

下圖表示思考時間在200-400ms之間

一文搞定jmeter:工作中jmeter常用功能

Synchronizing Timer:集合點

集合政策,集合線程數小于等于線程組設定的線程數,還可以設定逾時時間

一文搞定jmeter:工作中jmeter常用功能

【配置元件】

HTTP資訊頭管理器

一文搞定jmeter:工作中jmeter常用功能

執行個體參考:https://www.cnblogs.com/uncleyong/p/11668665.html

HTTP Cookie管理器

域填寫ip或者域名,路徑根據實際情況填寫,預設/

一文搞定jmeter:工作中jmeter常用功能

執行個體參考: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參數化

一文搞定jmeter:工作中jmeter常用功能

檔案名:通過浏覽,選擇參數化的檔案,參數化檔案可以是多種格式,我一般用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請求預設值

一文搞定jmeter:工作中jmeter常用功能

計數器

https://www.cnblogs.com/uncleyong/p/13667202.html

類似forEach

【監聽器】:檢視結果樹、聚合報告

檢視結果樹

一文搞定jmeter:工作中jmeter常用功能
一文搞定jmeter:工作中jmeter常用功能

可以導入jtl檔案檢視結果

一文搞定jmeter:工作中jmeter常用功能

勾選表示僅展示失敗的請求

一文搞定jmeter:工作中jmeter常用功能

可以選擇結果展示方式為文本、html等

一文搞定jmeter:工作中jmeter常用功能

可以檢視請求的内容

一文搞定jmeter:工作中jmeter常用功能

請求的響應結果

聚合報告

一文搞定jmeter:工作中jmeter常用功能

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:同理

一文搞定jmeter:工作中jmeter常用功能

Min:最小響應時間

Max:最大響應時間

Error%:本次測試中出現錯誤的請求的數量/請求的總數;預設情況下,http200就是成功(http400這些就是error),如果加了斷言,斷言不通過的也算是error

Throughput:吞吐量。預設情況下表示每秒完成的請求數(包含成功和失敗的)

KB/sec:每秒從伺服器端接收到的資料量。

作用域

說起來既複雜又簡單,為了大家不花過多時間在上面,我隻說最簡單的方式:

全局的放線程組下,局部的,專屬哪個取樣器,就放哪個取樣器下。

jmeter執行順序

配置元件 → 前置處理器 → 定時器 → 取樣器 → 後置處理器 → 斷言 → 監聽器;

同一層級的,順序執行;

函數助手

常用的函數需要掌握

随機函數

舉例:生成1-1000的随機數,可以通過下面生成随機數,通過${key}可以擷取這個随機數;

1、${__Random(1,1000,key)}

一文搞定jmeter:工作中jmeter常用功能

總之,需要某個功能可以先在函數助手中找找,沒有的話,再考慮beashell實作。

官網:https://jmeter.apache.org/usermanual/functions.html

函數清單:

一文搞定jmeter:工作中jmeter常用功能
一文搞定jmeter:工作中jmeter常用功能

時間函數(含代碼方式)

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

一文搞定jmeter:工作中jmeter常用功能

上面不勾選,這樣,每個線程擷取到的值都是不一樣的。

00000表示格式,也可以加字首,寫成test00000

随機變量

一文搞定jmeter:工作中jmeter常用功能

00000表示格式,也可以加字首,寫成test00000

beanshell

beanshell相關的,執行個體參考:玩轉jmeter:beanshell必備技能

日志相關

日志級别預設INFO

一文搞定jmeter:工作中jmeter常用功能

檢視日志

一文搞定jmeter:工作中jmeter常用功能

分布式壓測

分布式壓測也是需要掌握的,執行個體參考:jmeter5.1分布式壓測

生成報告

執行個體參考:https://www.cnblogs.com/uncleyong/p/9548723.html

jmeter最佳實踐

最後,我們來看看官方的最佳實踐,位址是:http://jmeter.apache.org/usermanual/best-practices.html

一文搞定jmeter:工作中jmeter常用功能

關于jmeter腳本

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

要想了解錄制,執行個體參考:https://www.cnblogs.com/uncleyong/p/10990053.html

性能測試場景設計

性能測試中混合場景設計舉例:https://www.cnblogs.com/uncleyong/p/12667392.html

繼續閱讀