JMeter CSV Dataset Config:如何在同一个线程中移动变量?
Posted
技术标签:
【中文标题】JMeter CSV Dataset Config:如何在同一个线程中移动变量?【英文标题】:JMeter CSV Dataset Config: how to move through variables in the same thread? 【发布时间】:2011-11-11 04:31:57 【问题描述】:我正在使用一个 CSV 数据集配置元素,它从这样的文件中读取:
abd
sds
ase
sdd
ssd
cvv
基本上,它有一个由 3 个字母组成的随机字符串。
我将它们分配给一个名为 $random_3
的变量。
现在,我想在同一个线程中多次使用此列表中的值,但每次我都想移至下一个。例如,我希望第一个采样器使用abd
,第二个使用sds
,然后是ase
,等等。但如果我只使用$random_3
,那么只要提到它,就只使用第一个(abd)到。有没有一种方法可以指定循环遍历线程中 CSV 数据集的值?
【问题讨论】:
【参考方案1】:CSV 数据集配置 可以很好地解决这个问题。所有值都需要在文件的一列中,并按照描述将它们分配给变量。
创建一个线程组,它可以为尽可能多的用户提供尽可能多的线程来遍历文件(即处理 HTTP 请求)。假设1个用户,设置线程数为1,循环数为1。
在线程组中,您需要添加 Loop Controller 或 While Controller。您表示要遍历整个数据集。如果您添加一个循环控制器,您需要将循环计数设置为 6,因为您有 6 个值,每个值一个。或者(更容易处理整个文件)添加一个 While 控制器而不是循环控制器,并将 $random_3 设置为 while 条件。
正确设置 CSV 数据集 Recycle on EOF 和 Stop Thread on EOF 值非常重要。如果您计划多次迭代文件,则必须将“在 EOF 上循环”设置为 True(即指示 jMeter 移回 CSV 文件的顶部)。如果您使用的是循环控制器,请将“在 EOF 上停止线程”设置为 False,如果您使用的是 while 控制器并希望在读取整个 csv 数据集后停止,则设置为 true。
将 CSV 数据集配置与 HTTP 请求一起添加为控制器的子项。使用您想使用的任何侦听器查看结果。
【讨论】:
【参考方案2】:CSV 数据集仅在每个线程迭代开始时才在文件中移动。
您可以使用Raw Data Source PreProcessor 来移动每个请求的文件,这就是您的解决方案。
【讨论】:
谢谢你,我看过,但它似乎与我的用例没有直接关系,而且总体上有点繁琐。 其实是解决方案。你可以在项目的邮件列表中询问你应该如何准确地使用它来获得你想要的。 谢谢安德烈,我会再检查一次。我对这部分的要求非常简单,但是通过 beanshell 中的简单随机字符串生成器来解决。【参考方案3】:请注意,您需要在同一列中包含给定变量名称的值。
做事:abd sds ase sdd ssd cvv
跟
abd
sds
ase
sdd
ssd
cvv
第一个有 6 个变量,每个变量都有一个值;第二个有一个变量,有 6 个值。
【讨论】:
是的,谢谢,我知道,我希望将它们分配给同一个变量(但每次引用时都会分配一个新值)【参考方案4】:更新:
CSV 数据集似乎也不适合此目的。
我最终创建了一些简单的 beanshell 脚本,它们根据需要创建一个随机的 1、2 或 3 个字母的单词,以及另一个从大量集合中读取随机单词的脚本。这样,每次调用它们时,它们都会给出一个随机值。它们是这样称呼的:
$__BeanShell(getRandomStr(3))
或
$__BeanShell(getRandomWord())
【讨论】:
以上是关于JMeter CSV Dataset Config:如何在同一个线程中移动变量?的主要内容,如果未能解决你的问题,请参考以下文章
jmeter配置元器件:CSV Data Set Config
Jmeter 参数化 CSV Data Set Config