jmeter接口关联:JSON提取和正则表达式提取

发布于:2024-07-11 ⋅ 阅读:(20) ⋅ 点赞:(0)


前言

在 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,获取到对应的值并传入需要使用该参数值的接口即可。

注意点:

  1. 如果正则匹配到值,但是没有填写模板,则返回空:
    在这里插入图片描述
  2. 如果模板填写的$0$ ,token取的是token_g0:

在这里插入图片描述

  1. 如果模板写$1$,token取的是token_g1:

在这里插入图片描述

  1. 模板写$2$(不存在),如果模板不存在,token为null(即使勾选了使用空默认值,也返回null)

在这里插入图片描述


学习笔记,仅供参考哦!