我有一个非常大的CSV文件(8000多项)的URL,我正在阅读CSV数据集配置元素。它填充HTTP请求采样器的路径并使用while控制器进行迭代。
这很好,除了我想要的是让每个用户(线程)从CSV URL列表中选择一个随机URL。我不想要的是每个线程顺序使用CSV项目。
我能够通过带有多个HTTP请求采样器的随机顺序控制器来实现这一点,但是8000多个HTTP采样器确实将jmeter陷入了无法使用的状态。所以这就是我将HTTP Sampler URL放在CSV文件中的原因。但是,我似乎无法将随机顺序控制器与CSV文件数据一起使用。那么如何在每个线程中实现随机CSV数据项选择呢?
还有另一种方法可以实现这一目标:
- 创建一个单独的线程组
- 取决于你想要达到的目标:
- 添加(随机)循环计数 - >这将为执行工作的线程组设置起始偏移量
- 添加一个循环计数或永远和一个计时器,让它循环,而另一个线程组正在运行。该线程组将读取“伪”随机线
它并不是随机的,文件仍然按顺序读取,但是你的工作线程会在文件中跳转。它对我有用;-)
读取csv数据时没有随机选择功能。原因是您需要首先将整个文件读入内存才能执行此操作,这对于使用负载测试工具(任何负载测试工具)来说都是个坏主意。
其他商业工具通过自动重新处理数据来解决此问题。在JMeter中,您可以通过使用任意字段简单地对数据进行排序来手动实现相同的操作。如果按Surname排序,则结果实际上是随机分布。
注意。如果您确定默认值 All Threads
为CSV数据集配置设置,然后数据在JMeter进程的范围内是唯一的。
还有另一种方法可以实现这一目标:
- 创建一个单独的线程组
- 取决于你想要达到的目标:
- 添加(随机)循环计数 - >这将为执行工作的线程组设置起始偏移量
- 添加一个循环计数或永远和一个计时器,让它循环,而另一个线程组正在运行。该线程组将读取“伪”随机线
它并不是随机的,文件仍然按顺序读取,但是你的工作线程会在文件中跳转。它对我有用;-)
读取csv数据时没有随机选择功能。原因是您需要首先将整个文件读入内存才能执行此操作,这对于使用负载测试工具(任何负载测试工具)来说都是个坏主意。
其他商业工具通过自动重新处理数据来解决此问题。在JMeter中,您可以通过使用任意字段简单地对数据进行排序来手动实现相同的操作。如果按Surname排序,则结果实际上是随机分布。
注意。如果您确定默认值 All Threads
为CSV数据集配置设置,然后数据在JMeter进程的范围内是唯一的。
我不确定这是否有效,但无论如何我都会建议。
为什么不将您的网址划分为100个不同的CSV文件。然后在每个线程中生成随机数并使用该数字来识别要使用__CSVRead函数读取的CSV文件。
CSVRead“> http://jmeter.apache.org/usermanual/functions.html#_CSVRead
现在唯一的部分我不确定__CSVRead函数是每次都重新打开文件还是在线程之间共享相同的文件句柄。
你可能想尝试一下。请分享您的发现。
正如其他答案所述,你无法随机选择一行是因为你必须将整个文件读入内存效率低下。
而不是试图让JMeter动态处理这个问题,为什么不在开始测试之前随机化文件顺序呢?
像perl这样的脚本语言简化了这个:
cat unrandom.csv | perl -MList::Util=shuffle -e 'print shuffle<STDIN>' > random.csv
一个非常直接的解决方案。
在CSV文件中,添加另一列(例如B)
在B列的第一个单元格中使用apply = RAND()函数(比如B1)。这将创建随机浮点数。
拖动单元格(例如B1)角以应用所有相应的URL
列B排序
您的网址将随机排序。
删除B列。
新的 随机CSV数据集配置 来自BlazeMeter插件应该完全符合您的需求。