Jmeter中Beanshell断言的使用
响应断言较为常用,它是通过检查sampler的请求内容和响应结果中是否匹配指定的字符串来判断结果是否正确。响应断言简单实用,能够解决工作中的大部分问题。但是有的情况,如自动化监控等,获取列表是否有新数据,并不能满足我们的复杂断言。
现在以我爱卡最新主题列表接口为例,简述beanshell的使用与优点。
BeanShell断言可以使用beanshell脚本来执行断言检查,可以用于更复杂的个性化需求,使用更灵活,功能更强大。
BeanShell断言主要通过Failure和FailureMessage来设置断言结果。
分析场景
这里以某社区的最新贴列表为例:
为了能够得知是否在一定时间内有新帖发出,我们可根据最新贴的发布时间与当前时间的差值,判断是否小于规定时间,来判断发帖功能是不是正常,一定时间内是否有新帖发出,应该分析出接口返回字段之间的关系。

我们需要用到的字段是 code,date,dateline
code:用来判断返回结果类型,判断当前情况
date:发出该请求的时间
dateline:该条帖子的发出时间
.判断情况,编写脚本
首先我们需要分析一下场景
import org.json.*;
//获取上一个请求的返回状态码
String status = prev.getResponseCode();
log.info(“status=”+ status);
if (status.equals (“200”)){
//获取上一个请求的返回值
String response = prev.getResponseDataAsString();
//将返回值转换为json
JSONObject respone_json = new JSONObject(response);
//获取外层的date
String date = respone_json.get(“date”).toString();
String code = respone_json.get(“code”).toString();
log.info(“date=”+date);
log.info(“code=”+code);
if (code.equals (“200”)){
//获取data
JSONObject data_object = respone_json.getJSONObject(“data”);
//获取data中的list数组
JSONArray json_list = data_object.getJSONArray(“list”);
String dateline= “”;
if (json_list.length() != 0){
JSONObject jsonTemp = (JSONObject)json_list.getJSONObject(0);
dateline= jsonTemp.get(“dateline”).toString();
}else {
dateline= “0”;
}
log.info(“dateline=”+dateline);
int date_int = Integer.parseInt(date);
log.info(“date_int=”+ date_int);
int dateline_int = Integer.parseInt(dateline);
log.info(“dateline_int=”+dateline);
int x = date_int - dateline_int;
log.info(“请求差值:”+x);
if(x > 3600){
Failure = true; //Failure标识为是否失败,=true时表示失败,=false表示正确
FailureMessage = “已经超过1小时没有发布新主题了!”;
}else{
Failure = false;
}
}else{
Failure = true;
FailureMessage = “服务器返回code为:” + code;
}
}else {
Failure = true;
FailureMessage = “服务器错误,访问状态码为:” + status;
}

3.查看运行结果


