使用JMeter中值列表中的请求值

我相信我过去已经做过这件事,但不知怎的,我无法弄清楚如何;-)所以,这是我的问题:

我正在尝试创建一个JUnit测试计划,其中每次迭代都会通过更改特定参数来修改HTTP请求。 因此,例如在五次迭代中,我希望进行以下HTTP请求:

http://localhost:8080/test/foo.html?id=1 http://localhost:8080/test/foo.html?id=2 http://localhost:8080/test/foo.html?id=3 http://localhost:8080/test/foo.html?id=4 ... 

我想为测试计划全局配置标识符值,并在HTTP请求采样器中使用它们,如下所示:

 Path: /test/foo.html?id=${categoryId} 

现在的问题是:如何全局配置标识符值(我不想使用StringFromFile )以及如何在采样器中引用它们?

有几种方法可以做到这一点。

  • 如果您只是递增,则可以使用计数器元素
  • 您可以使用任意数量的函数来计算值
  • 您可以从CSV文件中读取,这与“ StringFromFile ”具有相同的效果,但更易于自定义和操作

鉴于您有一系列值,您可以:

  • 尝试使用预处理器“用户参数” ,为每个用户/循环创建一个条目
  • 使用Beanshell脚本创建数组,随机选择一个并填充变量

您完全按照列出的方式引用它们: ${varName}

关于实现${__StringFromArrayAtRandomIndex('3', '2', '54', '42')}

假设您可以使用例如BeanShell Sampler / BeanShell PostProcessor和一些代码轻松实现您的场景。

例如:

  • 设置源变量(通过例如用户定义变量 ):

    名称值          
    类别3,2,54,42,37
    

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

  • 使用以下代码添加BeanShell Sampler / PostProcessor:

     import java.util.Random;
    
     String [] categories =(vars.get(“categories”))。split(“,”);
    
     int idx = new Random()。nextInt(categories.length);
     String category =(categories [idx]);
    
     vars.put(“categoryId”,类别);
    
  • 在脚本中进一步引用随机选择的表单列表值为${categoryId}

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

 country_1 Spain country_2 France country_3 Portugal country_4 Italy country_5 England 

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

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

请仔细阅读此答案以获得完整说明。

没有变量的最简单的解决方案可以使用vars.getIteration()来完成:

 /test/foo.html?id=${__groovy(vars.getIteration())}