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

解析并提取响应结果

 

 

posted @ 2022-04-13 15:47  hushuer  阅读(1451)  评论(0编辑  收藏  举报