1、JSON提取器介绍

相信做过自动化测试的朋友经常会遇到这样的场景:我想调用系统中的某个业务接口,但是需要先登录系统。也就是现在很多接口的访问,都是需要登录接口的token做为基础。

在JMeter中先访问登录接口,使用后置处理器提取出来token或者Cookie的值,然后将该值带到后续的业务接口中,这时就会用到JSON提取器组件。

为什么要用 JSON 提取器

  • JSON是目前大多数接口响应内容的数据格式。
  • 在接口测试中,不同接口之间可能会有数据依赖,在JMeter中可以通过后置处理器来提取接口的响应内容。
  • JSON 提取器是其中一个可以用来提取响应内容的元件。

2、JSON提取器界面详解

添加JSON提取器组件操作:选中“取样器”右键 —> 添加 —> 后置处理器 —> JSON提取器。

界面如下图所示:

下面是JSON提取器组件的详细说明:

  • 名称:JSON提取器组件的自定义名称,见名知意最好。
  • 注释:即添加一些备注信息,对该JSON提取器组件的简短说明,以便后期回顾时查看。

(1)Apply to:作用范围(返回内容的取值范围)

  • Main sample and sub-samples:作用于父节点的取样器及对应子节点的取样器。
  • Main sample only:仅作用于父节点的取样器。(选默认的 main sample only 就行了)
  • Sub-samples only:仅作用于子节点的取样器。
  • JMeter Variable Name to use:作用于JMeter变量(输入框内可输入JMeter的变量名称),从指定变量中提取需要的值。

(2)第二部分内容

  • Names of created variables:定义引用提取值的变量名,后面接口中使用${变量名}引用,必填项。
  • JSON Path expression:填写JSON Path表达式,用来提取某个值。必填项。
  • Match No.(0 for Random):表示取值是第几个匹配结果,因为有可能XPath表达式会匹配到多个值。0表示随机,-1表示全部,1代表第一个,2代表第二个,以此类推。(非必填项)
  • Compute concatenation var(suffix_ALL):勾选此项后,如果匹配到多个结果,JMeter会使用,将他们连接起来,存储在的变量中,会自动命名为<variable name>_ALL。
  • Default Values:缺省值,如果JSON Path表达式匹配不到值的时候,将使用该默认值。(非必填项)

3、JSON提取器的使用

需求:用户登录系统,并在系统中查询个人信息。

实现思路:

  1. 登陆系统,记录Cookie信息。
  2. 提取出用户的ID信息。
  3. 保持登陆的状态,根据用户ID,查询用户信息。

(1)测试计划内包含的元件

添加元件操作步骤:

  1. 创建测试计划。
  2. 创建线程组:选中“测试计划”右键 —> 添加 —> 线程(用户) —> 线程组。
  3. 在线程组里面,添加配置原件“HTTP Cookie管理器”组件:选中“线程组”右键 —> 添加 —> 配置元件 —> HTTP Cookie管理器。
  4. 在线程组下,添加取样器“HTTP请求”组件:选中“线程组”右键 —> 添加 —> 取样器 —> HTTP请求。
  5. 在取样器下,添加后置处理器“JSON提取器”组件:选中“取样器”右键 —> 添加 —> 后置处理器 —> JSON提取器。
  6. 在线程组下,添加监听器“察看结果树”组件:选中“线程组”右键 —> 添加 —> 监听器 —> 察看结果树。

提示:需要重复添加的组件这里不重复描述。

最终测试计划中的元件如下:

点击运行按钮,会提示你先保存该脚本,脚本保存完成后会直接自动运行该脚本。

(2)HTTP Cookie管理器内容

什么都不用填写,保持原样即可。

简单说明一下:

  • JMeter中自动收集的Cookie,是不会在HTTP Cookie管理器中进行展示的,但是运行后通过查看结果树可以查看到Cookie信息,接受到的Cookie会被自动存储在线程变量中。(使用Debug Sampler组件查看)
  • HTTP Cookie管理器会自动记录每一个请求所产生的Cookie,在后边对同源站点进行的请求中,都可以自动的使用对应Cookie进行发送。

(3)用户登陆请求界面内容

