我们检验一个测试用例是否通过,一般会将我们心理预期的结果与实际结果进行比对,如果结果一致则证明测试通过,如果结果不一致,则证明测试不通过,这即是我们经常所说的断言。

1、Tests的介绍

Postman中的断言是使用请求后脚本Tests,是对状态码、响应头、响应正文等信息进行断言操作。

在Postman中封装了我们常见的断言代码片段,当然Tests除了可以作为断言,还可以当做后置处理器。

经常应用于:

  1. 断言。
  2. 获取当前接口的响应数据,传递给下一个接口。

提示:在一个请求或者一个集合都可以定义Tests,在集合中定义Tests,表示集合中的每一个请求响应后,都需要执行Tests中的断言脚本。

点击请求中的Tests标签项,如下图:

我们可以在上图看到,在Tests标签页的右侧边栏中,Postman为我们提供了一些常用的代码模版。

提示我们:

Test scripts are written in JavaScript, and are run after the response is received.
测试脚本用JavaScript编写,并在收到响应后运行。 Learn more about tests scripts
点击这里,可以学习更多关于测试脚本的资料。

学习关于Tests的更多用法,请进入后面链接:https://go.pstmn.io/docs-test-scripts

总结

(1)Postman测试沙箱的执行顺序

  1. 在发送Request之前,执行Pre-request Script中的js脚本,可定制化Request(准备数据)。
  2. 收到Response之后,执行Tests中的脚本,处理返回的数据(断言或者处理数据)。

整个流大概是这样的:

(2)Postman中Tests的作用

  1. 做断言:可以断言状态码或者断言返回数据中的字段。
  2. 取返回值:做流程接口的时候,向下传递返回数据。

2、常用SNIPPETS(片段)说明

(1)常用变量相关

  • Get an environment variable:获取一个环境变量。
  • Get a gloval variable:获取一个全局变量。
  • Get a variable:获取一个变量(本地)。
  • Set an environment variable:设置一个环境变量。
  • Set a global variable:设置一个全局变量。
  • Clear an environment variable:清空一个环境变量。
  • Clear a global variable:清空一个全局变量 。

使用

  • 获取变量:如果在下一个请求中用到上一个请求的返回值,可以使用“设置一个环境变量”,将请求的返回值设置为环境变量,在下一个请求中,使用“获取一个环境变量”取到该值。
  • 清空变量:这里的清空等于删除变量,一个参数使用完成后,需要删除,或者清空值都可以使用该方法。

(同前一篇Pre-request Script的使用方式一样)

(2)状态码相关

  • Status code: Code is 200 :判断状态码是否正确;默认判断状态是否为 200, 可修改。
    pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
    });
  • Status code:Successful POST request

    判断状态码是否为预期结果之一;比如默认断言状态码是否是 201, 202 中的一个。
    pm.test("Successful POST request", function () {
    pm.expect(pm.response.code).to.be.oneOf([201, 202]);
    });
  • Status code:Code name has string

    判断状态码描述是否包含字符串,比如是否包含 Created。
    pm.test("Status code name has string", function () {
    pm.response.to.have.status("Created");
    });

(3)响应结果断言:

  • Response body: Contains string

    响应结果是否包含字符串;

    注意:这只能检查Response body中raw格式展示的返回数据,如果raw格式展示的返回数据中,有中文数据未解码,也只能匹配未解码形式的内容,且匹配包含不唯一(工作中很少见,一般接口返回数据中不会设计重复字段)。
    pm.test("Body matches string", function () {
    // 比如raw中的数据,“学院”没有进行Unicode解码,就只能如下方式进行比对。
    pm.expect(pm.response.text()).to.include("例如:\u5b66\u9662");
    });
  • Response body: JSON value check

    响应结果如果是 JSON格式的数据,检查具体的 JSON字段的值;

    实际工作中基本就用这个方式。(下面有练习好好看看)
    pm.test("Your test name", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.value).to.eql(100);
    });
  • Response body: Is equal to a string

    响应结果与字符串是否全部匹配预期的字符串;

    就是在把Response body的数据用raw格式展示,然后全部复制到下面位置。
    pm.test("Body is correct", function () {
    pm.response.to.have.body("raw格式展示的返回数据,全部复制到这里");
    });
  • Response body: Convert XML body to a JSON Object

    将 XML 转换成 JSON;
    var jsonObject = xml2Json(responseBody);

等等还有很多,用的时候我们可以查看相关文档。

(4)Header :

Response headers:Content-Type header check

响应头部中是否包含字段,代码片段如下:

pm.test("Content-Type is present", function () {
pm.response.to.have.header("Content-Type(这里填写请求头属性)");
});

(5)响应速度:

Response time is less than 200ms

响应时间是否少于多少 ms。

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

3、示例

(1)响应码断言

我们以“添加学院测试为例”

