JMeter负载测试:如何保存Reference Id并每次迭代生成新值?
解决Reference Id提取问题的步骤
1. 定位Reference Id的实际位置
先通过JMeter的查看结果树组件,查看点击checkout按钮后触发的请求(可能是页面跳转请求,也可能是AJAX接口)的响应内容:
- 检查响应体(HTML):搜索关键词
Reference Id或refId,找到它所在的标签或文本片段,比如<input type="hidden" name="referenceId" value="XXXX"> - 检查响应头:看
Location字段是否包含该Id(比如跳转URL里的参数) - 检查跳转后的页面URL:看Query参数里有没有类似
ref=XXXX的字段
2. 选择合适的提取器配置
情况1:Id在响应体的HTML标签中
优先用CSS Selector Extractor(比正则更稳定,不易受HTML结构小变动影响):
- 把CSS Selector Extractor添加到checkout请求的子节点
- 配置参数:
- Reference Name:
referenceId(自定义变量名,后续可直接引用) - CSS Selector Expression:比如
input[name="referenceId"](根据实际标签属性调整) - Attribute:
value - Match No.:
1(取第一个匹配结果)
- Reference Name:
如果一定要用正则提取器:
- 正则表达式:
name="referenceId" value="(.+?)"(括号包裹要提取的内容,?启用非贪婪匹配避免多取) - Template:
$1$ - Match No.:
1
情况2:Id在跳转URL的参数中
用正则提取器从响应头的Location字段提取:
- 正则表达式:
Location: .*ref=([^&]+)(假设参数名为ref,[^&]+匹配到下一个参数分隔符&之前的内容) - Template:
$1$ - 匹配范围选择
Response Headers
3. 确保50个用户的会话独立性
- 提取器的作用域必须限定在checkout请求(只作用于该请求,不要设为全局)
- Http Cookie Manager放在测试计划最顶层,保持默认配置(每个线程会维护独立的Cookie会话,不会串用)
- 测试计划线程数设为50,每个线程会独立执行完整流程,自动提取到各自的Reference Id
4. 验证提取结果
运行脚本后,在查看结果树的Variables标签下,检查每个线程的referenceId变量是否有值,且每个线程的值不同。如果没值,回到第一步重新定位Id的位置,调整提取器的配置。
内容的提问来源于stack exchange,提问作者Lerry roy
相关产品推荐
相关产品推荐

