jmeter參數化-6、上個接口返回的值作為下一個接口的參數(json extrator、正則提取器、beanshell)


對請求添加后置處理器,從前面的響應數據中提取參數。

一般使用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

解析並提取響應結果

 

 


免責聲明!

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



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