JMeter循环内将多个动态值赋值为变量时返回null如何解决
错误原因
- 索引偏移问题:循环变量
i从1开始取值,存入变量时后缀使用了i+1,导致实际生成的变量是opponentA2~opponentA13,从未生成opponentA1、opponentB1,取值自然返回null - 打印位置错误:将取值打印逻辑放在了循环内部,第一次循环时还未生成对应变量,必然返回null
- 变量数量不足:当前你的前置变量
ID1_*只有12组(ID1_1`ID1_12`),如果要生成`opponentA20`这类到20的变量,需要先确保有对应的`ID1_13`ID1_20共8组新增变量
修正代码
如果需要生成opponentA1`opponentA12`、`opponentB1`opponentB12,修改后代码如下:
for (int i = 1; i <= 12; i++) { String[] pair = vars.get("ID1_" + i).split(" - "); // 直接用i作为变量后缀,生成对应序号的变量 vars.put("opponentA" + i, pair[0]); vars.put("opponentB" + i, pair[1]); } // 所有变量生成完成后再统一验证取值 log.warn(vars.get("opponentA1")); log.warn(vars.get("opponentB1")); log.warn(vars.get("opponentA12")); log.warn(vars.get("opponentB12"));
如果需要生成到opponentA20,请先补充ID1_13~ID1_20的变量取值,再将循环条件改为i <= 20即可。
变量调用方法
- 在JMeter的采样器、断言等其他元件中,直接使用
${opponentA序号}、${opponentB序号}的格式调用即可,例如${opponentA5}、${opponentB10} - 在其他JSR223元件中动态取值,使用
vars.get("opponentA" + 动态序号)的方式调用即可
内容的提问来源于stack exchange,提问作者vlatko606
相关产品推荐
相关产品推荐

