JMeter之读响应求头的信息/写请求头

目录

读响应头

使用beanshell获取

使用正则表达式

写请求头

实际案例:

删除请求头


读响应头

使用beanshell获取

响应头原本为String类型,可以通过分割遍历组装成Map类型来提取响应头中的项:

import java.util.HashMap;
import java.util.Map;
//将字符串用换行符 截取为adc数组
String [] headersList = ResponseHeaders.split("\n");
Map headersMap = new HashMap();                     //创建HashMap来从新组装headers
for(int i=1;i<headersList.length;i++){
    String [] itemList=headersList[i].split(": ");  // 将每一条Header项按冒号分割,注意是有空格的
    headersMap.put((itemList[0]), itemList[1]);     // 分键值放入HashMap
}
String contentType = headersMap.get("Content-Type");   // 提取相应项
log.info("响应Content-Type:" + contentType)

使用正则表达式

写请求头

  • 重点该方法必须是JMeter先添加一个请求头管理器(里面有没有值没关系),不然会报错;添加一次后,若不删除,后续的请求都会有带有添加的请求头,下文有删除方法

  • 保存在csv的数据需以Json格式,同时需要进行转义 - 转义工具 ,如:

    {\"workbench-authorization\":\"${admin_authorization}\"}

示例:

import org.apache.jmeter.protocol.http.control.HeaderManager;
import org.apache.jmeter.testelement.property.CollectionProperty;
import org.apache.jmeter.protocol.http.sampler;
import org.apache.jmeter.protocol.http.control.Header;
import org.json.JSONObject;
//sampler 里面有个getHeaderManager 可以获得请求头
HeaderManager hm =sampler.getHeaderManager();
//打印出header信息
CollectionProperty cp=hm.getHeaders();
//System.out.println(cp);
for(int i=0;i<cp.size();i++){
	log.info("----------before-----------");
	log.info(cp.get(i)+"");
}
// 
//将header 转为jsonobject
String header = "{\"token\":\"${token}\"}";
JSONObject header_obj= new JSONObject(header);
Iterator it = header_obj.keys(); 
 
while(it.hasNext()){
// 获得key
	String key = it.next(); 
	String value = header_obj.getString(key);    
//	System.out.println("key: "+key+",value:"+value);
	Header hd = new Header();
	hd.setName(key);
	hd.setValue(value);
	//加入sample 中
	hm.add(hd);
}

//打印出对应值
log.info("----------after-----------");
for(int i=0;i<cp.size();i++){
	log.info(cp.get(i)+"");
}

添加请求头案例:

以下方法是实际执行接口自动化的一部分请求的处理 ,csv脚本header部分准备如下

 

import org.apache.jmeter.protocol.http.control.HeaderManager;
import org.apache.jmeter.protocol.http.control.Header;
import org.apache.jmeter.protocol.http.sampler;
import org.json.JSONObject;

//sampler 里面有个getHeaderManager 可以获得请求头
HeaderManager hm =sampler.getHeaderManager();
List CSVHeaderKey = new ArrayList();

//将header 转为jsonobject
String header = "${__eval(${__eval(${request_header})})}";
//log.info("前置2 - 添加请求头:CSV获取到要添加的请求头:"+header);

//CSV里面的request_header 不为空才添加
if (header != null && header.length() != 0)
{
	JSONObject header_obj= new JSONObject(header);
	Iterator it = header_obj.keys(); 
	while(it.hasNext()){
		//获得key
		String key = it.next(); 
		String value = header_obj.getString(key);    
		CSVHeaderKey.add(key);	//把添加的放到一个list,在后置处理器删除
		Header hd = new Header();
		hd.setName(key);
		hd.setValue(value);
		//加入sample中
		hm.add(hd);
	}
}
//用于后置处理器删除添加的header
//因为添加的请求头会用到下一个请求,当重复添加,请求头里就有多个同样的请求头,所以需要删除每次添加的请求头
vars.put("HeaderKey", CSVHeaderKey.toString());


删除请求头

为什么要删除:因为JMeter里每次添加请求头都是追加,跑接口时请求会添加多次,所以发起请求后需要再后置beanshell里进行删除。

import org.apache.jmeter.protocol.http.control.HeaderManager;

//因为添加的请求头会用到下一个请求,当重复添加,请求头里就有多个同样的请求头,所以需要删除每次添加的请求头
HeaderManager hm =ctx.getCurrentSampler().getHeaderManager();
//由String类型的List转成List
String arr = vars.get("HeaderKey");
String substring = arr.substring(1, arr.length() - 1);
String [] split = substring.split(", ");
List strings = Arrays.asList(split);

for (String key : strings) {
	hm.removeHeaderNamed(key);
//	log.info("后置3 - 删除前置添加的请求头的KEY:"+key);
}

踩坑小记
后置处理器不支持导入 sampler对象,但是可以直接在类里添加方法直接绕过,手动狗头。。。。。
如:ctx.getCurrentSampler() 是sampler类型,若想接收sampler类型而通过import org.apache.jmeter.protocol.http.sampler;导入sampler类就GG

但是!!!sampler 里面有个getHeaderManager方法,所以!!!可以直接这么写。ctx.getCurrentSampler().getHeaderManager()就可以直接获取请求头了。

参考api:

文章参考:beanshell内置方法获取header、url、参数等信息用于计算验签_一支吾猪的博客-CSDN博客

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值