从数组中获取随机值

时间:2013-02-04 20:25:39

标签: jmeter

我定义了一个新变量

Name        Value            Description
categories  (1, 2, 3, 4, 5)  my categories ids

在我的路径中,我想从类别中获取随机值:category_id=my_random_value

我甚至试过这个

category_id=${__StringFromArrayAtRandomindex('1', '2', '3', '4', '5'}

但它不起作用。

3 个答案:

答案 0 :(得分:16)

要从列表中获取随机变量值,首先使用前缀和增量索引将列表或可用值声明为用户变量:

country_1     Spain 
country_2     France  
country_3     Portugal  
country_4     Italy 
country_5     England

然后,您可以从列表中获取随机值,并将该前缀与间隔中的随机索引连接起来:

${__V(country_${__Random(1,6,)})}  --> "Spain", "France", "Portugal", etc...

<强>解释

__Random函数会为您提供间隔的索引。要获得1到5之间的值,您必须致电__Random(1,6,),因为它永远不会达到MAX值。

__V函数将获取具有给定名称的变量的值。

${__Random(1,6,)}                 --> 1, 2, 3, 4, 5
country_${__Random(1,6,)}         --> "country_1", "country_2", etc...
${__V(country_${__Random(1,6,)})} --> "Spain", "France", "Portugal", etc...

例如,要将随机变量用作请求的JSON正文,请在正文数据中使用

}
  "country":"${__V(country_${__Random(1,6,)})}"
}

答案 1 :(得分:12)

对于您的方案,您可以尝试使用JSR233组件(SamplerPreProcessorPostProcessor)和一些java / groovy代码。

E.g:

  • 完成您的数据定义:

    Name        Value          
    categories  1,2,3,4,5
    

    (即使用逗号作为分隔符,逗号前后不能有空格)。

  • 使用带有以下代码的JSR233 Sampler / PreProcessor / PostProcessor:

    import java.util.Random;
    
    String[] categories = (vars.get("categories")).split(",");
    
    int idx = new Random().nextInt(categories.length);
    String category = (categories[idx]);
    
    vars.put("rnd_cat", category);
    
  • 使用${rnd_cat}参考随机选择的类别。

答案 2 :(得分:6)

__ StringFromArrayAtRandomindex不是JMeter核心的一部分,也不是JMeter插件的一部分。

是自定义功能吗?

此外,您有语法错误(最后缺少

${__StringFromArrayAtRandomindex('1', '2', '3', '4', '5')}

要做同样的事情,请使用包含以下内容的CSV数据集:

1
2
3
4
5

集:

Variable Names=categoryId

然后您可以像这样使用它:

${categoryId}