最近在利用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表示取所有值,000表示随机取值,111表示取第一个值,222表示取第二个值

匹配数字: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,后面引用变量的时候直接用cardnumtest即可,如果填写−1,返回的是一个数组,后面引用变量的时候要用{card_num_test}即可,如果填写-1,返回的是一个数组,后面引用变量的时候要用cardn​umt​est即可,如果填写−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}的形式调用。

图片

今天的分享就到这里~

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

更多推荐