从Jmeter中的CSV文件中随机选择

qmb5sa22  于 2023-09-28  发布在  其他
关注(0)|答案(7)|浏览(101)

我有一个非常大的CSV文件(8000多个项目)的URL,我阅读的CSV数据集配置元素。它正在填充HTTP请求采样器的路径,并使用while控制器进行迭代。
这很好,除了我想要的是让每个用户(线程)从CSV URL列表中选择一个随机URL。我不希望每个线程都按顺序使用CSV项。
我可以用一个带有多个HTTP请求采样器的随机顺序控制器来实现这一点,但是8000多个HTTP采样器确实使jmeter陷入了不可用的状态。这就是为什么我把HTTP采样器URL放在CSV文件中。然而,我似乎不能将随机顺序控制器与CSV文件数据一起使用。那么,如何实现每个线程的随机CSV数据项选择呢?

fnatzsnv

fnatzsnv1#

还有另一种方法可以实现这一点:

  • 创建单独的线程组
  • 这取决于你想要实现的目标:
  • 添加一个(随机)循环计数->这将为执行该操作的线程组设置一个起始偏移量
  • 添加一个循环计数或永远和一个计时器,并让它在另一个线程组运行时循环。这个线程组将读取一个'伪'随机行

这并不是真正的随机,文件仍然是按顺序读取的,但是您的工作线程在文件中进行了跳转。它对我很有效;- )

siv3szwd

siv3szwd2#

新的Random CSV Data Set Config从BlazeMeter插件应该完全符合您的需求。

hwamh0ep

hwamh0ep3#

阅读csv数据时没有随机选择功能。原因是您需要首先将整个文件读入内存来执行此操作,而这对于负载测试工具(任何负载测试工具)来说都不是一个好主意。
其他商业工具通过自动重新处理数据来解决这个问题。在JMeter中,您可以通过简单地使用任意字段对数据进行排序来手动实现相同的功能。如果你按姓氏排序,那么结果实际上是随机分布。
注意。如果确保为CSV数据集配置设置了默认的All Threads,则数据在JMeter进程的范围内将是唯一的。

7vux5j2d

7vux5j2d4#

正如其他答案所述,你不能随机选择一行的原因是因为你必须将整个文件读入内存,这是效率低下的。
与其让JMeter在运行中处理这个问题,为什么不在开始测试之前随机化文件顺序呢?
像perl这样的脚本语言可以很简单地做到这一点:

cat unrandom.csv | perl -MList::Util=shuffle -e 'print shuffle<STDIN>' > random.csv
kxeu7u2r

kxeu7u2r5#

对于我的情况:

  • 单柱
  • 小数据集
  • 不更改CSV

我只是放弃使用CSV,引用https://stackoverflow.com/a/22042337/6463291并使用Bean预处理器,类似于这样:

String[] query = new String[]{"csv_element1", "csv_element2", "csv_element3"};
Random random = new Random();
int i = random.nextInt(query.length);
vars.put("randomOption",query[i]);

性能似乎还可以,如果你有同样的问题可以试试这个。

lp0sw83n

lp0sw83n6#

我不知道这是否会起作用,但无论如何我会建议它。
为什么不把你的URL分成100个不同的CSV文件呢?然后在每个线程中生成随机数,并使用该数字识别CSV文件,以使用__CSVRead函数读取。
CSVRead”> http://jmeter.apache.org/usermanual/functions.html#_CSVRead
现在我唯一不确定的是__CSVRead函数是否每次都重新打开文件,或者在线程之间共享相同的文件句柄。
你也许想试试。请分享您的发现。

xqnpmsa8

xqnpmsa87#

一个非常直接的解决方案。在CSV文件中,在B列(比如B1)的第一个单元格中添加另一个列(比如B)apply =兰德()函数。这将创建随机浮点数。拖动单元格(比如B1)的角以应用所有相应的URL排序列B。您的URL将被随机排序。删除B栏。

相关问题