如何在jmeter主体而不是物理文件中发布XML文件

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

标签: file-upload jmeter

我正在使用JMeter 3.2。 我的要求是从磁盘读取XML文件,用动态值替换一些标签,以确保每个线程都发送唯一的xml文件上传(NOT SOAP Request)。当我尝试使用带有$ {newfilename}文件text / xml的http采样器通过POST通过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: 

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

用于文件上传的

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

您需要完全复制JMeter或真实浏览器发送的请求,并手动填充每个部分,从使用boundary定义HTTP Header Manager到创建{{1 }},然后在此处指定文件内容。

一个小提示:您不需要为每个调用生成/替换值,一次替换就足够了,并且只要您使用__eval()__FileToString(),JMeter就会自己替换它们功能组合。

JMeter Combine Variables

您可以查看Testing REST API File Uploads in JMeter来获取创建相对复杂的文件上传请求的示例,这种情况比较简单,但仍然很棘手。