11

我定义了一个新变量

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'}

但它不起作用。

4

3 回答 3

23

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

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,)})}"
}
于 2015-12-11T17:43:07.400 回答
15

对于您的场景,您可以尝试使用带有一些 java/ groovy代码的 JSR233 组件( SamplerPreProcessorPostProcessor )。

例如:

  • 像你所做的那样定义你的数据:

    名称 值          
    类别 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}

于 2013-02-04T23:02:37.527 回答
6

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

它是自定义功能吗?

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

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

要执行相同的操作,请使用包含以下内容的 CSV 数据集:

1
2
3
4
5

放:

Variable Names=categoryId

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

${categoryId} 
于 2013-02-04T21:12:40.260 回答