1)准备数据

Pre-request Script编辑如下代码,来准备数据

// 随机生成一个3位数字的id
var dep_id = Math.floor(Math.random()*1000);
pm.environment.set("depid" , dep_id); //设置到环境变量中 // 随机生成学院名称dep_name
// 随机生成一个10位的字符串
var data = Math.random().toString(36).slice(-10) ;
var dep_name = data+"学院";
pm.environment.set("dep_name" , dep_name);//设置到环境变量中 // 随机生成院长的名字
var first_name = ["赵","钱","孙","李","刘"];
var last_name = ["子鼠","丑牛","寅虎","牟兔","辰龙","巳蛇"];
var master_name = first_name[Math.floor(Math.random() * (first_name.length))] +last_name[Math.floor(Math.random() * (last_name.length))];
pm.environment.set("master_name" , master_name);//设置到环境变量中 // 随机生成口号
var slogan_str = ["吃饭","睡觉","打豆豆"];
var slogan = slogan_str[Math.floor(Math.random() * (slogan_str.length))];
pm.environment.set("slogan" , slogan);//设置到环境变量中 // 很low的代码,只做练习

2)编辑请求所要提交的数据

3)编写Tests中的断言

使用Tests中的Status code: Code is 200内置代码片段。

// 用来断言接口请求的状态码,针对HTTP协议状态码。
// pm.test 表示Postman进行测试断言
// "Status code is 200" 表示断言的名称或者说明,一般和测试用例同名
// function 表示 执行断言的方法
pm.test("新增学院请求正常放回201", function () {
pm.response.to.have.status(201);
});

4)查看断言结果

如下图:

提示:

Test Results(1/1):表示一共有1个断言,执行通过了1个断言。

All:表示显示所有断言。

Passed:表示只显示通过的断言。

Skipped:表示只显示跳过的断言。

Failed:表示只显示失败的断言。

当我们断言执行失败时,也会有详细提示,如把上面的状态码改成202。

AssertionError: expected response to have status code 202 but got 201

AssertionError:预期响应的状态码为202,但得到201。

(2)返回值断言(非常频繁)

返回值断言,就是对接口返回的数据(body主体)中的字段进行验证。

以返回值为json格式的数据为例:

这里先标识一下,接口的实际返回结果如下:

{
"create_success": {
"count": 1,
"results": [
{
"dep_id": "637",
"dep_name": "k7iwvtgk2h学院",
"master_name": "李子鼠",
"slogan": "睡觉"
}
]
},
"already_exist": {
"count": 0,
"results": []
}
}

同上面练习,直接编写Tests中的断言,

使用Tests中的Response body: JSON value check内置代码片段。

// 断言返回值为json格式的数据
// pm.test 表示Postman进行测试断言
// "Your test name" 表示断言的名称或者说明,一般和测试用例同名
// function 表示 执行断言的方法
// jsonData 表示接口返回的所有数据
// pm.expect 表示设置断言的预期
// jsonData.value 表示取具体的某一字段,一级一级点下去就可以(层级关系)
pm.test("断言添加学院数量", function () {
var jsonData = pm.response.json(); // 获取返回值所有数据
pm.expect(jsonData.create_success.count).to.eql(1); // 断言返回值中具体字段的值
});

然后执行并查看结果:

说明

如果结果返回的json数据中有数组,如下:我们要取slogan字段

{
"create_success": {
"count": 1,
"results": [
{
"dep_id": "637",
"dep_name": "k7iwvtgk2h学院",
"master_name": "李子鼠",
"slogan": "睡觉"
}
]
},
"already_exist": {
"count": 0,
"results": []
}
}

需要如下方式进行选取:

pm.test("断言添加学院的口号", function () {
// 获取返回值所有数据,赋值给jsonData
var jsonData = pm.response.json();
// 可以使用console.log在控制台输出内容,进行调试
// console.log(jsonData.create_success.results[0].slogan)
// 断言返回值中具体字段的值
pm.expect(jsonData.create_success.results[0].slogan).to.eql("哈哈哈"); //这里是重点
});

其他代码片段使用方式同理,这里就不一一举例了。其实Tests中编写的就是JavaScript脚本,你也可以编写循环、判断、输出到控制台等代码。

