jmeter-JSON提取器/正则表达式提取器
1、JSON提取器
1.1介绍
在JMeter中先访问登录接口,使用后置处理器提取出来token或者Cookie的值,然后将该值带到后续的业务接口中,这时就会用到JSON提取器组件。
为什么要用 JSON 提取器 JSON是目前大多数接口响应内容的数据格式。
在接口测试中,不同接口之间可能会有数据依赖,在JMeter中可以通过后置处理器来提取接口的响应内容。 JSON 提取器是其中一个可以用来提取响应内容的元件
1.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表达式匹配不到值的时候,将使用该默认值。(非必填项)
1.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 对象。
1.4.验证json提取的结果
方法1:在请求结果里使用JSON Path Tester
运行后一个http请求得到响应结果,选择对应的http请求的响应结果,选择 JSON Path Tester ,然后输入自己写的表达式,Test得到结果
方法2:使用调试取样器
写好json提取器内容并在线程组(或请求里)里加一个调试取样器(Debug Sampler),然后运行线程组,查看结果树
由于我例子提取的是响应结果的json内容,就看response body,找下在json提取器里定义的变量,查看是否正确
2.正则表达式提取器
与JSON提取器类似的内容,要遵循正则匹配规则,多个变量提取要使用模板
https://juejin.cn/post/7112626381166641165
2.2 正则规则
贴一个js的文档 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions
常用正则匹配表达式 https://juejin.cn/post/7022137582322450446
2.3 验证方式与JSON提取器一样