【问题标题】:How to POST a XML file in jmeter body instead of a physical file如何在 jmeter 正文中发布 XML 文件而不是物理文件
【发布时间】:2018-07-03 05:21:20
【问题描述】:

我正在使用 JMeter 3.2。 我的要求是从磁盘读取一个 XML 文件,用动态值替换一些标签,以确保每个线程发送一个唯一的 xml 文件上传(不是 SOAP 请求)。当我尝试使用带有 ${newfilename} 文件 text/xml 的 http 采样器通过 POST 上传新文件时,JSR223 采样器中的以下代码工作得非常好。

import org.apache.commons.io.FileUtils;

try {

    String content = FileUtils.readFileToString(new File("E:/test.xml"));

        content = content.replaceAll("SUB_ID", "${__UUID}");   
        content = content.replaceAll("ABN_ID", "${empabn}");   
        content = content.replaceAll("EMPNAME", "${empname}");

        vars.put("content", content);
FileUtils.writeStringToFile(new File("E:/testnew${empname}.xml"), content);


} 
catch (Throwable ex) {
log.info("What happened?", ex);
throw ex;
}

如何将字符串“content”的内容作为请求正文的一部分发送,而不是再次写入磁盘并再次上传?我看过很多关于输入输出流的帖子,但它们令人困惑。当我尝试在正文中仅发送 ${content} 时,应用程序会引发以下错误:

HTTP Status 500 - Could not write JSON: Name is null (through reference chain: com.xxx.xxx.datafile.rest.DataFileResponse["validationStatus"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Name is null (through reference chain: 

感谢您的帮助。

【问题讨论】:

    标签: file-upload jmeter


    【解决方案1】:

    用于文件上传的Multipart POST requests与普通的POST请求不同,因此不可能简单地用生成的内存字符串替换文件。

    您需要完全按照 JMeter 或真实浏览器发送的请求复制请求,并手动填充每个部分,从使用 HTTP Header Manager 定义 boundary 到创建 Content-Disposition 结束并指定您的文件那里的内容。

    一点提示:您不需要为每个调用生成/替换值,只需替换一次就足够了,如果您使用 __eval()__FileToString() 函数组合,JMeter 将自行替换它们。

    您可以查看Testing REST API File Uploads in JMeter 以获取创建相对复杂的文件上传请求的示例,在您的情况下,它会更容易但仍然很棘手。

    【讨论】:

    • 您好 Dimitri,我尝试了很多选项,但无法发送文件内容。我也尝试使用 CloseableHttpClient 创建手动发布请求。没有错误,响应为 200 OK。但是,请求从未到达服务器。另外,我尝试使用手动内容配置。但是在这里,与 jmeter 中的原始请求不同,响应包含与手动标头添加的次数一样多的边界。如果您能提供帮助,不胜感激。
    猜你喜欢
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 2021-08-12
    相关资源
    最近更新 更多