【问题标题】:How to get multiple values from a CSV file inside of one test iteration如何在一次测试迭代中从 CSV 文件中获取多个值
【发布时间】:2018-04-09 11:58:41
【问题描述】:

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

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

接下来,在 BeanShell 采样器中,我调用

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 值(下一行)(同样,在一次迭代中)?

提前致谢。

【问题讨论】:

  • 如果你有脚本,IMO 更容易在其中读取 CSV,如下所示:anadea.info/blog/jmeter-reading-csv-with-beanshell 并且只将“最后读取的行”或类似的东西存储为变量,所以下次你阅读下一部分
  • @KirilS -- 谢谢。那行得通。我们将 CSV 文件读入一个 ArrayList。现在,我们希望在线程组中的所有线程之间共享该 ArrayList,因为我们有很多线程(虚拟用户)并且文件很大——例如,400K 行。但是,是的,这种方法有效。

标签: jmeter jmeter-3.2


【解决方案1】:

考虑切换到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

相关的 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 2012-10-17
    • 2015-07-21
    相关资源
    最近更新 更多