美文网首页
2020-05-27postman常见断言方式

2020-05-27postman常见断言方式

作者: testerPM | 来源:发表于2020-05-27 16:48 被阅读0次

前言: Postman 中提供了一系列的断言,不过都是通过提供预设的 JavaScript 语言代码来实现的。要使用 Postman 的断言,需要稍微有那么一点 JavaScript 基础。

响应结果断言:

Response body: Contains string
响应结果是否包含字符串;
Response body: JSON value check
响应结果如果是 JSON,检查具体的 JSON 值;
Response body: Is equal to a string
响应结果与字符串是否全部匹配预期的字符串;

1. Response body: Contains string

用来断言响应结果是否包含某字符串。可以认为是预期结果是否包含在实际结果中。比如我们的案例 showdoc 中有一个接口 /api/user/info,其返回值如下:


{
    "error_code": 0,
    "data": {
        "uid": "1",
        "username": "showdoc",
        "email": null,
        "name": "Nemo",
        "avatar": null,
        "avatar_small": null,
        "groupid": "1"
    }
}


那我们如果这个接口没有问题,获取用户资料成功,结果中就应该包含showdoc和Nemo的字符串。那么我们就可以使用Contains string来断言。
直接在 Postman 的 Tests 栏右侧点击Response body: Contains string会出现预设代码:


image.png

我们可以看到点击之后出现了一段 JavaScript 代码段。看到代码不要惊慌,我们不需要去动这段代码,我们只需要修改图中 ①②两个部分的内容。这两个部分都是由引号包裹起来的字符串。

① 表示断言标题,也就是你这个断言的目的是什么,主要是方便后续在运行时可以分辨出测试目的;
② 表示你的预期结果,也就是你预期结果中出现什么内容。
这里,我们预期结果中出现 showdoc和Nemo,那就需要写两条断言:

// 注意两段引号中的内容
pm.test("判断用户名showdoc是否包含于响应结果", function () {
    pm.expect(pm.response.text()).to.include("showdoc");
});
pm.test("判断用户姓名Nemo是否包含于响应结果", function () {
    pm.expect(pm.response.text()).to.include("Nemo");
});


写好后,运行一下。


image.png

可以看到,在下方的 Test Results 中会展示断言的结果,PASS 或者 FAIL.

这种断言方式可以用在任何地方,任意文本格式的数据。但是要注意使用的时候,慎重选取包含的内容,也就是预期结果。比如下面的一个接口返回值,预期结果选择中文就不行

接口返回如下:



{
"code": "SUCCESS",
"data": {
"content": [
            {
"applyId": "58",
"prodId": "00e375be4dda467ba6140e99ac68404c",
"prodName": "卓越七十一号",
"accountNatureId": "586",
"accountNatureName": "定期账户",
"fristAccountOpenBiz": "591",
"fristAccountOpenBizName": "协议存款",
"accountOpeningDepartmentName": "营运部",
"accountOpeningPerson": "742",
"accountOpeningPersonName": "鲁鲁",
"bankId": "014",
"applyTypeId": "608",
"applyTypeName": "邮件发送",
"applyRemark": "尽快完成开户审批流程",
"status": "2",
"verifyUserId": "lulu",
"verifyUserName": "鲁鲁",
"verifyTime": "2020-05-27 15:24:51",
"auditingUserId": "lulu",
"auditingUserName": "鲁鲁",
"crtTime": "2020-05-27 14:35:15",
"creator": "lulu",
"updateTime": "2020-05-27 15:24:50",
"updateUser": "lulu",
"del": false
            }
       ],
"pageable": {
"sort": {
"unsorted": false,
"sorted": true
            },
"pageSize": 1,
"pageNumber": 0,
"offset": 0,
"paged": true,
"unpaged": false
     },
"totalPages": 58,
"totalElements": 58,
"last": false,
"first": true,
"sort": {
"unsorted": false,
"sorted": true
        },
"numberOfElements": 1,
"size": 1,
"number": 0
    }
}

断言代码如下:

pm.test("响应结果包含产品名字", function () {
    pm.expect(pm.response.text()).to.include("卓越七十一号");
});

执行结果如下:

从报错信息看,响应体中的中文全部都是被转义了,现实中文是Unicode编码。而pm.response.text()),转成了text,是ASCII

至于通过json键值为什么能获取到中文,是因为使用的是json()方法自带转义

pm.test("获取json返回的键值进行断言", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.data.content[0].prodName).to.eql("卓越七十一号");

});

2. Response body: JSON value check

这个方法,稍微难一点,其用途是将 JSON 格式的响应结果转换成 JavaScript 对象 ,然后指定其中某一个字段的值进行断言。

简单来说,就是预期某一个具体字段的值是否符合预期,是一种更精确的断言方式。缺点是只支持响应结果为 Json 格式的接口。

