Postman断言

目录

概述

断言工作原理

常用断言方法

Status code: Code is 200

Status code: Successful POST request

Status code: Code name has string

Response body: Contains string

Response body: JSON value check

 Response body: ls equal to a string

Response headers: Content-Type headercheck

Response time is less than 200ms

Response body: Convert XML body to a JSON Object

Use Tiny Validator for JSON data

示例

常规断言

示例1

示例2

示例3

动态参数断言

​全局断言


概述

一个完整的接口测试,包括:请求->获取响应正文->断言。其中,断言是对请求的响应结果进行操作,判断预期结果与实际结果是否一致。

在 postman 中封装了我们常见的断言(Tests),断言是用于验证API请求和响应的重要工具,Tests 除了可以作为断言,还可以当做后置处理器,常用作获取当前接口的响应,传递给下一个接口,以及控制多个接口间的执行顺序

断言用于验证HTTP请求的响应是否符合预期。通过断言,可以检查状态码、响应头、响应体等是否符合预期。在Postman中,可以使用各种断言方法来验证响应。

断言工作原理

常用断言方法

Postman帮我们把常用的断言方法给准备好了,右侧框内下拉选择,点击自动生成断言代码。

Status code: Code is 200

Status code:检查返回的状态码是否符合预期。

//检查响应状态码是否为200
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

常见状态码:

Status code: Successful POST request

断言成功的post请求返回码

pm.test("Successful POST request", function () {
    pm.expect(pm.response.code).to.be.oneOf([201, 202]);
});

Status code: Code name has string

检查响应信息中是否包含某个预期值

pm.test("Status code name has string", function () {
    pm.response.to.have.status("Created");
});

Response body: Contains string

Response body:检查响应体中是否包含指定的字符串或值。

//检查响应信息中是否包含某些指定的字符串
pm.test("Body matches string", function () {
    pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});

Response body: JSON value check

//检查从JSON响应中获取到某个字段,判断其是否与预期字段一致
pm.test("Your test name", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.value).to.eql(100);
});

 Response body: ls equal to a string

//检查实际获取的响应体(即 Body 信息)与预期结果的响应体是否一致
pm.test("Body is correct", function () {
    pm.response.to.have.body("response_body_string");
});

Response headers: Content-Type headercheck

Response headers:检查响应头是否包含指定的值。

//检查响应中的头域信息(Headers)是否与预期一致
pm.test("Content-Type is present", function () {
    pm.response.to.have.header("Content-Type");
});

Response time is less than 200ms

判断实际响应时间是否低于预期时间

//检查请求耗时小于200ms
pm.test("Response time is less than 200ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(200);
});

Response body: Convert XML body to a JSON Object

转化XML格式的响应成JSON对象

var jsonObject = xml2Json(responseBody);

Use Tiny Validator for JSON data

为JSON数据使用tiny验证器

var schema = {
    "items": {
        "type": "boolean"
    }
};

var data1 = [true, false];
var data2 = [true, 123];

pm.test('Schema is valid', function () {
    pm.expect(tv4.validate(data1, schema)).to.be.true;
    pm.expect(tv4.validate(data2, schema)).to.be.true;
});

示例

示例接口详细信息看前文:接口介绍

常规断言

示例1

断言一般包括状态断言和业务断言,如下图接口1是获取接口统一鉴权码token接口,它的关键字是access_token,采用Status code: Code is 200 检验响应状态码为200(成功),采用Response body: Contains string 检验响应中包含字符串"access_token"。

//状态断言
pm.test("检查返回状态码为200", function () {
    pm.response.to.have.status(200);
});
//业务断言
pm.test("检查响应中包含access_token", function () {
    pm.expect(pm.response.text()).to.include("access_token");
});

点击Send 按钮发送请求,点击Test Results 查看断言结果,下图可见测试点全部通过。

示例2

接口3是编辑标签接口,它的返回参数是errcode和errmsg,采用Response body: JSON value check

pm.test("检查errcode为0", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.errcode).to.eql(0);
});

示例3

使用Response headers: Content-Type headercheck 检查接口1响应头中是否包含Content-Type响应头,使用Response time is less than 200ms 检查接口响应时间是否低于200ms

pm.test("Content-Type is present", function () {
    pm.response.to.have.header("Content-Type");
});
pm.test("Response time is less than 200ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(200);
});

接口1响应头中包含Content-Type,结果通过;响应时间为332ms,高于200ms,结果失败。

动态参数断言

接口2是创建标签接口,它的关键字是标签名,前面已经将标签名使用自定义动态参数,将标签名加入自定义动态参数 {{times}} ,每次生成当前时间的时间戳,使得标签名不重复。结果报错,将自定义参数 {{times}} 当成字符串了。

解决上述问题,可以通过拼接全局变量的方式在断言中获取自定义动态参数来解决(前面已经将{{times}}设为全局变量)

①+pm.globals.get("times")

pm.test("检查响应中包含标签名", function () {
    pm.expect(pm.response.text()).to.include("码尚教育"+pm.globals.get("times"));
});

②+globals["times"]

pm.test("检查响应中包含标签名", function () {
    pm.expect(pm.response.text()).to.include("码尚教育"+globals["times"]);
});

 ③+globals.times

pm.test("检查响应中包含标签名", function () {
    pm.expect(pm.response.text()).to.include("码尚教育"+globals.times);
});

全局断言

例如:每个接口都要进行状态断言,就可将状态断言设置为全局断言

发送请求后,每个接口的Test Results ,都有测试点状态码200通过。

参考:

码尚Postman学习

postman第7讲-核心功能六:Tests(断言)

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值