jmeter 使用beanshell预处理程序删除或者添加HTTP头信息

发布时间 2023-07-07 18:06:16作者: 羊孩

当设置了全局的HTTP信息头,但是某个请求的Content-Type与全局信息头不一致,有以下几种处理方法。

场景一:在该请求下单独添加一个HTTP信息头管理器,设置局部的Content-Type

              注意:这种方法文件上传接口不适用,因为文件上传接口请求内容类型时直接勾选“对POST使用multipart/form-data”即可,如果单独添加HTTP信息头并设置Content-Type,会导致文件上传接口报500错误。

场景二:在该请求下添加beanshell预处理程序,使用脚本删除全局头信息和添加局部头信息,以文件上传接口为例

 beanshell预处理程序脚本:

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");
// 删除请求头指定的X-Token
sampler.getHeaderManager().removeHeaderNamed("X-Token");
// 打印删除指定请求头参数后的全部请求头信息
log.info("删除后请求头信息" + headers.getHeaders().getStringValue());

// new一个Header对象
//myHeader = new Header("Content-Type", "text/plain");
myHeader11 = new Header("X-Token", "${__P(qj)}");
// 添加Header到请求头管理器
//headers.add(myHeader);
headers.add(myHeader11);
// 打印添加后的请求头信息
log.info("添加后的请求头信息" + headers.getHeaders().getStringValue());

场景三:如果使用beanshell预处理程序删除全局头信息,然后在该请求下单独添加HTTP信息头,设置的局部头信息并不会生效,因为jmeter脚本执行的顺序是:执行全局的HTTP信息头>执行局部的HTTP信息头>执行beanshell预处理程序的脚本,最后会导致设置的局部HTTP头信息被beanshell预处理程序删掉。