JMETER與它的元件們

2022-11-01 12:02:52

JSON提取器與Debug Sampler

我們平時會遇到很多JSON格式的介面返回,我們需要提取引數可以用JSON提取器,同時配合自帶的偵錯程式來進行偵錯。

 JSON提取器

Name of created variables:提取的值存放的變數名稱
JSON Path expression表示式,就是剛在在結果樹中驗證的表示式,可以同時使用多個表示式,用分號隔開
Match No0 隨機 1第一個 -1所有
Compute concatenation var如果匹配所有時,就將所有值存入變數名_ALL 中
Default Value提取不到值時預設值
我們使用Dummy sampler來mock一個返回(這裡不會可以上一篇)

{
    "topic":"mock_api",
    "data":{
        "errormes":"",
        "response":[
            {
                "name":"A",
                "age":18
            },
            {
                "name":"B",
                "age":30
            }
        ]
    }
}

現在我們來提取age這個欄位,這裡會分享不同的方法來取值

第一種:一層一層從上至下取age=18這個值

//每一層就是一個".",因為response是個列表,我們去索引為0
$.data.response[0].age

 第二種:有條件的篩選name=A的age,使用表示式:[?(@.key == value)]

//$..直接去找response欄位,根據表示式去找name是A的age
$..response[?(@.name=="A")].age

第三種:直接根據表示式找,並且可以一次性提取多層多變數

// Result[0]={"name":"A","age":18}
$..[?(@.name=="A")].["age","name"]
// Result[0]=18
$..[?(@.name=="A")].age

效果展示

 

 計數器

 然後我們設定不同的執行緒和迴圈次數來看看效果

設定執行緒1,迴圈3

 設定執行緒2,迴圈3

 設定執行緒2,迴圈3,勾選上方計數器中的與每使用者獨立的跟蹤計數器

  設定執行緒2,迴圈3,勾選上方計數器中的與每使用者獨立的跟蹤計數器 和 在每個執行緒組迭代上重置計數器

 while邏輯控制器、迴圈控制器、if邏輯控制器和測試活動

這兩個我們放在一起,假設我們需要去判斷迴圈的次數大於5就自動跳出迴圈

while控制器

 

 填入 ${__jexl3("${num}" != "5",)}

 

 迴圈五次後退出,這裡需要注意的是while條件中一般只會使用javaScript或者jexl3(這兩個都是在函數助手中檢視,輔助編寫)

迴圈控制器+if控制器

 

 勾選上永遠,這樣就會一直迴圈(這裡勾選上只要是為了和上面while控制器模擬同一個場景,一般不會勾選永遠,下面在做if判斷,這樣太麻煩了)

我們在for迴圈下面增加if控制器去判斷是否滿足我們需要的條件,if下面增加一個動作控制器,如果滿足if條件就Break,跳出迴圈

if條件填入 ${__jexl3("${num}" == "5",)}

這樣就達到和while相同的效果了

 

 斷言

 漢化過後斷言就很好理解,這裡講一下模式匹配規則:

包括(contains):包含指定的某個或多個字串,支援正規表示式

匹配(match):完全匹配指定的字串,判斷為成功,支援正規表示式

相等(equals):響應需要完全匹配指定的字串,不支援正則

字串(Substring):響應中需要包含指定字串,不支援正則

否(Not) 和 或者(or):就是對上述判斷做的邏輯運算

 隨機變數

在設定元件中有個隨機變數簡單好用

 

HTTP映象伺服器

可以理解做了一個擋板,把我們自己當做伺服器,把我們自己收到的請求原封不動的顯示出來,方便偵錯請求

 

 設定好伺服器記得點選啟動

 

 這時候請求的資料就會全部顯示在你面前了

JDBC

JDBC連結資料庫

連結資料庫我們需要一個連結資料的jar包:https://downloads.mysql.com/archives/c-j/

 步驟

1 測試計劃中新增上方下載的jar包

2 新增一個執行緒組 新增一個jdbc連結設定器
DataBase URL:庫名+?+ useUnicode=true&characterEncoding=utf8,加入字尾防止亂碼
3 取樣器中新增一個jdbc request

 

 4把需要取得值放入變數

value=vars.getobject("resultserial_nos").get(8).get("serial_number");
vars.put(serial_number,value);

 

 同步定時器

 

 同步定時器設定了集合點,達到並行的作用

說到並行繞不開的就是並行:並行其實就是工作切換,而並行就是多個程序同時進行,Jmeter也提供了並行外掛這裡不做贅述,有興趣的可以去外掛管理內自己下載:Parallel Controller

事務控制器

我們需要去測試幾個介面的混合場景下的效能,就需要把幾個介面放到一個事務中

 

 

stepping Thread Group + jp@gc - Transactions per Second + jp@gc - Response Times Over Time

執行緒組中有個stepping thread group可以幫助我們不斷加壓增加執行緒組數量來檢視不同壓力下的tps

 

 安裝外掛: jpgc - Standard Set這裡有jp@gc - Transactions per Second可以用這個檢視每秒事務處理

縱座標為TPS橫座標為時間

縱座標為請求響應時間

 

友情連結

selenium結合jmeter進行測試