在所有线程上一对一执行csv行

时间:2018-07-28 05:16:03

标签: jmeter jmeter-4.0

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

对于大多数解决方案,我已经在Stack Overflow和其他博客上进行了介绍,以寻求合适的解决方案,建议添加循环控制器或while循环,使用预处理器读取行并进行循环,但是,在这些情况下,我不是能够实现我的目标。

TestPlan

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

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

参考文献:

Use same row per thread from a CSV data set in JMeter

How to read each and every row of csv by single user in JMeter?

How to loop each thread with unique data from CSV Data Config file

JMeter - multiple user taking unique row from CSV file

1 个答案:

答案 0 :(得分:1)

您的要求太过“异国情调”,建议您使用以下方法从您现有的文件中创建一个新的CSV文件:

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

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

  1. 将1个线程和1个循环的setUp Thread Group添加到您的测试计划中
  2. JSR223 Sampler添加到线程组
  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

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