如何在一次测试迭代中从CSV文件中获取多个值

时间:2018-03-14 21:07:07

标签: jmeter jmeter-3.2

我需要在迭代中动态生成XML或JSON,其中XML或JSON具有可变数量的元素 - 例如,它可以是书籍。书籍的价值来自CSV文件。

我创建了一个CSV数据配置,指向带有名为csvBook的变量的CSV文件。

接下来,在BeanShell Sampler中,我调用

StringBuffer sb = new StringBuffer("<Order><Books>");
Random rv = new Random();
int size = rv.nextInt(100);
for (int i = 0; i < size; i++) {
   sb.append("<Book Name=" + vars.get("csvBook") + "/>");
}
sb.append("</Books></Order>");

问题是当我在一次迭代中运行循环时,我不知道如何从CSV文件中获取新值。 vars.get(“csvBook”)在同一次迭代中返回相同的值。

是否有命令告诉JMeter获取下一个CSV值(下一行)(同样,在一次迭代中)?

提前致谢。

1 个答案:

答案 0 :(得分:0)

考虑切换到JSR223 Sampler和Groovy语言:

  1. Groovy has built-in support for JSON
  2. Groovy has built-in support for XML
  3. Groovy performance is much better than Beanshell
  4. 相关的Groovy代码如下:

    import groovy.xml.StreamingMarkupBuilder
    
    def csvFile = new File('/path/to/csv/file')
    
    def payload = {
        order {
            books {
                csvFile.readLines().each {line ->
                    book (name:line)
                }
            }
        }
    }
    
    def xmlFile = new File('/path/to/xml/file')
    def writer = xmlFile.newWriter()
    def builder = new StreamingMarkupBuilder()
    def writable = builder.bind payload
    writable.writeTo(writer)