之前讲了jmeter中beanshell脚本的使用,其实还可以借助beanshell来进行断言,这种断言方式相对响应断言、json断言来说更为灵活,可以自己构造想要断言的内容
先来看一下接口的场景:
接口A是一个新增数据接口,新增成功后,列表中的数据会多出1条,但是这个接口返回内容比较少,只有一个msg信息和状态码。
所以为了更好的断言,我打算每次新增前后都调一下查询接口,获取新增前后,列表中的数据总数,如果前后相差1,则认为新增成功;如果前后相等,则认为接口请求失败
开始尝试了json断言,如下
但是实际运行后,结果如下
所以后来尝试使用 beanshell 断言
import org.json.*; String responseData = prev.getResponseDataAsString(); //获取请求的返回结果 JSONObject response = new JSONObject(responseData); //log.info(response.getJSONObject("data").toString()); //log.info(response.getJSONObject("data").get("total").toString()); data = response.get("data").get("total")-1; // 新增成功后的数据总量减去1 //log.info(data.toString()); if (data.equals(${total1})) //判断新增一条数据后再减去1的值与新增前是否一致 { Failure=false ; // 如果相等,则断言成功 FailureMessage = "断言成功"; // log.info(data.toString()); } else { Failure=true; // 如果不相等,则断言失败 FailureMessage = "断言失败"; // log.info(data.toString()); }
data.equals(${total1}) 是判断data的值与total是否相等;
如果相等,则这个接口是成功的,我们期望这个断言标记为成功
beanshell使用Failure来标记失败,所以这里我们写 Failure=false ,表示不返回失败;
如果不想等,则接口调用失败,我们期望这个断言标记为失败
所以这里我们写 Failure=true ,返回失败;
FailureMessage是自定义的断言信息,当断言失败时,可以打印出结果
这样就断言就写好了,可以参考上述方式,从响应内容中提取想要的字段信息,来和预期结果进行比对。