Jmeter之『上传文件』

方法一:通过勾选『对POST使用multipart/form-data;』

注意坑

手动设置Content-Type后,该方法失效。需要在预处理程序中,移除:Content-Type,移除代码如下:
添加JSR223 预处理程序(Java):

// 在低版本Jmeter可能不成功,在5.3版本中,该脚本测试通过
sampler.getHeaderManager().removeHeaderNamed("Content-Type");

但移除后,后续的接口如果仍然想要设置默认Content-Type,则需要添加JSR223 后置处理程序(Java):

import org.apache.jmeter.protocol.http.control.Header;
// 创建Header,需要导入
Header header = new Header("Content-Type","application/json; charset=UTF-8");
// 添加Header
sampler.getHeaderManager().add(header);

除此之外,上传文件的名字为中文时,会乱码,解决方案参考:https://blog.csdn.net/qq_18298049/article/details/106817246

传参:

普通参数:

Content-Disposition: form-data; name="productId"

# 以上类型的参数,在Jmeter中通过『参数tab』添加

文件:

Content-Disposition: form-data; name="file"; filename="测试条款.pdf"
Content-Type: application/pdf

以上类型的参数,在Jmeter中通过『文件上传』添加,其中:
name:对应Jmeter的参数名称
filename:对应Jmeter的文件名称(全路径)
Content-Type:对应Jmeter的MIME类型

方法二:直接构建参数(留下疑问:通过__FileToString为什么会导致文件失效)

创建Post请求后,该方法只适合上传文本,不适合图片、PDF等上传,因为__FileToString方法会导致该类文件失效,上传后文件不可用。

除此之外,还需注意:参数,编码格式,请求头,boundary

请求参数

注意设置上传文件的name,filename,Content-Type及调用__FileToString生成文件内容

--edc290560458f57dad9d94d0b7a2f03e7f2ae30f133b85756a659cfcdf39
Content-Disposition: form-data; name="productId"

581
--edc290560458f57dad9d94d0b7a2f03e7f2ae30f133b85756a659cfcdf39
Content-Disposition: form-data; name="file"; filename="测试条款.pdf"
Content-Type: application/pdf

${__FileToString(C:UsersDELLDesktopv3.7.3迭代	estProduct.pdf,utf-8,)}
--edc290560458f57dad9d94d0b7a2f03e7f2ae30f133b85756a659cfcdf39--

编码格式

在调用__FileToString函数时,注意使用『正确(如utf-8)』格式,否则乱码

请求头

使用该方法实现文件上传时,注意覆盖接口的请求头Content-Type,设置为:

# 通过HTTP信息头管理器设置,boundary可自定义
Content-Type: multipart/form-data; boundary=edc290560458f57dad9d94d0b7a2f03e7f2ae30f133b85756a659cfcdf39

boundary

注意boundary的值,需要与请求参数中的boundary相同

原文地址:https://www.cnblogs.com/testopsfeng/p/13787171.html