『政善治』Postman工具 — 9、在Postman中使用断言的更多相关文章

  1. 『政善治』Postman工具 — 1、Postman介绍与安装

    目录 一.Postman介绍 二.Postman下载与安装 1.Postman下载 2.Postman安装 3.为什么要注册Postman账号 一.Postman介绍 Postman是一款非常流行的H ...

  2. 『政善治』Postman工具 — 2、Postman主界面详细介绍

    目录 1.Postman菜单栏 (1)File 菜单 (2)Edit 菜单 (3)View 菜单 (4)Help 菜单 2.Postman工具栏 3.Postman工具栏中的系统设置 4.Postma ...

  3. 『政善治』Postman工具 — 10、Postman中对Cookie的操作

    目录 1.往常的Cookie处理方式 2.Postman中的Cookie管理机制 3.自定义Cookie管理内容 在接口测试中,某些接口的调用,需要带入已有Cookie,比如有些接口需要登陆后才能访问 ...

  4. 『政善治』Postman工具 — 8、Postman中Pre-request Script的使用

    目录 1.Pre-request Script介绍 2.常用SNIPPETS(片段)说明 (1)获取变量脚本: (2)设置变量脚本: (3)清空变量脚本: (4)Send a request代码片段 ...

  5. 『政善治』Postman工具 — 12、Postman中实现数据驱动

    目录 1.什么是数据驱动? 2.测试集说明 3.创建请求与准备数据文件 (1)新增学院结果文档内容如下 (2)编写数据文件 (3)在Postman中创建请求 4.实现Postman中的数据驱动 步骤1 ...

  6. 『政善治』Postman工具 — 13、Postman接口测试综合练习

    目录 (一)项目接口文档 1.鉴权接口 2.注册接口 3.登录接口 4.用户信息接口 5.注销接口 (二)网站上手动验证 (三)Postman测试实现 1.准备工作 (1)创建一个Collection ...

  7. 『政善治』Postman工具 — 14、NewMan工具的使用详解

    目录 1.NewMan工具的介绍 2.NewMan的安装 (1)安装 (2)验证NewMan环境: (3)NewMan卸载命令 3.NewMan执行Postman测试集 (1)导出collection ...

  8. 『政善治』Postman工具 — 4、HTTP请求基础组成部分介绍

    目录 1.Method 2.URL 3.Headers 4.body 一般来说,所有的HTTP Request都有最基础的4个部分组成:URL. Method. Headers和body. 1.Met ...

  9. 『政善治』Postman工具 — 7、Postman中保存请求(Collections集合)

    目录 1.创建Collection 2.保存Request请求 3.查看保存的请求 4.Collection下还可以创建文件夹 5.补充:Postman中的变量 6.总结 1.创建Collection ...

随机推荐

  1. 2019 南京网络赛 B super_log 【递归欧拉降幂】

    一.题目 super_log 二.分析 公式很好推出来,就是$$a^{a^{a^{a^{...}}}}$$一共是$b$个$a$. 对于上式,由于指数太大,需要降幂,这里需要用到扩展欧拉定理: 用这个定 ...

  2. Codeforces Round #575 (Div. 3) D2. RGB Substring (hard version) 【递推】

    一.题目 D2. RGB Substring (hard version) 二.分析 思路一开始就想的对的,但是,用memset给数组初始化为0超时了!超时了! 然后我按照题解改了个vector初始化 ...

  3. 3.学习numyp的矩阵

    Numpy提供了ndarray来进行矩阵的操作,在Numpy中 矩阵继承于NumPy中的二维数组对象,但是矩阵区别于数组,不可共用数组的运算规律 一.创建矩阵 import numpy as np m ...

  4. 解析分布式应用框架Ray架构源码

    摘要:Ray的定位是分布式应用框架,主要目标是使能分布式应用的开发和运行. Ray是UC Berkeley大学 RISE lab(前AMP lab) 2017年12月 开源的新一代分布式应用框架(刚发 ...

  5. codefoces B - Phoenix and Beauty

    原题链接:https://codeforc.es/problemset/problem/1348/B 题意:告诉我们一个数组及其长度和k,判断是否可以构造一个新数组使得每K段长度和都相等. 思路:首先 ...

  6. Nacos 2.0 正式发布,性能提升 10 倍!!

    3月20号,Nacos 2.0.0 正式发布了! Nacos 简介: 一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台. 通俗点讲,Nacos 就是一把微服务双刃剑:注册中心 + 配置中 ...

  7. 一文彻底搞懂JS前端5大模块化规范及其区别

    码文不易,转载请带上本文链接,感谢~ https://www.cnblogs.com/echoyya/p/14577243.html 目录 码文不易,转载请带上本文链接,感谢~ https://www ...

  8. 解决跨域问题chrome浏览器插件

    https://www.crx4chrome.com/crx/53489/ 解决chrome浏览器跨域的问题

  9. 随便聊聊 Java 8 的函数式编程

    函数式编程(Functional Programming) 首先,我们来了解一个叫做"编程范式"的概念. 什么是"编程范式"呢?简单来说就是指导我们编程的方法论 ...

  10. xctf - stack2

    xctf - stack2 文件check一下,几乎全开了 运行一下程序,好像很正常呢: 再来一个大的,好像有点儿问题,变1.00了 在ida中查看,在输入的时候没有检查数据大小 可以通过劫持eip获 ...