使用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())}