以下,主要介绍如何用Postman的Tests这个模块进行断言,包括Tests断言原理介绍、常用断言方法以及Tests断言实例。

1、断言介绍

1.1 简介

一个完整的接口测试,包括:请求 > 获取响应正文 > 断言
我们检验一个测试点是否通过,一般会将我们心理预期的结果与实际结果进行比对,如果结果一致则证明测试通过,如果结果不一致,则证明测试不通过,这即是我们经常所说的断言。
在 postman 中封装了我们常见的断言(Tests),当然 Tests 除了可以作为断言,还可以当做后置处理器,经常应用于:
【1】获取当前接口的响应,传递给下一个接口
【2】控制多个接口间的执行顺序。

1.2 原理

Postman中的断言通过JavaScript语言编写,在Tests下方给出可以选择的一些断言内容,断言会在请求返回之后显示,并根据断言的PASS、Fail情况体现在最终测试结果中。

1.3 postman 中封装的常见断言

预置脚本

其中以下 11 种与预置脚本中的一致,这些严格意义上并不是断言而是辅助进行参数化的,与预置脚本相比唯一的不同在于生效时间,预置脚本在请求前生效,断言在请求后生效。
image.png

Get an environment variable 获取一个环境变量
pm.environment.get(“variablekey”);
Get a global variable 获取一个全局变量
pm.globals.get(“variable_key”);
Get a variable 获取一个变量
pm.variables.get(“variable_key”);
Get a collection variable 获取一个集合变量
pm.collectionVariables.get(“variable_key”);
Set an environment variable 设置一个环境变量
pm.environment.set(“variable_key”, “variable_value”);
Set a global variable 设置一个全局变量
pm.globals.set(“variable_key”, “variable_value”);
Set a collection variable 设置一个集合变量
pm.collectionVariables.set(“variable_key”, “variable_value”);
Clear an environment variable 清除一个环境变量
pm.environment.unset(“variable_key”);
Clear a global variable 清除一个全局变量
pm.globals.unset(“variable_key”);
Clear a collection variable 清除一个集合变量
pm.collectionVariables.unset(“variable_key”);
Send a request 发送一个请求
pm.sendRequest(“https://postman-echo.com/get“, _function
(err, response) {
console.log(response.json());
});

Tests断言脚本

除去上面 11 种断言外,其他断言的含义如下:
image.png

【1】校验接口响应的状态码,常见的有 200、404、500当然也包括前面鉴权学到的 401 等等。
pm.test(“Status code is 200”, function () {
pm.response.to.have.status(200);
});

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

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

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

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

【6】判断实际响应时间是否与低于预期时间
pm.test(“Response time is less than 200ms”, function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});

【7】检查响应码是否与预期集合中的某个值一致
pm.test(“Successful POST request”, function () {
pm.expect(pm.response.code).to.be.oneOf([201, 202]);
});

【8】检查响应信息中是否包含某个预期值
pm.test(“Status code name has string”, function () {
pm.response.to.have.status(“Created”);
});

【9】转化XML格式的响应成JSON对象
var jsonObject = xml2Json(responseBody);

2、Test断言实例

2.1 postman 中断言使用示例

image.png
image.png我们针 对如上接口的请求和响应设计用例如下:

  1. //检验响应状态码为200
  2. pm.test("Status code is 200", function () {
  3. pm.response.to.have.status(200);
  4. });
  5. //检验响应中包含字符串 "12"
  6. pm.test("Body matches string", function () {
  7. pm.expect(pm.response.text()).to.include("12");
  8. });
  9. //检验 key = uin 的value 值等于 183962755
  10. pm.test("Your test name", function () {
  11. var jsonData = pm.response.json();
  12. pm.expect(jsonData.mems[0].uin).to.eql(183962755);
  13. });

此时发送请求查看断言结果:
image.png
可见此时测试点全部通过。
需要注意的点:postman 获取断言时,任何响应都必须转为 JsonData 对象。例如 我们想获取如下响应信息中键值为 name 的值:

  1. {
  2. "reponse": {
  3. "person": {
  4. "name": "hai",
  5. "age": 18
  6. }
  7. }
  8. }

此时我们这样做:

  1. //第一步将响应转为 jsonData 对象
  2. jsonData=pm.response.json();
  3. //第二步通过 . 获取到我们想要的 age 的值
  4. var age=jsonData.reponse.person.age;

由此我们可以任意获取响应中的字段,进而在设置成相应的环境变量,当然就可以作为参数传递给任意接口了,这就是接口间参数传递的原理所在;

参考博客: