JMeter测试执行时更新数据源并在同次运行中复用的实现咨询
结论
该场景可以100%在JMeter原生能力范围内实现,不需要依赖CSV、数据库等外部存储,也不需要额外写入本地文件。
核心实现思路
核心是利用JMeter自带的**全局属性(props)**做内存级存储,全局属性是JMeter进程级别的变量,只要测试进程不停止,存储的值就会一直保留,完美匹配同次测试运行内迭代更新的需求。
具体操作步骤
- 1、初始化初始ID
新增一个setUp线程组,在组内添加JSR223采样器,写入初始ID到全局属性:// 替换引号里的内容为你的初始有效数字ID props.put("current_id", "1") - 2、构造POST请求
在业务线程组中新建HTTP请求,请求方法选POST,路径填/items/new,请求体填写:
其中{ "id": "${__P(current_id,)}" }${__P()}是JMeter内置的读取全局属性的函数,可以直接拿到最新的id值。 - 3、提取响应返回的新ID
在POST请求下添加JSON提取器,配置如下:- 引用名称:
new_id - JSON路径表达式:
$.id(可根据实际响应结构调整) - 匹配数字:
0
- 引用名称:
- 4、更新全局存储的ID
在POST请求下再添加JSR223后置处理器,写入代码实时更新全局属性:props.put("current_id", vars.get("new_id")) - 5、配置循环执行逻辑
给业务线程组设置你需要的循环次数(选“永远”即可实现无限循环迭代),每一轮循环都会自动读取上一轮更新后的最新ID发起请求,完成你需要的ID迭代替换逻辑。
注意事项
如果是多线程并发场景,需要给全局属性的写入逻辑加锁避免并发覆盖,修改JSR223后置处理器的代码即可:
synchronized(props){ props.put("current_id", vars.get("new_id")) }
内容的提问来源于stack exchange,提问作者Michael Derevyanko
相关产品推荐
相关产品推荐

