如何配置JMeter,避免测试因暂未获取预期结果而失败
JMeter实现等待上传状态完成的测试逻辑
1. 定义超时控制变量
先通过「用户定义的变量」元件设置两个变量:
MAX_WAIT_SECONDS:值设为60(最大等待1分钟)START_TIME:值设为${__time(,)}(用JMeter内置函数获取测试开始时的时间戳)
2. 添加While控制器包裹查询请求
在查询图片状态的请求外层添加While控制器,设置循环条件为:
${__jexl3(${__time(,)} - ${START_TIME} < ${MAX_WAIT_SECONDS}*1000 && !"published".equals(vars.get("uploadStatus")),)}
这个条件的逻辑是:只要当前时间与开始时间的差小于60秒,且未获取到published状态,就持续循环查询。
3. 配置查询请求,避免404判定为失败
查询请求初期会返回404,需要让JMeter不把这类请求标记为失败:
- 打开查询请求的「高级」标签页
- 勾选「忽略状态码」选项,这样404响应不会被统计为失败请求
4. 提取uploadStatus状态值
在查询请求下方添加JSON提取器(如果响应是JSON格式):
- 引用名称:
uploadStatus - JSON Path表达式:
$.uploadStatus(请根据实际响应的JSON结构调整路径) - 匹配数字:
1(取第一个匹配结果)
如果响应是纯文本/HTML格式,改用正则表达式提取器:
- 引用名称:
uploadStatus - 正则表达式:
uploadStatus=(published)(根据实际响应内容调整匹配规则) - 模板:
$1$
5. 添加间隔定时器(可选)
为避免短时间内频繁请求压垮服务器,在查询请求下方添加固定定时器,设置延迟时间为2000毫秒(即每2秒查询一次)。
逻辑验证
运行测试时,While控制器会自动执行以下流程:
- 每2秒发送一次查询请求
- 若获取到
uploadStatus=published,立即终止循环 - 若超过60秒仍未获取到目标状态,也自动终止循环
- 期间所有404响应不会被计入失败率,解决测试报告失败率过高的问题
内容的提问来源于stack exchange,提问作者Smh
相关产品推荐
相关产品推荐

