十二、Jmeter断言-响应断言、Json断言和Beanshell断言
所谓断言,就是检查接口的返回是否符合预期。
自动化测试脚本,如果断言做的不好,就好比测试用例不写预期结果,因此我认为断言是最重要一部分。
关于如何做好断言,我觉得要做到:要断言的内容一定是唯一的,每个接口都要做断言。
举例
用例:新增一条数据,然后去列表查看新增是否成功。新增数据,如果成功返回数据id,如下:
{ "id": "63c81f8c-ba80-4504-ac1d-66f3774307b2", "msg":"ok", "code":0 }
列表数据返回如下:
无数据 { "data": [] } 有数据 { "data": [ { "id": "63c81f8c-ba80-4504-ac1d-66f3774307b2", "name": "zhangsan" } ] }
如何要断言列表中存在我新增的数据?错误断言:断言data,不管是否存在我们要的数据,返回内容都包含data正确断言:从新增接口提取返回的ID,然后断言ID出现在列表中注意:如果id是自增形式的,建议使用json断言,在这里json断言是首选
实现断言的三种方式
我们首先要把新增接口的id提取出来,用到json提取器,具体配置见下图
JSON断言
json断言配置如下,取出列表所有数据的id看是否存在新增返回的id
关于json断言配置解释,在前面文章已经有介绍。
响应断言
通过响应断言进行断言预期,只需要判断列表数据中出现id,配置如下
关于响应断言配置解释,在前面文章已经有介绍。
Beanshell断言
Beanshell断言在实际运用的比较少,除非是结果需要经过处理后进行断言才用得到,本文为了举例,用Beanshell断言实现我们的目的,配置如下
附上脚本源码
import org.json.*; //获取上一个请求的返回值 String response = prev.getResponseDataAsString(); //将返回值转换为json JSONObject responseJson = new JSONObject(response); //从json提取data数组 JSONArray dataList = responseJson.getJSONArray("data"); //遍历所有列表,判断是否存在id for(i==0;i<dataList.length;i++){ JSONObject item = dataList[i]; if(item.get("id")==${id}){ Failure = false; FailureMessage = "存在新增的id"; break; } else{ Failure = true; FailureMessage = "不存在新增的id"; } }
补充
假如我们执行删除数据后,我们需要断言不存在于列表
响应断言取反
json断言取反
Beanshell断言读者自己想想如何处理吧!