文章介绍了在JMeter中,如何使用BeanShellPostProcessor结合prev对象对接口响应进行处理。prev对象提供了访问前一次采样结果的方法,如获取请求头、响应码、响应内容等。同时,文章解释了Content-Type头字段的组成部分——媒体类型和字符集,以及SamplerData代表的RequestBody内容。
摘要由CSDN通过智能技术生成
有时候需要在BeanShell PostProcessor中,对接口响应进行一些判断或处理,这时就需要用到Jmeter的prev对象来做一些操作。
-
prev 在JMeter中是一个对象,它代表了前一次采样结果的各种信息,可以通过它获取前一次采样结果的响应时间、响应码、响应内容等等
-
prev对象 属于SampleResult类,映射的是org.apache.jmeter.samplers.SampleResult
-
prev 用于后置处理器、断言
其常用的一些方法有:
String requestHeaders= prev.getRequestHeaders(); //获取请求头
String urlString= prev.getUrlAsString(); //获取URL
String responseCode= prev.getResponseCode(); //获取响应码
String responseHeaders= prev.getResponseHeaders(); //获取响应头
String contentType= prev.getContentType(); //获取响应体类型
String dataType= prev.getDataType(); //获取DataType
String mediaType= prev.getMediaType(); //获取Content Type中的media type
byte[] responseData=prev.getResponseData(); //获取响应体的字节流
String responseDataString=prev.getResponseDataAsString(); //获取响应体字符串
String samplerData= prev.getSamplerData(); //获取请求内容
1、关于 Data Type、Content Type、MediaType的说明
Content-Type是HTTP协议中的一个头部字段,用于标识请求或响应中所携带的实体的类型。
它由两部分组成,分别是媒体类型(Media Type)和字符集(Charset):
- 媒体类型:用于描述当前实体的类型。常用的媒体类型包括text、image、audio、video等,具体的可以参考IANA的媒体类型注册表。
- 字符集:用于描述当前实体所使用的字符编码。常用的字符集有UTF-8、GB2312、ISO-8859-1等。
2、关于 SamplerData的说明:
SamplerData对应结果中Request Body中的整个内容
> 更多的信息,如增加或设置相关内容,可以查看Jmeter的官方在线文档:
SampleResult (Apache JMeter dist API)
> 或者查看本地Jmeter安装目录下的docs\api的接口文档
最近测了几个前端的项目,发现它们都有一个共同点:应用所在服务器的网卡上行(trans)非常大——经常是 117 MB/S,这已经逼近了千兆网卡的极限了。下面记录下排查和解决过程:
一. jmeter 客户端启用gzip压缩
1. 使用jmeter的查看结果树,发现单次请求的返回都在 220KB以上
2. 查看应用的nginx服务器配置,发现已经启用gzip压缩,那问题是在哪里呢?
Http接口返回的数据,一般都是json格式的,如果需要提取出其中的某个数据,作为后续其他接口的入参,那么可以使用json提取器。
从接口中提取一个数据
以登录接口为例,当登录成功后接口会返回一个token,如下图所示这样的,后续其他接口会使用该token作为header入参使用
那么在jmeter的http请求下,新添加一个json提取器
json提取器中进行如下配置:
其中$,代表根元素
其中$.data.id,就代表我要获取到的参数
将获取到的值赋给变量token,那么后续的接口中就可以使用${
long endTime = System.currentTimeMillis();
long responseTime = endTime - vars.get("startTime");
vars.put("responseTime", String.valueOf(responseTime));
该脚本将获取当前时间的毫秒数并将其存储在变量endTime中,然后将响应时间计算为endTime减去startTime,并将其存储在变量responseTime中。最后,将responseTime存储在JMeter变量中,以便在测试报告中使用。
5. 最后,在你的JMeter计划中添加一个Summary Report元素,并选择要包含在报告中的响应时间变量。
这样,你就可以使用BeanShell来处理JMeter的响应时间。