从 Jmeter 中的 CSV 文件中随机选择
Posted
技术标签:
【中文标题】从 Jmeter 中的 CSV 文件中随机选择【英文标题】:Random selection from CSV file in Jmeter 【发布时间】:2013-08-31 01:23:24 【问题描述】:我有一个非常大的 CSV 文件(8000 多个项目),我正在使用 CSV 数据集配置元素读取这些 URL。它正在填充 HTTP 请求采样器的路径并使用 while 控制器进行迭代。
这很好,除了我想让每个用户(线程)从 CSV URL 列表中选择一个随机 URL。我不想要的是每个线程按顺序使用 CSV 项目。
我能够通过带有多个 HTTP 请求采样器的随机顺序控制器来实现这一点,但是 8000 多个 HTTP 采样器确实使 jmeter 陷入了无法使用的状态。所以这就是我将 HTTP 采样器 URL 放在 CSV 文件中的原因。但是,我似乎无法将 Random Order Controller 与 CSV 文件数据一起使用。那么如何实现每个线程的随机 CSV 数据项选择呢?
【问题讨论】:
【参考方案1】:还有另一种方法可以做到这一点:
创建单独的线程组 取决于您想要实现的目标: 添加(随机)循环计数 -> 这将为执行工作的线程组设置起始偏移量 添加一个循环计数或永远和一个计时器,让它在另一个线程组运行时循环。此线程组将读取“伪”随机行这不是真正随机的,文件仍然是按顺序读取的,但是您的工作线程会在文件中跳转。它对我有用;-)
【讨论】:
【参考方案2】:读取csv数据时没有随机选择功能。原因是您需要先将整个文件读入内存才能执行此操作,这对于负载测试工具(任何负载测试工具)来说都是个坏主意。
其他商业工具通过自动重新处理数据来解决这个问题。在 JMeter 中,您可以通过简单地使用任意字段对数据进行排序来手动实现相同的目的。如果你按姓氏排序,那么结果实际上是随机分布。
注意。如果您确保为 CSV 数据集配置设置了默认的 All Threads
,那么数据在 JMeter 进程的范围内将是唯一的。
【讨论】:
我会建议 Oliver Lloyd 提出的这个答案。总有一种方法可以通过使用 JSR223 采样器或编写一个在 jmeter 之前运行并随机化 csv 文件中的行的小程序来随机化 csv 数据集文件。【参考方案3】:来自 BlazeMeter 插件的新 Random CSV Data Set Config 应该完全符合您的需求。
【讨论】:
OP 特别需要一个“非常大的文件”的解决方案,但这个插件在这种情况下不能很好地工作,因为它只能在测试初始化时将文件读入内存(插件自己文档确认了这个问题)。这是一种方便的好方法,但它不可扩展。【参考方案4】:正如其他答案所述,您无法随机选择一行的原因是您必须将整个文件读入内存,效率低下。
与其试图让 JMeter 即时处理这个问题,为什么不在开始测试之前随机化文件顺序本身?
诸如 perl 之类的脚本语言可以简化以下工作:
cat unrandom.csv | perl -MList::Util=shuffle -e 'print shuffle<STDIN>' > random.csv
【讨论】:
【参考方案5】:就我而言:
单列 小数据集 CSV 不变我只是放弃使用 CSV 并参考 https://***.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]);
性能还可以,如果你遇到同样的问题可以试试这个。
【讨论】:
【参考方案6】:我不确定这是否可行,但无论如何我都会建议。
为什么不将您的网址分成 100 个不同的 CSV 文件。然后在每个线程中生成随机数并使用该数字识别 CSV 文件以使用 __CSVRead 函数读取。
CSVRead">http://jmeter.apache.org/usermanual/functions.html#_CSVRead
现在唯一我不确定 __CSVRead 函数是否每次都重新打开文件或在线程之间共享相同的文件句柄。
您可能想尝试一下。请分享您的发现。
【讨论】:
【参考方案7】:一个非常直接的解决方案。 在 CSV 文件中,添加另一列(比如 B) 在 B 列的第一个单元格(比如 B1)中应用 =RAND() 函数。这将创建随机浮点数。 拖动单元格(比如 B1)角以申请所有对应的 URL 对 B 列进行排序。 您的 URL 将被随机排序。 删除 B 列。
【讨论】:
以上是关于从 Jmeter 中的 CSV 文件中随机选择的主要内容,如果未能解决你的问题,请参考以下文章