Jmeter 常用後置處理器之正規表示式提取器、JSON 提取器、JSON JMESPath Extractor

Tester_謎城發表於2020-06-19

後置處理器在取樣器執行之後執行,通常用於提取處理樣本返回資料,應用於同一範圍內的所有取樣器,如果要將後置處理器應用於指定的取樣器,需要將其新增為取樣器的子代。

後置處理器在斷言之前執行,所以無權訪問任何斷言結果。

正規表示式提取器

允許使用者使用正規表示式從伺服器響應中提取值。作為後處理器,此元素將在其範圍內的每個Sample請求之後執行,應用正規表示式,提取請求的值,生成模板字串,並將結果儲存到給定的變數名稱中。

在這裡插入圖片描述

屬性描述

名稱:顯示的此取樣器的描述性名稱,可自定義

Apply to: 僅主樣本 :僅適用於主樣本
僅子樣本 :僅適用於子樣本
主樣本和子樣本 :均適用。
使用的JMeter變數名稱 -提取將應用於命名變數的內容
要檢查的響應欄位 正規表示式提取的目標,即設定從哪裡提取

引用名稱 :可引用的變數名稱
正規表示式: 用於解析響應資料的正規表示式

模板 :模板的語法是:' $ 1 $ '引用組1,' $ 2 $ '引用組2。$ 0 $引用整個表示式匹配的內容。
匹配數字: 指示要使用的匹配項。

預設值: 如果表示式不匹配,則將變數設定為預設值

JSON提取器

JSON 提取器可以使用JSON-PATH語法從JSON格式的響應中提取資料。

該後處理器與正規表示式提取器非常相似。必須將其放置為HTTP Sampler或具有JSON響應的任何其他取樣器的子級,可以以非常簡單的方式提取JSON文字內容。

在這裡插入圖片描述

屬性描述
名稱 顯示的此取樣器的描述性名稱,可自定義

Apply to 僅主樣本 :僅適用於主樣本
僅子樣本 :僅適用於子樣本
主樣本和子樣本 :均適用。
使用的JMeter變數名稱 -提取將應用於命名變數的內容

Names of created variables 以 ; 分隔的變數名稱(需要匹配JSON Path的數量)
JSON Path Expressions 以 ; 分隔的JSON Path表示式(必須匹配變數數量)

Default Values 以 ; 分隔的預設值,若表示式沒有匹配結果,則使用預設值
Match No. (0 for Random) 如果JSON Path提取到多個結果,則可以設定選擇提取哪個結果作為變數

Compute concatenation var 如果找到許多結果,將使用' , '分隔符將它們連線起來,並將其儲存在名為 _ALL的var中

Match No. (0 for Random)中設定:
0:表示隨機(預設值)
-1:表示提取所有結果,它們將被命名為<變數名> _N(其中N從1到結果數)
X:表示提取第X 個結果。如果此X大於匹配數量,則不返回任何內容。將使用預設值

關於JsonPath的詳細使用介紹
JSON示例:
{
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
},
{
"category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
},
{
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
},
"expensive": 10
}

提取所有書的作者 :$.store.book[*].author
提取所有的作者 :$..author

提取store包含的所有資料 :$.store.*
提取所有物品的價格 :$.store..price

提取第三本書的資料 :$..book[2]
提取倒數第二本書的資料 :$..book[-2]

提取前兩本書的資料 :$..book[1,2]
提取索引1(包括)到索引2(不包括)的書的資料 :$..book[1:2]

提取最後兩本書 :$..book[-2:]
所有帶有isbn屬性的書 : $..book[?(@.isbn)]

所有價格小於10的書 :$..book[?(@.price < 10)]
所有價格小於屬性“expensive”的書 :$..book[?(@.price<=$['expensive'])]

需要注意的是, Json提取器中不允許在JsonPath末尾呼叫函式(min()、max()、avg()、stddev()、length()、sum()),如果使用這些函式,將無法獲取預期的結果。
通常的,編寫JsonPath時,可以通過察看結果樹中的Json Path Tester測試提取的結果是否符合預期。

JSON JMESPath Extractor

JSON JMESPath Extractor作為5.2版本之後加入的後置處理器,其功能與JSON提取器類似,都是對JSON格式的返回資料進行提取,但使用的語法不同。JSON JMESPath Extractor使用JMESPath查詢語言從Json結果中提取值。
在這裡插入圖片描述
屬性描述

名稱 :顯示的此取樣器的描述性名稱,可自定義
Apply to

僅主樣本 :僅適用於主樣本
僅子樣本 :僅適用於子樣本
主樣本和子樣本 :均適用。
使用的JMeter變數名稱 :提取將應用於命名變數的內容

Names of created variables :變數名稱
JMESPath Expressions :JMESPath表示式

Default Values :若表示式沒有匹配結果,則使用預設值
Match No. (0 for Random) :如果JMESPath提取到多個結果,則可以設定選擇提取哪個結果作為變數

Match No. (0 for Random)中設定:
0:表示隨機(預設值)
-1:表示提取所有結果,它們將被命名為<變數名> _N(其中N從1到結果數)
X:表示提取第X 個結果。如果此X大於匹配數量,則不返回任何內容。將使用預設值
關於JMESPath的詳細使用介紹

Json JMESPath示例:
{
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
},
{
"category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
},
{
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
},
"expensive": 10
}

提取所有書的作者 :store.book[*].author
提取store包含的所有分類資料 :store.*

提取所有物品的價格 :store.[bicycle.price,book[*].price]
提取第三本書的資料 :store.book[2]

提取倒數第二本書的資料 :store.book[-2]
提取前兩本書的資料 :store.book[:2]

提取索引1(包括)到索引2(不包括)的書的資料 :store.book[1:2]
提取最後兩本書 :store.book[-2:]

所有帶有isbn屬性的書 :store.book[?(@.isbn)]
所有書種類的數量 :length(store.book[*])

價格最高的書名 :max_by(store.book, &price).title
價格最低的書資訊 :min_by(store.book, &price)

JSON JMESPath Extractor與JsonPath提取器對比

一個JsonPath提取器可以通過 ; 分離的方式,提取多個變數表示式

JSON JMESPath Extractor只支援提取一個變數,如果要提取多個變數,則需要新增多個JSON JMESPath Extractor

JsonPath提取器不支援函式,JSON JMESPath Extractor支援使用函式length()、max_by()、min_by(),可應用於部分特殊場景,所以可以根據場景實際需要,選擇要用的提取器型別

相關文章