性能测试工具 十二、Jmeter 断言 - 响应断言、Json 断言和 Beanshell 断言

Maple · 2020年09月28日 · 1927 次阅读

所谓断言,就是检查接口的返回是否符合预期。

自动化测试脚本,如果断言做的不好,就好比测试用例不写预期结果,因此我认为断言是最重要一部分。

关于如何做好断言,我觉得要做到:要断言的内容一定是唯一的,每个接口都要做断言。

举例

用例:新增一条数据,然后去列表查看新增是否成功。新增数据,如果成功返回数据 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 断言读者自己想想如何处理吧!

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册