首页 > 解决方案 > jMeter:将多行从 CSV 文件加载到 HTTP 正文中

问题描述

我正在尝试为接受项目列表的服务构建 HTTP 请求,例如:

{
    "user": "john", 
    "table": "goods",
    "articles": [ 
        {"id": "003", "quantity": 1},
        {"id": "004", "quantity": 1},
        {"id": "023", "quantity": 2},
        {"id": "011", "quantity": 3},
        {"id": "063", "quantity": 1},
        {"id": "006", "quantity": 7}
    ]
}

我的目标是从 CSV 文件中加载所有文章,如下所示:

在此处输入图像描述

我想要类似的东西:

{
    "user": "john", 
    "table": "goods",
    "articles": [ 
        {"id": "${id}", "quantity": ${qte}}
    ]
}

谁能帮我?



更新:

Dmitri T 解决了我的问题,谢谢!我还问他如何将 JSON 对象(字典)添加到我的身体中,而他回答我找到了一个解决方案,如果有人需要,我将在这里分享。如果要添加:

"user": {"id": 1, "name": "John"}

到你的身体内容,你只需要这样做:

def user = [:]

//populate user
user.put('id', 1)
user.put('name', 'John')

//add user entity to body content
content.put("user", user)

玩得开心!

标签: jmeter

解决方案


您将无法获得上面提供的内容,动态构建 JSON 请求主体的唯一方法是使用JSR223 PreProcessor以编程方式构建它

  1. 将 JSR223 PreProcessor 添加为要参数化哪个主体的请求的子项
  2. 将以下代码放入“脚本”区域:

    def content = [:]
    content.put('user', 'john')
    content.put('table', 'goods')
    def articles = []
    new File('test.csv').readLines().each { line ->
        def article = [:]
        article.put('id', line.split(',')[0])
        article.put('quantity', line.split(',')[1])
        articles.add(article)
    }
    content.put('articles', articles)
    sampler.addNonEncodedArgument('', new groovy.json.JsonBuilder(content).toPrettyString(), '')
    sampler.setPostBodyRaw(true)
    
  3. 就是这样,当您运行测试时,预处理器将从 CSV 文件生成请求正文,并将其动态添加到HTTP 请求采样器。

参考:


推荐阅读