JMeter CSV数据集配置: 如何在同一个线程中遍历变量?

16

我正在使用一个CSV数据集配置元素,它从这样的文件中读取:

abd
sds
ase
sdd
ssd
cvv

基本上,这是一组由三个字母随机字符串组成的列表。

我将它们分配给一个名为${random_3}的变量。

现在,我想在同一个线程中多次使用该列表中的值,但每次我都想移动到下一个值。例如,我希望第一个采样器使用abd,第二个采样器使用sds,然后是ase等等。但如果我只使用${random_3},则无论引用了多少次,都只使用第一个值(即abd)。是否有一种方法可以指定在线程内循环遍历CSV数据集的值?

4个回答

34

CSV数据集配置适用于此功能。所有的值都需要在文件中放在一个列中,并按照描述将它们分配给变量。

创建一个线程组,对于要迭代整个文件的用户数,设置相应数量的线程(即对HTTP请求进行操作)。假设有1个用户,则将线程数设置为1,循环计数为1。

在线程组中,您需要添加一个循环控制器或者While控制器。您表示想要循环遍历整个数据集。如果您添加一个Loop Controller,您将希望将循环计数设置为6,因为您有6个值,每个值一个。或者(更容易处理整个文件),改为添加While控制器,并将${random_3}设置为while条件。

设置CSV数据集的EOF时回收EOF时停止线程值是重要的。如果您计划多次迭代文件,则必须将“EOF时回收”设置为True(即指示jMeter返回CSV文件顶部)。如果您使用循环控制器,请将“EOF时停止线程”设置为False;如果您使用While控制器并希望在读取整个CSV数据集后停止,则将其设置为True。

将CSV数据集配置作为控制器的子项与HTTP请求一起添加。使用任何您想要使用的监听器查看结果。


3

CSV数据集仅在每个线程迭代开始时才通过文件移动。

您可以使用原始数据源预处理器,以使每个请求都能够遍历文件,这就是您的解决方案。


谢谢,我看了一下,但似乎与我的用例没有直接关系,并且总体上有点繁琐。 - Ashkan Aryan
实际上这是一个解决方案。您可以在项目的邮件列表中询问如何精确使用它以获得您想要的结果。 - Andrey Pokhilko
谢谢Andrey,我会再次检查它。我的要求对于这部分来说非常简单,并且可以通过Beanshell中的简单随机字符串生成器来解决。 - Ashkan Aryan

1
更新:
CSV数据集似乎不适用于此目的。
结果,我创建了一些简单的beanshell脚本,根据需要创建随机的1、2或3个字母的单词,并从大量的单词中读取另一个单词。这样,每次调用它们时都会给出一个随机值。调用方式如下:
${__BeanShell(getRandomStr(3))}

或者

${__BeanShell(getRandomWord())

1
请注意,您需要在同一列中拥有给定变量名称的值。
执行:abd sds ase sdd ssd cvv与以下内容非常不同:
abd 
sds 
ase 
sdd 
ssd 
cvv

第一个有6个变量,每个变量都有一个值;第二个有1个变量,有6个值。


是的,谢谢,我知道这一点,我想让它们分配给同一个变量(但每次引用时都是一个新值)。 - Ashkan Aryan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接