问题描述
在使用JMeter进行接口测试时,大部分接口的Content-Type
都是application/json;charset=UTF-8
,所以会设置一个全局的HTTP信息头进行管理。但对于个别接口,如文件上传接口,Content-Type
需要为multipart/form-data;
。这个时候如何设计呢?
方法1:
适用场景: 非文件上传类接口。
设计方式: 在该请求下单独添加一个HTTP信息头管理器,设置局部的Content-Type。
方法2:
适用场景: 所有接口。
设计方式: 使用beanshell预处理程序,编写脚本删除全局头信息,然后在文件上传的接口中勾选对POST使用multipart/form-data
。
实例:
脚本:
import org.apache.jmeter.protocol.http.control.HeaderManager;
import org.apache.jmeter.protocol.http.control.Header;
// 获得请求头信息
HeaderManager headers = sampler.getHeaderManager();
// 打印删除指定请求头参数前的全部请求头信息
log.info("删除前请求头信息" + headers.getHeaders().getStringValue());
// 删除请求头指定的Content-Type
sampler.getHeaderManager().removeHeaderNamed("Content-Type");
// 打印删除指定请求头参数后的全部请求头信息
log.info("删除后请求头信息" + headers.getHeaders().getStringValue());
小知识1: 是不是还可以使用beanshell预处理器删除全局信息头,然后在该请求下单独添加HTTP信息头?
答案: 不可以。因为jmeter脚本执行的顺序是:全局的HTTP信息头>局部的HTTP信息头>beanshell预处理程序的脚本
。如果这样操作,会导致设置的局部HTTP头信息被beanshell预处理程序删掉。
小知识2: 上传文件时,中文文件名称乱码,但里面的内容可正常显示,有什么解决办法吗?
答案: 暂未找到解决办法,待补充。。。。