测试脚本

Postman工具借助测试脚本来帮助用户自动判断接口请求响应是否正确,相当于LoadRunner工具中的检查点或JMeter中的断言

 

Tests基础知识

如果将预请求脚本看成是接口的前提条件,那么测试脚本就是"预期结果",借助Tests能实现接口响应的自动检验。同样,用户可以使用JavaScript语言为每个请求编写和运行测试脚本

测试lua脚本性能 如何测试脚本_postman

注:
1、在Tests脚本编辑区旁边Postman同样提供了常用的代码片段:通过点击脚本名字来向编辑区域添加对应的代码

2、理论上来说,用户可以为某个请求添加任意多个测试脚本,这取决于想要的测试点

3、Postman每次发送请求时都要执行测试。结果显示在"Response"下的"Test Results"选项卡中
         ⑴选项卡标题显示执行和通过测试的数量,并在选项卡中列出了详细的测试结果。如果测试结果为真,则显示PASS,反正则显示FAIL

 

运行脚本要求

1、测试脚本在发送请求,并从服务器收到响应之后才开始执行

2、pre-request脚本,是在对API进行请求之前的脚本,一般用于动态生成参数、JSON数据包、链接地址等

3、test脚本,其实更应该叫post-request,实在完成API访问并得到其response回应之后运行的脚本,一般用于获取response的内容,用于之后对于别的资源的请求,如获取页面标题和内容等

4、需要注意:pre-request脚本,在里面直接写代码就可以了;但是test脚本需要在指定的函数pm.test(...)中执行才会被识别,且作为test脚本运行(这里感觉就跟在脚本中发送请求差不多了,请求和处理函数要在sendRequest函数中使用)

例:

pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

注:
1、pm.test()中第一个参数是测试描述(会在测试结果栏显示,应和其它测试描述做以区分),第二个参数是一个函数,具体执行代码都在这个函数中运行

2、pm对象是Postman的主要对象,所有的内置函数,数据调用等,都需要通过它来实现

 

操作变量、发送请求

在测试脚本中与变量操作的方法主要有如下几个方法:在测试脚本中操作变量与在预请求脚本中操作变量的方法一致

函数名

描述

pm.globals.set("variable_key", "variable_value"); 

设置全局变量

pm.environment.set("variable_key", "variable_value");

设置环境变量

pm.globals.get("variable_key");

获取全局变量(的值)

pm.environment.get("variable_key");

获取环境变量(的值)

pm.variables.get("variable_key"); 

获取变量(的值)

pm.globals.unset("variable_key");

清除全局变量

pm.environment.unset("variable_key");

清除环境变量

pm.sendRequest("URL", function (err, response) {

      console.log(response.json());
});

发送一个请求(GET请求)

注:
上面8个方法的使用方法和在Pre-request script中的使用方法一致,这里就不介绍了

 

 

检查响应体中是否包含一个字符串

1、Response body:Contains string

2、作用:检查响应体中是否包含一个字符串

语法:

pm.test("测试描述", function () {
    pm.expect(pm.response.text()).to.include("需要测试的字符串");
});

//pm.response.text()返回的是字符串类型的
//pm.response.json()返回的是json类型的

例:检查响应体中是否包含一个字符串

测试lua脚本性能 如何测试脚本_postman_02

测试lua脚本性能 如何测试脚本_状态码_03

注:感觉代码意思为
1、断言函数:expect()

2、返回响应体:pm.response.text(),这里是以字符串形式返回,也可以pm.response.json()以json格式返回

 

检查响应体是否等于一个字符串

1、Response body:Is equal to a string

2、作用:用于检查响应体是否等于一个字符串(这里要求响应体必须等于被测试的整个某个字符串,而不是说响应体包含字符串的一部分)

语法:

pm.test("测试描述", function () {
    pm.response.to.have.body("需要测试的字符串");
});

测试lua脚本性能 如何测试脚本_测试lua脚本性能_04

 

检查响应体的键的值

1、Response body:JSON value check

2、作用:检查指定键的值是否与预期一致

语法:

pm.test("测试描述", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.需要测试的键).to.eql(测试的键预期的结果);
});

例:
步骤1:先查看正确的响应

测试lua脚本性能 如何测试脚本_字符串_05

注:从上图可以看出
1、需要被测试的键"test"是最外层键"args"的值,因此需要先将"test"键提取出来再进行判断(不处理的话postman断言会失败)

2、需要被测试的键"url"直接位于最外层,所以不需要进行处理

步骤2:构建脚本

测试lua脚本性能 如何测试脚本_postman_06

 

检查请求头中的键

1、Response headers:Content-Type header check

2、作用:检查请求头中某个键是否与预期结果一致

语法:

pm.test("测试描述", function () {
    pm.response.to.have.header("需要测试的请求头的键");
});

注:
此方法只能测试请求头的键,不能测试键的值

例:

测试lua脚本性能 如何测试脚本_测试lua脚本性能_07

 

检查响应时间

1、Response time is less than 200ms

2、作用:用于检查请求的响应时间是否小于指定时间,单位为ms

语法:

pm.test("测试描述", function () {
    pm.expect(pm.response.responseTime).to.be.below(时间);
});

例:

测试lua脚本性能 如何测试脚本_测试lua脚本性能_08

 

检查响应状态码

1、Status code:code is 200

2、作用:检查响应的状态码是否为预期

语法:

pm.test("测试描述", function () {
    pm.response.to.have.status(状态码);
});

例:

测试lua脚本性能 如何测试脚本_状态码_09

 

检查响应状态码中的字符串

1、Status code:code name has string

2、作用为:检查响应状态码中是否存在某个指定的字符串

语法:

pm.test("测试描述", function () {
    pm.response.to.have.status("需要检查的字符串");
});

例:

测试lua脚本性能 如何测试脚本_测试lua脚本性能_10

 

检查响应状态码是否为指定状态码中的一个

1、Status code:Successful POST request

2、作用:用于检查响应状态码是否为指定状态码中的一个

语法:

pm.test("测试描述", function () {
    pm.expect(pm.response.code).to.be.oneOf([需要测试的状态码列表]);
});

例:

测试lua脚本性能 如何测试脚本_测试lua脚本性能_11

 

使用轻量级验证器

1、Use Tiny Validator for JSON data

2、参数:可以修改items里面的键值对来对应验证json的参数

语法:

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;
});

 

将XML转为JSON格式

1、Response body:Convert XML body to a JSON Object

2、作用:假如响应体是XML格式,将其转换成JSON对象,再对其进行操作

语法:

var jsonObject = xml2Json(responseBody);

参数:(默认不需要设置参数,为接口的response)需要转换的xml

 

 

测试结果备注

1、返回值就不是简单的return语句可以,必须要通过Postman自带的对象或方法才可以,一般是通过pm.expect()或tests[ ]这两个地方返回测试结果

2、这些方法名看起来都很容易理解,一般都会叫pm.expect()或.to.be()或.to.have()这样的,字面意思就是期待什么或要求它必须是什么或必须有什么,才能通过测试。

3、另外,同样的测试结果,实际上还有更简单的写法,即不通过pm对象,而是内置tests对象,常用操作如下:

# 响应时间必须少于200毫秒
tests["Response time is less than 200ms"] = responseTime < 200;

# 判断返回代码是否等于某一个指定的代码
tests["Status code name has string"] = responseCode.name.has("Created");

看这个用法,猜测tests是一个JSON格式的对象,tests[...]括号内的字符串是测试的描述, =后面是判断语句,然后将True或False赋予为tests[..]的值,然后postman轮训所有tests对象里的参数,并返回pass与否的结果