如何使用jmeter发送多个json主体?

时间:2019-03-19 06:41:29

标签: rest post jmeter

我已经编写了REST API,现在我的要求是使用JMeter的POST方法将多个JSON正文发送到API。我有一个带有四个值(1,2,3,4)的csv文件。在这四个文件中的每个文件中,我都有JSON正文。我用过:

步骤1)here

步骤2)${__FileToString(C:Path_to_csv_file/${__eval(${JSON_FILE})}.txt,,)}

但是从这里我只能访问第一个文件,即以一个命名的文件。如何将所有文件的正文发送到API? 非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

按以下方式在HTTP采样器中使用正文数据:

{__FileToString(${JSON_FILE},,)}

您必须将所有文件路径放入plan.csv文件中。每行应该有一个文件路径。

示例:

假设您要在HTTP采样器中使用4个带有JSON正文的文件。

在您的CSV文件plan.csv中提供这4个文件的文件路径。每行包含一个这样的文件路径:

/User/file/file1.json
/User/file/file2.json
/User/file/file3.json
/User/file/file4.json

现在,在您的CSV数据集配置中,使用包含所有文件路径的CSV文件的正确文件名,并为其指定一个变量名,例如JSON_FILE

现在,在您的身体数据中使用{__FileToString(${JSON_FILE},,)}这一行。还要相应地使用循环计数值。

答案 1 :(得分:0)

您将无法使用CSV数据集配置,因为它将读取每个线程(虚拟用户)和/或Thread Group迭代的下一个值。

如果您要求一次发送所有文件正文,则可以采用另一种方法

  1. JSR223 PreProcessor添加为HTTP Request采样器的子代,用于发送JSON有效负载
  2. 将以下代码放入“脚本”区域:

    def builder = new StringBuilder()
    new File('/path/to/plans.csv').readLines().each { line ->
        builder.append(new File(line).text).append(System.getProperty('line.separator'))
    }
    sampler.getArguments().removeAllArguments()
    sampler.addNonEncodedArgument('', builder.toString(), '')
    sampler.setPostBodyRaw(true)
    

    上面的代码遍历plans.csv文件中的条目,将文件内容读入字符串并将它们完全串联在一起。完成后,它将HTTP请求采样器主体数据设置为生成的累积字符串。

请查看The Groovy Templates Cheat Sheet for JMeter,以了解更多信息以及使用JMeter中的Groovy脚本可以实现什么。