1

我的测试计划有一个 csv 数据集配置元素,一个带有 http 采样器的线程组。我想从 csv 中读取第一个元素,使用 20 个线程运行 50 次迭代,然后对我的 csv 的所有 30 行重复这个顺序过程。我已将 eof 上的停止切换设置为 true。

大多数解决方案,我已经在 Stack Overflow 和其他博客上浏览过,对于合适的解决方案,建议添加循环控制器或 while 循环,使用预处理器读取行并循环,但是,在这些情况下,我无法实现我的目标。

测试计划

-- 用户定义变量
-- HTTP 请求默认值
-- HTTP 标头管理器
-- JSR223 预处理器(获取 CSV 行数)
-- CSV 数据集配置(在 EOF 时回收 - 假,在 EOF 时停止 - 真)
- 线程组
-- HTTP 采样器(GET,将每个 csv 数据集元素作为路径的一部分传递)
-- 查看结果树

通过上面的设置,我看到整个 csv 都被迭代了,我包含了一个带有循环计数的循环控制器,将 HTTP 采样器移动到它下面。但是,当我这样做时,我无法在线程组中使用迭代。

文章参考:

从 JMeter 中的 CSV 数据集中每个线程使用相同的行

如何在 JMeter 中由单个用户读取 csv 的每一行?

如何使用 CSV 数据配置文件中的唯一数据循环每个线程

JMeter - 多个用户从 CSV 文件中获取唯一行

4

1 回答 1

1

您的要求太“异国情调”,我建议您从现有文件中创建一个新的 CSV 文件:

  • 第一行重复 100 次(20 个线程 x 50 次迭代)
  • 第二行重复 100 次
  • 第三行重复 100 次
  • ...
  • 第 30 行重复 100 次

如果您在生成文件时遇到问题,可以在运行时执行此操作,例如:

  1. 将带有 1 个线程和 1 个循环的setUp 线程组添加到您的测试计划中
  2. JSR223 采样器添加到线程组
  3. 将以下代码放入“脚本”区域:

    SampleResult.setIgnore()
    def generated = new File('/path/to/new/csv/file')
    generated.delete()
    new File('/path/to/old/csv/file').readLines().each { line ->
        1.upto(100, {
            generated << line << System.getProperty('line.separator')
        })
    }     
    
  4. 在主线程组中“正常”使用 CSV 数据集配置,只需将其指向使用/path/to/new/csv/file

有关可用于增强 JMeter 测试的有用 Groovy 代码片段的更多示例,请参阅The Groovy Templates Cheat Sheet for JMeter 。

于 2018-07-30T05:18:53.047 回答