jmeter接口关联:JSON提取和正则表达式提取(仅供参考)
前言
在 JMeter 中,正则表达式和 JSON 提取器都用于从响应数据中提取所需内容,但它们的使用场景略有不同。
正则表达式提取器:
正则表达式提取器是 JMeter 的内置功能,用于从响应数据中提取特定模式的文本。
适用于响应数据的内容没有明确定义结构的情况。当响应数据是自由格式的文本、HTML、XML 或其他非结构化数据时,可以使用正则表达式提取器来捕获信息,编写适当的正则表达式来匹配并提取所需的内容。
JSON 提取器:
JSON 提取器是 JMeter 的插件,专门用于从 JSON 格式的响应数据中提取数据。适用于处理结构化的 JSON 响应数据。
一、JSON提取
1.1 JSON 语句:
1.2 JSON提取器
Jmeter中将json提取的值作为变量便于后期引用
JSON提取器参数释意:
Names of created varriables:设置获取到值的变量名称,用于后期引用;多个变量时用分号分隔;
JSON Path expressions:用于查找对应值的JSON语句;
Match No.(0 for Random):0表示随机;n表示取第几个匹配值;-1表示匹配所有,后续引用时采用 变量名_N 取指定的第N个值;
Default Values:缺省值,当JSON 语句未匹配到值时取该值。
如果前面设置提取多个变量名且需要有缺省值时,这里的缺省值必须设置对应个数的默认值,值与值之间用分号分隔;
不需要缺省值时,这里也可以为空。
1.3 JSON提取表达式写法&JSON提取器中的写法
如图所示给定一个接口响应的示例,按要求提取对应值的几种场景:
1.3.1 场景一:json提取器 提取某个变量值
(1) 从响应数据中提取 “nonsysCount” 参数对应的值;
json表达式写法一:$.object.nonsysCount
或 $..nonsysCount
json提取器中写法:
变量名 | 参数列 |
---|---|
Names of created variables: | nonsysCount |
JSON Path expressions: | $.object.nonsysCount 或 $..nonsysCount |
Match No.(0 for Random): | 1 |
Default Values: | 只有一个变量名时可以为空 |
后期在需要的地方调用时的引用方法:${nonsysCount}
1.3.2 场景二:json提取器一次性提取多个变量名
如果只创建一个JSON提取器,可以通过逗号分割的方式同时创建多个变量;
如下图接口返回示例,需要同时提取第一个list中的templateID和vpsCount,可以在json提取器中添加多个变量名并用分号隔开。
json提取器中写法:
变量名 | 参数列 |
---|---|
Names of created variables: | templateID0;vpsCount0 |
JSON Path expressions: | $.object.list[0].templateID ; $.object.list[0].vpsCount |
Match No.(0 for Random): | 1 |
Default Values: | 0;0 |
后期在需要的地方调用时的引用方法:${templateIDs_1}
、${templateIDs_2}
、${templateIDs_3}
…
1.3.3 场景三:json提取器,提取返回值 数组中多个实例的 templateID信息
json表达式为:$.object.list[*].templateID
表达式解析:
list[*].templateID:表示获取到list参数列表的所有值,并从中提取出所有的templateID字段值;
JSON提取器中写法:
JMeter中的JSON提取器表达式可以设置为(这个Match No设置为-1了就是取所有)
变量名 | 参数列 |
---|---|
Names of created variables: | templateIDs |
JSON Path expressions: | $.object.list[*].templateID |
Match No.(0 for Random): | -1 |
Default Values: | 只有一个变量名时可以为空 |
后期在需要的地方调用时的引用方法:${templateIDs_1}
、${templateIDs_2}
、${templateIDs_3}
…
二、正则表达式
2.1. 正则表达式
jmeter正则表达式提取器在接口关联中常见,所谓关联,就是把动态变化返回的数据获取到,并把它保存为一个参数,提供给后面需要用到的地方,正则表达式可以提取请求任意部分的值。
Jmeter中通过“添加—后置处理器—正则表达式提取器”来提取数据。
2.2. 正则表达式提取器
2.3 正则表达式提取的几种场景
2.3.1 场景一:正则表达式提取某个特定值
提取登录接口中的token值,并用于后续接口的鉴权:
正则表达式中的写法:
知识点:
对正则表达式提取的值进行引用:
后续在有需要的地方以${引用名称}
的形式进行调用:
例如,此处将提取到的token值保存在引用变量token中,在信息头管理器中对其引用${token}
注:具体引用的格式需要根据实际接口要求,通过查看请求头信息中的鉴权字段(浏览器上一般通过F12查看请求标头信息),合理添加相应的格式。
2.3.2 场景二:一个正则表达式提取到多个结果
2.3.2.1 一个()匹配到多个值,Match No=-1
变量名 | 参数列 |
---|---|
引用名称: | user |
正则表达式: | "name":"(.*?)" |
模板: | $1$ |
Match No.(0 for Random): | -1 |
缺省值: | 0;0 |
接口调用时的写法:
一个()
匹配到接口的多个响应值时,一般会结合 ForEach控制器,用于迭代获取到值,将提取到的值赋予到 HTTP 请求中使用。
此处添加 调试取样器,并将获取到的值通过引用 “输出变量名称”(即user_NO),在调试取样器中应用,便于调试时观察。
2.3.2.1 一个正则表达式有多个(),支持提取多个结果:
在其他关联接口引用时,可以通过user_g1和user_g2,获取到对应的值并传入需要使用该参数值的接口即可。
注意点:
- 如果正则匹配到值,但是没有填写模板,则返回空:
- 如果模板填写的
$0$
,token取的是token_g0:
- 如果模板写
$1$
,token取的是token_g1:
- 模板写
$2$
(不存在),如果模板不存在,token为null(即使勾选了使用空默认值,也返回null)
学习笔记,仅供参考哦!