11.jmeter关联

关联:把上一个接口返回的数据提取出来,传给下一个接口使用

JSON 优先用 JSON 提取器,XML/HTML 优先用 XPath提取器,仅当格式混乱时用正则提取器

Xpath提取器

常用于接口返回是 XML / HTML 格式,json一般不用

添加路径:右键http请求添加-后置处理器-XPath处理器

实操:访问菜鸟教程首页,并提取title内容

注意:HTML 不是标准 XML,JMeter 原生 XPath 不能直接解析,必须用 Tidy 把 HTML 转成标准 XML 才能正常提取。即返回是HTML网页,则必须勾选Use Tidy,返回是标准XML,则无须勾选。

因为返回的是HTML网页数据,所以勾选Use Tidy,下方填写内容为获取第一个title标签的文本内容,并将其赋予变量val,若不存在则将val变量的值设为无数据

xpath常用提取语句

示例xml代码

复制代码
<response>
  <code>200</code>
  <msg>操作成功</msg>
  <data sessionId="sess_123456">
    <user id="1001" name="张三">
      <order id="order_001" status="paid">
        <price>99.9</price>
      </order>
      <order id="order_002" status="unpaid">
        <price>199.9</price>
      </order>
    </user>
  </data>
</response>

|-------------------|----------------------------------|------------------------------------------|----------------------|
| 获取某一标签的内容 | 提取指定code的内容 | //response/code/text() | 精准定位标签层级使用 / 拼接访问路径 |
| 获取所有此标签内容 | 提取任意code的内容 | //code/text() | 直接//标签名提取 |
| 获取标签的属性值 | 提取data标签的sessionId属性 | //response/data/@sessionId | 定位标签后使用@获取属性值 |
| 获取指定标签的属性值 | 提取第一个order标签的id属性 | //order[1]/@id | []索引从1开始 |
| 属性满足某一条件的标签值 | 提取 status=paid 的 order 下的price内容 | //order[@status = 'paid']/price/text() | 属性筛选后提取 |
| 获取某一标签下值满足某条件的属性值 | 提取price大于100的order的id属性 | //order[price>100]/@id | 按子节点的值筛选 |
| 模糊匹配属性值 | 包含姓张的user标签id属性值 | //user[countains(@name,'张')]/@id | []录入条件,countains包含 |

示例HTML代码

复制代码
<html>
  <body>
    <div class="login-box">
      <input type="text" id="username" value="test001">
      <button id="submit-btn">登录</button>
      <a href="/user/1001">我的主页</a>
    </div>
  </body>
</html>

|-------------------------|---------------------------------|-------------------------------------|------------------------------|
| 获取某一标签下某一属性等于一个值的的另一属性值 | 提取id=username1的input标签的value属性值 | //input[@id = 'username]/@value | 通过id属性值精准匹配input标签获取value属性值 |
| 精准匹配某一标签的文本内容 | 获取id=submit-btn的button文本内容 | //button[id="submit-btn"]/text() | 通过id属性值精准匹配button标签来获取文本内容 |
| 模糊匹配某一标签的属性值 | 获取内容包含"我的"的a标签的href属性值 | //a[countains(text(),'我的')]/@href | 通过文本内容模糊匹配a标签来获取href属性值 |

  • 层级控制
    • //:全局查找(忽略层级,最常用);
    • /:精准层级(如/response/data/user,只找 response 下的 data 下的 user)。
  • 筛选逻辑
    • [@属性名='值']:精准匹配属性;
    • contains(@属性名,'关键词'):模糊匹配;
    • [索引]:取第 N 个元素(索引从 1 开始,不是 0)。
  • 文本 / 属性区分
    • text():提取标签内的文本;
    • @属性名:提取标签的属性值。

正则表达式提取器

正则表达式提取器是 JMeter 中通用的文本提取工具,可从任意格式响应文本(HTML/JSON/ 纯文本 / XML)中提取目标数据,核心解决「非结构化 / 混合格式文本」的关联问题(JSON 优先用 JSON 提取器,XML/HTML 优先用 XPath,仅格式混乱时用正则)。

添加路径:http请求右键添加-后置处理器-正则表达式提取器

取这个json字符串中的"张三"

正则表达式常用基础语法

正则表达式匹配符需要用()包裹

正则表达式练习网址

https://regex101.com/

复制代码
import re

# 模拟JMeter中常见的接口响应文本(包含JSON、HTML、纯文本)
test_response = """
{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "token": "abc123_def456",
    "userInfo": {
      "id": 1001,
      "name": "张三",
      "phone": "13888889999"
    }
  }
}
<div class="order">
  <p>订单号:OD20260314001</p>
  <p>金额:99.9元</p>
</div>
"""

|------|----------|------------------|-------------------|-------------|
| . | 任意匹配一个字符 | 获取"张三" | "name": "(..)", | 张三 |
| \d+ | 匹配数字 | 获取手机号13888889999 | "phone": "(\d+)" | 13888889999 |
| .*? | 匹配任意字符串 | 获取操作成功 | "msg": "(.*?)", | 操作成功 |

json提取器

对json格式的响应文本进行提取匹配

添加路径:http请求右键添加-后置处理器-json提取器

提取第一个性别男

json提取器基础语法

$:根节点

.:取子节点

[]:取数组元素(比如data.list[0]取第一个元素)

相关推荐
鲜于言悠90521 小时前
博客系统测试报告
python·功能测试·selenium·jmeter·测试用例·集成测试·pytest
半个俗人1 天前
8.jmeter直连数据库-MySQL
数据库·jmeter
张永清-老清1 天前
每周读书与学习->Jmeter中如何使用Bean Shell脚本(二)Bean Shell的基础语法之变量与数据类型
学习·测试工具·jmeter·压力测试·性能调优·jmeter性能测试·性能分析
半个俗人1 天前
5.jmeter请求默认值
jmeter
半个俗人1 天前
6.jmeter信息头管理器
jmeter
0和1的舞者2 天前
高并发论坛系统:单元测试 + 接口自动化 + 性能测试 + CI/CD 全链路测试报告
java·测试开发·测试工具·jmeter·pytest·测试·测试报告
于眠牧北2 天前
Jmeter发送POST请求并设置application/json格式
jmeter·json
kong79069283 天前
使用Jmeter进行压力测试
jmeter·并发测试