同样,我们在右侧点击Response body: JSON value check,会出现如下代码段:


image.png

这里比 contains string 断言方式对了一个需要关注的地方。

① 断言标题
② 预期结果
③ 指定断言的字段
这里比较麻烦的是第三点jsonData.value的意思。

要明白jsonData.value,我们首先要明白 jsonData 怎么来的。

我们看预设代码中的第二句var jsonData = pm.response.json();

在 Postman 中有一个内置的 JavaScript 库 pm, 里面提供了请求处理过程中的很多函数。pm.response是指当前请求接收到的响应 body 内容(不能理解的同学先看看 HTTP 内容)。这里接口的响应 body 是一个 json 字符串,也就是我们上面展示的返回值。
json()方法是把 JSON 字符串转换为 JavaScript 对象。

至此,var jsonData = pm.response.json(); 变量 jsonData 相当于就是一个 JavaScript 对象。我们可以打印出来看看,当然要想看到打印结果需要使用快捷键(Ctrl+Alt+C)打开Postman Console


image.png

我们可以看到,打印出来的 jsonData 是一个 JavaScript 对象,其中包含了响应结果的所有内容。

那么预设代码的第三点,就是要通过 jsonData 里面的对象层级来提取对应字段的值去和预期结果做比较。

比如,我依然想判断 username 字段的值预期是否为 showdoc。那就需要从 jsonData 变量中提取出来。但是我们发现 username 字段是在 data 内部。当然这里不是很直观,我们可以在 Postman 上看。


image.png

我们提取时,需要用jsonData.data.username来提取 username 的值,也就是说需要按层级来。
如果想取 error_code 的话,直接写为jsonData.error_code即可。

我们的断言代码就可以写为:

// 注意观察我们标注出的三个部分代码的变化
pm.test("判断username字段的值是否为showdoc", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.data.username).to.eql('showdoc');
});


最后,如果你是断言数值类型的话,第三句的 eql()函数还有其他几种用法:

eql 等于
lt 小于
lte 小于等于
gt 大于
gte 大于等于

3. Response body: Is equal to a string

最后一种常用的,是预期结果与实际结果完全匹配。注意是完全哦,符号、空格都不能有区别


image.png

代码如下:

pm.test("响应结果是否完全符合预期", function () {
    pm.response.to.have.body('{"error_code":0,"data":{"uid":"1","username":"showdoc",\
"email":null, "name":"\\u61d2\\u732bNemo","avatar":null,"avatar_small":null,"groupid":"1"}}');
});


这里要注意两点:

1.由于 JSON 格式要求必须使用双引号,因此在外面要使用单引号;
2.如果遇到中文,会以 ASCII 字符表示(如懒猫,\u61d2\u732b),需要使用反斜杠“\”转义。

转载:https://blog.csdn.net/minzhung/article/details/102492705?from=timeline&isappinstalled=0

遗留问题:

postman contains String 断言, 如何解决返回值有unicode编码?即如何把unicode编码转成中文??

相关文章

  • 2020-05-27postman常见断言方式

    前言: Postman 中提供了一系列的断言,不过都是通过提供预设的 JavaScript 语言代码来实现的。要使...

  • Assertions

    断言(assertions)表明以某种方式会存在匹配,包括先行断言(look-ahead)、后行断言(look-b...

  • python unittest.TestCase 断言方法

    1、最常见断言方法 2、T与异常、错误、警告和日志相关的断言方法 3、用于完成某种特定检查的断言方法 4、针对特定...

  • [接口测试_B] 03 Pytest断言处理_assert和异常

    Pytest的断言方式及应用场景 使用assert语句 断言预期的异常 断言预期的告警 利用上下文信息进行断言 自...

  • unittest--断言

    断言方式页面链接地址(URL),页面标题(title),元素文本等。 常用断言

  • Pytest学习笔记2-断言

    1. 断言 断言语句是什么?断言语句是将调试断言插入程序的便捷方式: 简单的形式, 相当于assert expre...

  • golang类型转换与断言

    使用方式: 总结:相似:都是右边有括号。区别:断言有. 类型转换demo: 断言demo:

  • postman-常见断言

    1、Setting an environment variable (设置一个环境变量)pm.environme...

  • Hello Gradle 任务

    多种方式创建任务 多种方式访问任务 任务分组和描述 任务排序 任务的启用和禁用 任务的onlyIf断言 断言就是一...

  • java自动化测试框架第五篇-如何处理断言

    方式一:接口返回值断言 1. 断言code和msg 2. 断言返回值中list格式中的内容 3. 断言返回值中ob...

网友评论

      本文标题:2020-05-27postman常见断言方式

      本文链接:https://www.haomeiwen.com/subject/jbnwahtx.html