JMeter中数组随机取值赋值及跨采样器传递数组的实现方法咨询
嘿,我来帮你搞定这两个JMeter的需求,分两部分给你讲清楚:
一、从两个数组随机取值并分配变量
你可以用JSR223元件(推荐用Groovy脚本,性能最优)来实现随机取值和变量分配,具体操作如下:
- 在你的线程组下添加一个
JSR223 PreProcessor或者JSR223 Sampler
- 在你的线程组下添加一个
- 在脚本编辑框中输入以下Groovy代码:
// 定义你的两个数组 def codeArray = [8, 9, 10] def valueArray = [4, 5, 6] // 如果你需要取不重复的随机值,先打乱数组顺序 Collections.shuffle(codeArray) Collections.shuffle(valueArray) // 分配给指定变量,转成字符串是因为JMeter变量只能存字符串类型 vars.put("Code1", codeArray[0].toString()) vars.put("Code2", codeArray[1].toString()) vars.put("Value1", valueArray[0].toString()) vars.put("Value2", valueArray[1].toString())
如果允许重复取值(比如Code1和Code2可能相同),可以直接用随机索引:
def random = new Random() vars.put("Code1", codeArray[random.nextInt(codeArray.size())].toString()) vars.put("Code2", codeArray[random.nextInt(codeArray.size())].toString()) vars.put("Value1", valueArray[random.nextInt(valueArray.size())].toString()) vars.put("Value2", valueArray[random.nextInt(valueArray.size())].toString())
完成后,你就可以在其他采样器里用${Code1}、${Value2}这样的格式引用这些变量了。
二、将数组传递给其他采样器
JMeter里传递数组需要注意:默认的JMeter变量只能存字符串,所以得用一些特殊方式,根据你的场景选下面的方法:
方法1:用JMeter属性(全局可用,跨线程组)
如果需要跨线程组传递数组,把数组序列化后存在JMeter属性里是最稳妥的方式:
在生成数组的JSR223元件里写入:
def codeArray = [8, 9, 10] def valueArray = [4, 5, 6] // 用JSON序列化数组,方便后续解析 props.put("CODE_ARRAY", new groovy.json.JsonBuilder(codeArray).toString()) props.put("VALUE_ARRAY", new groovy.json.JsonBuilder(valueArray).toString())
在接收数组的采样器的JSR223元件里读取并解析:
// 读取属性并转回数组 def codeArray = new groovy.json.JsonSlurper().parseText(props.get("CODE_ARRAY")) def valueArray = new groovy.json.JsonSlurper().parseText(props.get("VALUE_ARRAY")) // 接下来就可以继续处理数组,比如再随机取值 def random = new Random() vars.put("RandomCode", codeArray[random.nextInt(codeArray.size())].toString())
方法2:用JMeter上下文(同线程组内高效传递)
如果只是在同一个线程组内传递数组,直接把数组存到JMeter上下文对象里,不需要序列化,效率更高:
在第一个JSR223元件里:
def codeArray = [8, 9, 10] def valueArray = [4, 5, 6] // 把数组存入上下文,同一个线程内的所有元件都能访问 ctx.put("codeArray", codeArray) ctx.put("valueArray", valueArray)
在另一个采样器的JSR223元件里读取:
def codeArray = ctx.get("codeArray") def valueArray = ctx.get("valueArray") // 后续操作,比如取值分配变量 vars.put("Code3", codeArray[2].toString())
方法3:临时CSV文件(复杂场景备选)
如果数组内容极大,或者需要跨测试计划传递,可以把数组写入临时CSV文件,再用CSV Data Set Config读取,但这种方法比较繁琐,一般优先用前两种。
内容的提问来源于stack exchange,提问作者Suresh
相关产品推荐
相关产品推荐

