對請求添加后置處理器,從前面的響應數據中提取參數。
一般使用json提取器、正則提取器、beanshell。三者用法都一樣,都是在待提取的請求下面添加一個提取器就可以了。
6.1、后置處理器json extrator
6.1.1、注意事項
注意需添加到請求內,否則下一個請求可能獲取不到值
錯誤寫法:
正確寫法:
6.1.2、舉例中的測試數據
6.1.3、各字段含義
Apply to:指作用范圍,通常發出一個請求只觸發一個請求,所以勾選“main sample only”就可以;若發一個請求可以觸發多個服務器請求,就有main sample 和sub-sample之分了。
Variable names:參數名稱,多個參數之間用英文分號分隔
Json path expression:提取方式的表達式
Match no:需要與json path expression搭配使用,當表達式為$.data.data..title時,取到的是列表,此處填入數字,則表示取第幾個值,從1開始數。不填時,默認為0,表示從title列表中隨機取一個title。填入-1時,返回每一個值。
compute concatenation var:在match no為-1的情況下,勾選后,會多生成一個“變量名_ALL”的參數,將所有匹配值用,連接起來。
Default values:當參數取不到對應值時的默認值
6.1.4、Json path expression 詳細說明
(1)常規情況
$..title 相對路徑,取任一層級下的title,有多個時默認隨機取值,或者搭配match no返回多個值
$.data.total 絕對路徑下的total
$.data.data[0].title
*(2)按條件提取值,對列表中的元素進行篩選
語法格式
[?(expression)]
$..users[?(@.uuid)] 提取 users 里面包含 uuid 字段的記錄
$..users[?(@.reg_time > '2020-06-01')] 提取 reg_time 字段大於 2020-06-01 的記錄
$..users[?(@.role_desc =~ /.*會員.*?/i)] 提取 role_desc 字段包含會員的記錄
$..users[?(@.status == 0)] 提取 status 字段等於 0 的記錄
@
代表當前節點,像上面的四個栗子,@代表 users 這個列表字段
=~
后面跟正則表達式,如果想提取包含指定字符的值,可以使用此正則: /.*指定字符串.*?/i
i 代表大小寫不敏感
*(3)提取數據指定字段的值的例子
提取 users 第一條記錄的 uuid、username 字段的值
$..users[0].['uuid','username']
測試結果
new_1={"uuid":"6D5EDCB459F0917A98106E07D5438C58","username":"luojunjiessb"}
6.1.5、match no為-1的情況
從列表中循環取值
搭配for each控制器,就可以遍歷每一個返回值:
運行結果:
6.2、正則提取器
JSON 提取器只針對接口返回的響應內容,如果想提取的是響應頭、請求頭的值,這個時候正則提取器的作用就出來了,它可以提取請求任一部分的值。
測試數據與6.1中的相同。
6.2.1、各字段含義
Apply to:同json處理器
Field to check:需要匹配的字段范圍,即從哪里匹配
Body 響應體,不包括響應頭;最常用
Body (unescaped) 響應體,替換了所有HTML轉義符,因為轉義處理時不考慮上下文,所以不建議使用
*Body as a Document 從不同類型的文件中提取文本;影響性能
Names of created variables:接收提取值的變量名
Regular Expression:正則表達式
( ) 里面寫匹配規則,用於解析正則表達式
.*? 表示匹配任意長度的任意字符,這也是最常用的正則表達式
Template:從找到的匹配項中創建字符串的模板
Match No.(0 for Random):同json提取器
Default Value:同json提取器
Use empty default value :勾選后,提取不到值時,則返回空字符串
6.2.2、僅有一個返回值的情況
正則表達式只有一個(),且匹配數字不為-1
模板為空時,參數值返回為空
模板為$0$時,返回完整的正則表達式
模板為$1$時,返回正則表達式中,第一個括號里匹配到的內容
模板為$2$時,返回正則表達式中,第二個括號里匹配到的內容,沒有則返回null
模板為$3$時,返回正則表達式中,第三個括號里匹配到的內容,沒有則返回null
6.2.3、有多個返回值的情況
(1)一個(),匹配到多個值
一個 ( ) 匹配到多個值,且 Match No 填了 -1
同理json提取器,可以使用for each依次取值,參考6.1.5
(2)多個(),匹配到多個值
一個表達式有多個()的情況
6.3、后置處理器 BeanShell PostProcessor
解析並提取響應結果