JMeter进阶系列--JSON提取器

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

JMeter进阶系列--JSON提取器


1 概述


接口测试或者性能测试,常常需要动态提取上个请求返回的内容JMeter工具可以使用后置处理器进行处理以下是JMeter常用的提取器。

我们常用的JMeter正则表达式提取器和边界提取器,依赖前后文或者内容格式的稳定,匹配多个,无法保证每次精准提取正确的那一个,导致脚本无法稳定Json提取器可以定位到字段,无论字段内容如何变化,都可以精准提取,受前后内容影响不大

本文将通过理论和实例为大家介绍JMeterJson提取器。


2 Json提取器


使用JSON- path语法从JSON响应中提取数据非常类似于正则表达式提取器它将允许您以一种非常简单的方式提取文本内容。具体可参见JSON路径语法(来源于https://github.com/ Json -path/ Json Path 的官方介绍,大家可以前往获取更详细的内容)

一、操作符介绍

二、用法介绍

Json操作示例

提取某个字段内容,普遍适用的思路是先定位到节点再提取节点内字段名,如果想获取上图color字段的内容,我们可以写成:$.store.bicycle.color

在线验证成功:

更多表达式请见下表,可以网上找提取器进行实战练习推荐网址:https://www.lddgo.net/string/Jsonpath,输入上面的Json内容和表达式,查看获取到的结果。

3 Json实例1 -提取苍穹界面的pageId

实例:提取首页应用页签的pageId.需要从返回内容中提取(根据经验所得,如果不知道从哪个请求响应提取pageId,可以将本请求的pageId,向上查找搜索)

谷歌浏览Preview可以清晰的展示Json格式,推荐使用。

通过Preview”展开请求的响应内容,我的应用“pageId如下图所示。


根据1.2的用法介绍,我们可以得提取该pageId的四种方法。

1)第一种写法:第一步,确定节点,从上图Preview中可以看到需要提取的应用页签pageId在根节点下的第2个子节点p字段的第8个子节点,于是表达式为:$[2].p[8]使用JMeterJson提取器进行验证,验证成功。

第二步,确认节点内的哪个字段,这里取pageId

于是表达式为$[2].p[8].pageId,如下图,验证成功。


2)第二种写法:第一步确定节点,同节点内的某个键值对来定位,比如这里可以通过a:”showForm”定位到$[2]节点,formId:”tenant_myapp”定位到p[8]节点。

第二步,确定字段,字段为pageId于是表达式可以写成:

$[? (@.a=="showForm")].p[?(@.formId=="tenant_myapp")].pageId,如下图,验证成功。

3)第三种写法,通过上面介绍的用法,在我们确认formId: "tenant_myapp"唯一的情况下,可以直接提取符合条件的节点,而不用考虑节点的继承关系。

于是表达式可以写成:$..[?(@.formId=="tenant_myapp")].pageId(..搜索符合条件的节点)如下图,验证成功。

4)第四种写法,不考虑节点,直接提取所有pageId的值,再使用数组下标提取。

表达式:$..pageId,验证结果提取27pageId的值

可以看到我们要提取的结果在第9条,于是Json提取器可以写成

四个表达式,相同的结果

表达式一:$[2].p[8].pageId

表达式二:$[?(@.a=="showForm")].p[?(@.formId=="tenant_myapp")].pageId

表达式三:$..[?(@.formId=="tenant_myapp")].pageId

表达式四:$..pageId,由于提取了多条,需要JSON提取器标识匹配第几个值

对比:

表达式依赖数据结构的固定表达式固定提取数组下标$[2].p[8]的内容

表达式二,书写复杂,并且需要理清节点的继承关系

表达式三,精准定位到需要提取内容的节点,且表达式相对简单

表达式四,表达式最简单,但是提取到多条时,需要标识第几个值,也依赖于响应内容的固定和稳定。

表达式一和表达式四并没有解决依赖于响应内容或格式固定的问题,表达式过于复杂,此种情况推荐使用表达式三。既简单又无需清楚Json内容的具体结构。

如果pageId结果集唯一,推荐直接使用$..pageId提取pageId


4 实例2 -快速提取查询返回的数据


我们经常需要提取查询请求返回的数据做进一步处理,苍穹系统查询请求返回的数据一般在字段rows的内容中由于rows唯一,提取的表达式直接使用:$..rows

如下图,验证成功。

JSON提取器可以设置为:

5 总结

1、 Json提取器可以精准提取字段内容,无论字段内容如何变化。

2、 Json是一种普遍存在的数据交换格式,Json提取器可以广泛使用

3、 提取内容的原则:精准提取,表达式简单

4、 表达式书写方式需要大家在工作中多加练习, 方能熟练掌握众多组合用法的精髓

5Json提取器提取出来的变量通常可以作为JMeter变量给其他多个请求使用,如果请求返回结果是Json类型,使用Json提取器比正则表达式更加方便, 效率方面也会更好

6如果需要提取的字段唯一,推荐使用$..字段名,无需考虑节点的继承关系。



参考资料:

JsonPath介绍(github)https://github.com/Json-path/JsonPath






 





JMeter进阶系列--JSON提取器

1 概述接口测试或者性能测试,常常需要动态提取上个请求返回的内容,JMeter工具可以使用后置处理器进行处理,以下是JMeter常用的提取器。...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息