从数组中获取随机值

Moh*_*ine 8 jmeter

我定义了一个新变量

Name        Value            Description
categories  (1, 2, 3, 4, 5)  my categories ids
Run Code Online (Sandbox Code Playgroud)

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

我甚至试过这个

category_id=${__StringFromArrayAtRandomindex('1', '2', '3', '4', '5'}
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

Ale*_*uti 16

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

country_1     Spain 
country_2     France  
country_3     Portugal  
country_4     Italy 
country_5     England
Run Code Online (Sandbox Code Playgroud)

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

${__V(country_${__Random(1,6,)})}  --> "Spain", "France", "Portugal", etc...
Run Code Online (Sandbox Code Playgroud)

说明

__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...
Run Code Online (Sandbox Code Playgroud)

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

}
  "country":"${__V(country_${__Random(1,6,)})}"
}
Run Code Online (Sandbox Code Playgroud)

  • 如果它对任何人有帮助,在 jMeter 5 中,`__Random` *将*达到 MAX 值。 (2认同)

Ali*_*lik 12

对于您的场景,您可以尝试使用JSR233组件(Sampler,PreProcessor,PostProcessor)和一些java/groovy代码.

例如:

  • 完成后定义您的数据:

    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);
    
    Run Code Online (Sandbox Code Playgroud)
  • 请参阅随机选择的类别${rnd_cat}.


UBI*_*ACK 6

__StringFromArrayAtRandomindex不是JMeter核心的一部分,也不是JMeter插件的一部分.

这是一个自定义功能吗?

此外,您在结尾处有语法错误(缺少):

${__StringFromArrayAtRandomindex('1', '2', '3', '4', '5')}
Run Code Online (Sandbox Code Playgroud)

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

1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)

组:

Variable Names=categoryId
Run Code Online (Sandbox Code Playgroud)

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

${categoryId} 
Run Code Online (Sandbox Code Playgroud)