发送一个标准POST请求,参数格式为JSON,这里就不做解释了。

界面内容如下图所示:

(4)JSON提取器界面内容

我们在编辑JSON提取器组件之前,一般先请求一下需要提取返回数据的接口。

因为我们需要先查看一下需要提取的数据在什么位置,同时我们也能够提前编写一下JSON Path表达式。

如下图所示:

然后选择JSON Path Tester视图模式,先手动编写JSON Path表达式,看看是否能够取到需要的数据。

如下图所示:

之后我们就可以编写JSON提取器组件界面了,如下:

编写引用名称、JSON表达式、匹配数据选择,如下图:

提示:如果要获取多个元素,则可以在HTTP请求组件中,加入多个后置处理器来提取需要的值。即:每一个后置处理器只能获取一个值。

JSON提取器组件提取出来的数据,会存储在线程变量中,供其他后续接口使用。

(5)查看用户信息请求页面内容

填写接口的基本请求信息,然后把JSON提取器提取出来的数据,作为参数化变量应用到请求中。

如下图所示:

(6)查看结果

我们可以看到在第二个请求中,拿到了第一个请求提取出来的用户ID数据。

如下图所示:

再来看看第二个请求响应的结果,可以看到对应用户的信息我们已经查询到了。

提示:可以添加Debug PostProcessor(调试后置处理器),或者Debug Sampler(调试取样器),来查看JSON提取器中,提取出的内容是否正确。

注意:正常跑用例时删除或禁用它们。

4、总结

JSON提取器通常在接口返回是JSON格式的数据,并提取数据时用的比较多。提取完参数后,相当于把参数以 key-value 的形式放到参数池,以便后面的请求使用。

注意:不能超前引用。

5、补充:JSON Path表达式说明

JSON提取器用于提取请求返回结果中的某个值或者某一组值,用法比正则表达式要简单,标准写法为$.key,其中key为返回结果map中的一个键,如果是多层则继续用.key进行即可,如果遇到key的value值为一个List,则使用.key[n],其中n为list中元素的编号。

常用JSON Path表达式使用实例,如下:

  1. 获取第一层中的某个属性的值:$.key。
  2. 获取List中某个key的value值:$.result[0].name。
  3. 获取列表中的某个列表的属性值:$.result[1].approver[0]。
  4. 获取一个列表下全部的某一个元素:$.result[*].name。
  5. 获取N个值:

    取前两条数据:$.result.records[2].id。

    取后两条数据:$.result.records[-2].id。
  6. 提取特定条件的某个值:$.result.records[?(@.object_id==0)].id。
  7. 获取固定条件下的多个key的value值:$.result.records[?(@.object_id==0)].["id","name","is_active"]。

参考:https://blog.csdn.net/df0128/article/details/86535117

