jmeter-JSON提取器

发布时间 2023-06-02 18:18:39作者: huangyn

1、介绍

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

为什么要用 JSON 提取器 JSON是目前大多数接口响应内容的数据格式。

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

 

2.添加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会使用,将他们连接起来,存储在的变量中,会自动命名为_ALL。

Default Values:缺省值,如果JSON Path表达式匹配不到值的时候,将使用该默认值。(非必填项)

 

3.编写json提取表达式

假设有以下 JSON 数据:
{
  "name": "Tom",
  "age": 25,
  "address": {
    "province": "Guangdong",
    "city": "Shenzhen",
    "district": "Nanshan"
  },
  "hobbies": ["swimming", "reading", "travelling"]
}

$: 根目录
$ 表示整个 JSON 对象的根节点, 可以直接使用 $ 来获取整个 JSON 对象。
实例: $ 返回上述 JSON 数据。

.:属性名称
  .表示获取某一个属性名称的值, 用法为. < key > 或['<key>']。
实例: $.name 或者 $['name'], 返回 "Tom"..:递归查找
  ..可以深入到嵌套的层级中查找所有符合条件的属性, 可以结合 * 或者属性名称来选择查找的内容。
实例: $.address..返回 {
  "province": "Guangdong",
  "city": "Shenzhen",
  "district": "Nanshan"
}。

* :匹配所有
  *
  表示通配符, 可以匹配任何属性, 数组中的所有元素, 或者任何字符。
实例: $.hobbies[ * ] 返回["swimming", "reading", "travelling"]。

[num]: 数组索引
  [num] 表示数组下标, 从 0 开始。 可以结合 * 、: 等符号选择区间内的值。
实例: $.hobbies[1] 返回 "reading"[start: end: step]: 区间
  [start: end: step] 表示选取数组的某一区间。 其中 start 为起始点, end 为终止点, step 为步长。
实例: $.hobbies[0: 2: 1] 返回["swimming", "reading"]。

[ ? (@.key)]: 条件
  [ ? (@.key)] 用于根据条件过滤数据, 如果符合条件则返回该节点及其子节点。 其中 key 为节点名称。
实例: $.. [ ? (@.province == 'Guangdong')] 返回整个 address 对象。

 

 4.验证json提取的结果

方法1:在请求结果里使用JSON Path Tester

 运行后一个http请求得到响应结果,选择对应的http请求的响应结果,选择 JSON Path Tester ,然后输入自己写的表达式,Test得到结果

方法2:使用调试取样器

写好json提取器内容并在线程组(或请求里)里加一个调试取样器(Debug Sampler),然后运行线程组,查看结果树

由于我例子提取的是响应结果的json内容,就看response body,找下在json提取器里定义的变量,查看是否正确