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

时间:2013-08-28 05:21:03

标签: csv random jmeter performance-testing

我有一个非常大的CSV文件(8000多项)的URL,我正在使用CSV数据集配置元素阅读。它填充HTTP请求采样器的路径并使用while控制器进行迭代。

这很好,除了我想让每个用户(线程)从CSV URL列表中选择一个随机URL。我不想要的是每个线程顺序使用CSV项目。

我能够通过带有多个HTTP请求采样器的随机顺序控制器来实现这一点,但是8000多个HTTP采样器确实将jmeter陷入了无法使用的状态。所以这就是我将HTTP Sampler URL放在CSV文件中的原因。但是,我似乎无法将随机顺序控制器与CSV文件数据一起使用。那么如何实现每个线程的随机CSV数据项选择呢?

6 个答案:

答案 0 :(得分:8)

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

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

它并不是随机的,文件仍然按顺序读取,但是您的工作线程会在文件中跳转。它对我有用; - )

答案 1 :(得分:3)

读取csv数据时没有随机选择功能。原因是您需要首先将整个文件读入内存才能执行此操作,这对于使用负载测试工具(任何负载测试工具)来说都是个坏主意。

其他商业工具通过自动重新处理数据来解决此问题。在JMeter中,只需使用任意字段对数据进行排序,即可手动完成相同的操作。如果你按Surname排序,那么结果就是有效的随机分布。

请注意。如果确保为CSV数据集配置设置了默认All Threads,则数据在JMeter进程的范围内将是唯一的。

答案 2 :(得分:1)

正如其他答案所述,你无法随意选择一行是因为你必须将整个文件读入内存效率低下。

为什么不在开始测试之前让JMeter随机处理文件顺序呢?

像perl这样的脚本语言简化了这个:

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

答案 3 :(得分:0)

我不确定这是否有效,但无论如何我都会建议。

为什么不将您的网址划分为100个不同的CSV文件。然后在每个线程中生成随机数并使用该数字来识别要使用__CSVRead函数读取的CSV文件。

CSVRead“&GT; HTTP://jmeter.apache.org/usermanual/functions.html#_CSVRead

现在唯一的部分我不确定__CSVRead函数是每次都重新打开文件还是在线程之间共享相同的文件句柄。

您可能想尝试一下。请分享您的发现。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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