『动善时』JMeter基础 — 35、JMeter接口关联【JSON提取器】详解的更多相关文章

  1. 『动善时』JMeter基础 — 40、JMeter中ForEach控制器详解

    目录 1.什么是逻辑控制器 2.ForEach控制器介绍 3.ForEach控制器的使用 (1)测试计划内包含的元件 (2)获取学院列表请求内容 (3)JSON提取器内容 (4)ForEach控制器内 ...

  2. 『动善时』JMeter基础 — 44、JMeter对数据库的更新操作

    目录 1.执行一条insert语句 2.insert语句实现参数化 3.一次执行多条insert语句 4.使用Beanshell生成加密数据示例 (1)测试计划内包含的元件 (2)JDBC连接配置组件 ...

  3. 『动善时』JMeter基础 — 29、JMeter响应断言详解

    目录 1.JMeter断言介绍 2.响应断言组件界面详解 3.响应断言组件的使用 (1)测试计划内包含的元件 (2)登陆接口请求界面内容 (3)响应断言界面内容 (4)查看运行结果 (5)断言结果组件 ...

  4. 『动善时』JMeter基础 — 33、JMeter察看结果树的显示模式详解

    目录 1.CSS Selector Tester视图 2.HTML查看器 (1)HTML视图 (2)HTML(download resources)视图 (3)HTML Source Formatte ...

  5. 『动善时』JMeter基础 — 43、JMeter对数据库的查询操作

    目录 1.使用"用户自定义变量"实现参数化 2. 在SQL Query中使用占位符传递参数 (1)传递的参数值是常量 (2)传递的参数值是变量 3.Variables names参 ...

  6. Jmeter之Json提取器详解(史上最全)

    参考资料:https://www.bbsmax.com/A/D854lmBw5E/ Jsonpath在线测试:http://jsonpath.com/ 实际工作中用到的一些场景: 提取某个特定的值 提 ...

  7. 『动善时』JMeter基础 — 6、使用JMeter发送一个最基础的请求

    目录 步骤1:创建一个测试计划 步骤2:创建线程组 步骤3:创建取样器 步骤4:创建监听器 步骤5:完善信息 步骤6:保存测试计划 步骤7:查看结果 总结:JMeter测试计划要素 当我们第一次打开J ...

  8. 『动善时』JMeter基础 — 8、JMeter主要元件介绍

    目录 1.测试计划(Test Plan) 2.线程组 3.取样器(sampler) 4.逻辑控制器(Logic Controller) 5.配置元件(Config Element) 6.定时器(Tim ...

  9. 『动善时』JMeter基础 — 20、JMeter配置元件【HTTP Cookie管理器】详细介绍

    目录 1.HTTP Cookie管理器介绍 2.HTTP Cookie管理器界面详解 3.JMeter中对Cookie的管理 (1)Cookie的存储 (2)Cookie的管理策略 4.补充:Cook ...

随机推荐

  1. 日志功能 - 使用 conf 配置文件

    配置文件:Logger.conf 工具类:LogUtil.py 测试类:testDemo.py 执行效果 配置文件:Logger.conf 定义日志的类型.级别.格式等信息. [loggers] # ...

  2. 阿里云 RTC QoS 弱网对抗之 LTR 及其硬件解码支持

    LTR 弱网对抗由于需要解码器的反馈,因此用硬件解码器实现时需要做一些特殊处理.另外,一些硬件解码器对 LTR 的实现不是特别完善,会导致出现解码错误.本文为 QoS 弱网优化系列的第三篇,将为您详解 ...

  3. NT 内核函数原型大全

    NTSYSAPINTSTATUSNTAPINtAcceptConnectPort(OUT PHANDLE PortHandle,IN PVOID PortIdentifier,IN PPORT_MES ...

  4. 深入浅出带你玩转sqlilabs(二)

    MYSQL高权限注入 mysql跨库注入 详情请看上一篇:深入浅出带你玩转sqlilabs(一) mysql文件操作注入-sqlilabs less7 可能用到的函数: into outfile()函 ...

  5. Maven关于web.xml中Servlet和Servlet映射的问题

    在配置Servlet时,有两个地方需要配置. 一个是<servlet>,另一个是<servlet-Mapping>,这两个一个是配置Servlet,一个是配置其映射信息. &l ...

  6. 自定义Tomcat部署目录

    1.创建配置文件 在Tomcat安装目录中conf-->Catalina-->localhost目录下,创建项目访问请求路径.xml文件 内容如下: <Context path=&q ...

  7. Mybatis学习之自定义持久层框架(三) 自定义持久层框架:读取并解析配置文件

    前言 前两篇文章分别讲解了JDBC和Mybatis的基本知识,以及自定义持久层框架的设计思路,从这篇文章开始,我们正式来实现一个持久层框架. 新建一个项目 首先我们新建一个maven项目,将其命名为I ...

  8. 改善c++程序的150个建议(读后总结)-------12-18

    12.优先使用前置操作符 #include <iostream> using namespace std; class A { private: int num; public: A op ...

  9. 聊一聊 JVM 的 GC

    原文链接:https://www.changxuan.top/?p=1457 引言 JVM 中的 GC 在技术博客中应该算是个老生常谈的话题,网络上也存在着许多质量参差不齐的文章,可以看出来大都是&q ...

  10. Java线程池的工作流程

    线程池刚被创建的时候,只是向系统里申请一个用于执行流程队列和管理线程池的线程资源.在调用execute()添加一个任务时,线程池会按照以下流程执行: 1.如果正在运行的线程数少于corePoolSiz ...