如何在JMeter中使用Beanshell后置处理器编写随机函数
关联变量随机值复用与传递实现方案
你需要让id_matchnr生成一个随机值并保存为变量,供id_details_var、id_details2_Var复用同一随机值,以下是可行的解决方法,同时分析你之前写法的问题:
推荐实现方式
方式一:用JMeter内置函数(最简单)
- 生成并保存随机值:在需要生成随机值的位置(如用户定义变量、前置处理器)使用
__Random函数,语法如下:
其中${__Random(1,${counter},id_matchnr)}${counter}是你预先定义的最大值变量(需先通过用户定义变量或其他方式设置具体数值),这个函数会生成1到counter之间的随机整数,并将结果存入id_matchnr变量。 - 复用随机值:
id_details_var和id_details2_Var直接引用${id_matchnr}即可,确保三个变量使用同一随机值。
方式二:用JSR223脚本(更灵活)
如果需要自定义逻辑,使用JSR223前置处理器(推荐选Groovy语言),写入以下代码:
int max = Integer.parseInt(vars.get("counter")); int randomNum = new Random().nextInt(max) + 1; // 生成1到max的随机整数 vars.put("id_matchnr", String.valueOf(randomNum));
后续id_details_var、id_details2_Var同样通过${id_matchnr}引用该随机值。
你之前写法的问题分析
- 第一种写法
int count = ${__Random(1,counter,)};:未给__Random指定变量名,且若在脚本中使用,直接拼接语法错误,无需手动赋值给int变量,用函数自带的变量存储更直接。 - 第二种写法
int count = ThreadLocalRandom.current().nextInt(1, counter);:counter需先转为整数,且nextInt的上限是排他的,要包含counter需写nextInt(1, counter + 1),同时未将生成的值存入JMeter变量池,导致其他变量无法引用。 - 第三种写法
math.random(1,counter):语法错误,Java中Math.random()返回0-1的double,正确生成1到counter整数的写法是(int)(Math.random() * counter) + 1,且同样需要将结果存入变量池才能复用。
内容的提问来源于stack exchange,提问作者Varsha
相关产品推荐
相关产品推荐

