【JMeter】beanshell 获取/修改请求头信息

在使用jmeter做接口测试的时候,相信大家一定遇到过以下场景:使用HTTP信息头管理器设置全局请求头信息,如:content-type = application/json,但并非所有的接口的content-type都是application/json,那么该怎么更改已有请求头信息呢?如果请求头参数不适用于某个请求,需要删除,又该怎么处理呢?

场景一:可以直接在该请求下添加HTTP信息头管理器,设置所需要的请求头参数,如 content-type = text/plain ,发送请求时使用的就是该请求自己下面的HTTP信息头管理器设置的请求头参数

 

场景二:此时需要使用beanshell预处理程序要删除不需要的请求头参数(jmeter提供了HeaderManager对象,可以操作请求头信息)

import org.apache.jmeter.protocol.http.control.HeaderManager;
// 获得请求头信息
HeaderManager headers = sampler.getHeaderManager();
// 打印删除指定请求头参数前的全部请求头信息
log.info("删除前" + headers.getHeaders().getStringValue());
// 删除请求头指定的信息
sampler.getHeaderManager().removeHeaderNamed("Content-Type");
// 打印删除指定请求头参数后的全部请求头信息
log.info("删除后" + headers.getHeaders().getStringValue());

 

场景三:在一系列的请求中,可能前面的请求都不需要全局HTTP信息头管理器中设置的某个请求头参数,但是后续的请求是需要的,此时,可能会这样做:使用beanshell前置处理程序将不需要的请求头参数删除,然后在需要该参数的请求下添加HTTP信息头管理器,在其中设置该参数即可。但这样是有问题的:在执行时,是先执行HTTP信息头管理器,然后在执行beanshell前置处理程序的,所以执行删除请求头参数时会将单独给所需要参数的请求设置的参数一并删除,导致在需要该参数的请求下添加HTTP信息头管理器设置的参数不生效,如下图。

所以,解决方法只能是再在该请求下添加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());
// new一个Header对象
myHeader = new Header("x-parse-session-token", "${sessionToken}");
// 添加Header到请求头管理器
headers.add(myHeader);
// 打印全部请求头信息
log.info("添加后" + headers.getHeaders().getStringValue());

posted @ 2022-05-09 19:54  潘潘达  阅读(2565)  评论(0编辑  收藏  举报