最近在利用JMeter做接口自动化测试,正则表达式提取器和JSON提取器用的还挺多,想着分享下,希望对大家的接口自动化测试项目有所启发。

在 JMeter 中,正则表达式和 JSON 提取器都是用于从响应数据中提取所需内容,但它们的使用场景略有不同。正则表达式提取器适用于处理非结构化或不规则格式的响应数据,而 JSON 提取器适用于处理结构化的 JSON 响应数据。

正则表达式提取器:正则表达式提取器是 JMeter 的内置功能,用于从响应数据中提取特定模式的文本。它适用于那些响应数据中的内容没有明确定义结构的情况。

例如,当响应数据是自由格式的文本、HTML、XML 或其他非结构化数据时,可以使用正则表达式提取器来捕获信息,需要编写适当的正则表达式来匹配并捕获所需的内容。

JSON 提取器:JSON 提取器是 JMeter 的插件,专门用于从 JSON 格式的响应数据中提取数据。它针对 JSON 数据结构进行了优化,并提供了更便捷的方式来解析和提取 JSON 数据。

可以使用 JSON 提取器根据 JSON 路径表达式来定位和提取 JSON 对象、数组或属性中的值。JSON 提取器更适用于处理结构化的响应数据,如 API 响应返回的 JSON 格式数据。

一、使用场景

A接口返回的JSON数据如下,B接口需要用到A接口的返回参数id_card_num,所以需要将A接口返回的参数提取出来,存在一个变量例如card_num_test中,在B接口中直接以${card_num_test}的形式调用即可。

二、 正则表达式提取器

1、新建http请求


2、添加正则表达式提取器
选中http请求,鼠标右键–添加–后置处理器–正则表达式提取器
在这里插入图片描述
3、填写正则表达式的参数

在这里插入图片描述
名称:自定义

Apply to :

  • Main sample and sub-samples:匹配范围包括当前父取样器并覆盖子取样器
  • Main sample only:默认,匹配范围是当前父取样器(大多数情况下选择默认即可)
  • Sub-samples only :仅匹配子取样器
  • JMeter Variable Name to use:支持对 JMeter变量值进行匹配(输入框内可输入jmeter的变量名称)

要检查的响应字段:

  • 主体:响应数据的主体部分
  • Body(unescaped):针对替换了的响应码部分
  • Body as a Document:返回内容作为一个文档进行匹配
  • 信息头
  • Request Headers:请求头部分
  • URL:URL链接
  • 响应代码:响应码,例如HTTP返回码200表示成功
  • 响应信息:响应信息,例如处理成功返回“成功”字样,或者“OK”字样

引用名称:下一个请求要引用的参数名称,如填写card_num_test,则可用$card_num_test}引用它。

正则表达式:编写一个正则表达式来匹配要提取的内容,例如"id_card_num":“(.+?)”
():括起来的部分就是要提取的。
.:匹配任何字符串。
+:一次或多次。
?:不要太贪婪,在找到第一个匹配项后停止。

模板:指定如何处理匹配结果,例如 − 1 -1 1表示取所有值, 0 0 0表示随机取值, 1 1 1表示取第一个值, 2 2 2表示取第二个值

匹配数字:1代表全部取值,0表示随机取值

缺省值:如果正则表达式取不到值,则使用此缺省值

4、添加一个Debug Sampler

可以用来调试,验证正则表达式是否正确。

在这里插入图片描述
在这里插入图片描述
5、执行脚本,查看结果

与接口返回的值一致,证明正则表达式编写正确,B接口需要用到这个值的时候,直接以${card_num_test}的形式调用。

在这里插入图片描述

三、JSON提取器

1、新建http请求


2、添加正则表达式提取器
选中http请求,鼠标右键–添加–后置处理器–JSON Extractor

3、填写JSON提取器的参数


名称:自定义

Apply to :应用范围,一般默认为Main sample only,可根据实际使用需求选择
Main sample and sub-samples:作用于主请求和子请求
Main sample only:仅作用于主请求
Sub-samples only:仅作用于子请求
JMeter Variable:作用于JMeter变量(输入框内可输入JMeter的变量名称);用法可用于提取正则表达式提取器中的值

Names of Created variables:作为引用的变量名称,多个变量名通过分号;隔开,自定义

JSON Path expessions:格式为 . (层级名称),本次示例为 .(层级名称),本次示例为 .(层级名称),本次示例为.data.id_card_num

Match No.:取第几个数值,0代表随机,-1代表取全部数组数据,1代表取一个变量数值,与设置的变量名称有关,本次示例填-1(说明:如果填写1,后面引用变量的时候直接用 c a r d n u m t e s t 即可,如果填写 − 1 ,返回的是一个数组,后面引用变量的时候要用 {card_num_test}即可,如果填写-1,返回的是一个数组,后面引用变量的时候要用 cardnumtest即可,如果填写1,返回的是一个数组,后面引用变量的时候要用{card_num_test_1},${card_num_test_2}的形式)

Compute concatenation var(suffix_ALL):匹配到的所有数值并保存,默认为空即可

Default Value:取值失败时展示的内容,默认为空即可

4、添加一个Debug Sampler

可以用来调试,验证正则表达式是否正确。

在这里插入图片描述
在这里插入图片描述
5、执行脚本,查看结果

与接口返回的值一致,证明正则表达式编写正确,B接口需要用到这个值的时候,直接以${card_num_test_1}的形式调用。**

在这里插入图片描述
今天的分享就到这里~


最后很多小伙伴都有学习自动化测试的想法,这里在我在B站分享了一份自动化测试的视频教程,小伙伴们可以自行观看:

如何逼自己1个月学完自动化测试,学完即就业,小白也能信手拈来,拿走不谢,允许白嫖…

公众号粉丝福利

  • 软件测试全套资源免费领取

  • 软件测试面试刷题小程序免费使用

  • 专属于测试人的GPT免费使用

在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