目的
获取响应头的字段值
以下面的取样器响应头为例,演示如何取响应头字段X-AL-HTTP-Response-Header-Time的值 173.744ms
方法1:正则表达式提取
最简单,直接在请求下面增加一个后置处理器:正则表达式提取器
利用debug sampler检查提取结果
方法2:利用beanshell
在请求下面增加一个后置处理器:Beanshell后置处理程序
在beanshell中获取响应头方法:prev.getResponseHeaders(),获取到的是响应头的全部,是一个字符串。
其中第一行为状态码 HTTP/1.1 200 OK,换行后的数据都是以冒号区分的键值对,我们只存这部分内容。
再通过split()函数通过换行分隔符"\n"将每一个参数和值存放在数组hlist中,这时候数组hlist中应该是[HTTP/1.1 200 OK, Date: Fri, 18 Nov 2022 03:25:24 GMT, Content-Type: text/html; charset=utf-8, Content-Length: 81779, Connection: keep-alive,…]类似如此,在遍历整个hlist数组时,再次使用split函数通过分隔符“:”将参数和值存入哈希表,形成键值对,到时候直接根据键取值即可。
具体实现代码
import java.util.HashMap;
import java.util.Map;
String ResponseHeaders = prev.getResponseHeaders();
log.info(ResponseHeaders);
String[] hlist=ResponseHeaders.split("\n"); //将响应头用split拆分存入数组hlist
log.info(Arrays.toString(hlist));
hlistlen=hlist.length; //获取数组长度,计算数组长度时用length,而不是length()
log.info(hlistlen.toString());
Map headersMap=new HashMap(); //创建一个HashMap来重新组装headers
log.info("第"+0+"个:"+hlist[0]);
for(i=1;i<hlistlen;i++){ //遍历数组,从索引1开始
log.info("第"+i+"个:"+hlist[i]); //打印单个数组元素
String[] itemlist=hlist[i].split(":"); //将数组元素按冒号分隔
headersMap.put(itemlist[0],itemlist[1]); //将分隔的数组元素作为键、值存储
}
log.info(headersMap.toString()); //打印哈希表
rt=headersMap.get("X-AL-HTTP-Response-Header-Time"); //获取ResponseTime值,
log.info("ResponseTime值为===="+ rt);
String[] rtt=rt.split(" "); //去掉后面多余字符串
log.info(rtt[0]);
如果想获取HashMap长度以及遍历整个键、值
log.info("HashMap的元素个数为:"+headersMap.size()); //获取键值对个数
log.info(String.valueOf(headersMap.keySet())); //获取所有键KeySet(),类型为集合[]
log.info(String.valueOf(headersMap.values()));
for(String key:headersMap.keySet()) { //遍历,获取所有的键、值
log.info("key is "+key+", value is "+headersMap.get(key));
}