如何对Jmeter CSV条目进行子集化?

时间:2018-04-23 16:11:46

标签: csv jmeter

我有100个用户的CSV文件,由于多种原因,我总是需要使用一部分用户运行测试。

我需要例如每个运行10个用户10次,尽管我有100个用户文件。

将共享模式设置为当前线程使得所有线程都以相同的用户(第一个)开始..但我需要的是按顺序启动。

Thread 1: user 1 
Thread 2: user 2
Thread 3: user 3
...

就像你有共享模式到#34;所有线程" ...时,问题是,在这种情况下,当它达到线程数(比如10)时,它会继续循环的其余部分的CSV条目..所以当它到达线程10:用户10,然后它转到线程1:用户11 ..当我需要的是继续运行前10个用户的测试,在这种情况重新启动线程1:用户1第二次运行。

任何想法如何实现忽略行11-100?并以1-10?

运行

谢谢!

1 个答案:

答案 0 :(得分:0)

最简单的解决方案是操纵原始文件itselt,即

  1. 制作原始CSV文件的备份
  2. 前10行并将其写入原始文件(现在它将是10行而不是100行)
  3. 测试完成后,通过从备份中恢复文件,返回到原始status quo
  4. 示例实施:

    • setUp Thread Group

      • JSR223 Sampler

        import java.nio.file.Files
        
        def maxLines = 10 // amend this as required
        
        def file = new File('users.csv')
        def backup = new File('users.csv.bak')
        Files.copy(file.toPath(),backup.toPath())
        file.delete()
        Files.lines(backup.toPath()).limit(maxLines).each {line ->
            file << line << System.getProperty('line.separator')
        }
        
        props.put('backup', backup)
        props.put('file', file)
        
    • 普通Thread Group
    • tearDown Thread Group

      • JSR223采样器

        import java.nio.file.Files
        import java.nio.file.StandardCopyOption
        
        def file = props.get('file')
        def backup = props.get('backup')
        
        Files.copy(backup.toPath(),file.toPath(), StandardCopyOption.REPLACE_EXISTING)
        backup.delete()
        

    有关在JMeter中使用Groovy脚本的详细信息,请参阅Apache Groovy - Why and How You Should Use It文章