前言

Test scripts 是什么?

请求结束并获取到响应数据之后执行的JavaScript脚本(如图)

Test scripts的运行环境?

和预编译脚本一样运行在砂箱(Sandbox)中,而砂箱就是postman内置的一个JavaScript运行环境

Test scripts 能干什么?

测试脚本还能干啥,当然是搞事情了,比如写一堆断言

Test scripts可以获取到哪些数据?

请求及响应的全部信息,还能获取到一些全局变量,环境变量等数据

语法是怎样的?

比如这样

//伪代码
pm.test("这是这条测试脚本的名字",function(){
    //这里写要做的事情
});

例子

判断响应码200

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

断言数据在一个数据集内

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

使用JSON Schema Validator的方式断言

//引入ajv库,这是砂盒中内置的库,可以直接使用
var Ajv = require('ajv'),
    ajv = new Ajv({logger: console}),
    schema = {
        "properties": {
            "alpha": {
                "type": "boolean"
            }
        }
    };

pm.test('Schema is valid', function() {
    pm.expect(ajv.validate(schema, {alpha: true})).to.be.true;
    pm.expect(ajv.validate(schema, {alpha: 123})).to.be.false;
});

发送一个异步请求

只要在砂盒环境中,这个方法都能执行

pm.sendRequest("https://www.baidu.com", function (err, response) {
    console.log(response.json());
});

内置函数xml2Json

xml数据转换成json数据格式

var jsonObject = xml2Json(responseBody);

断言响应头中有某个值

//断言响应头中有Content-Type
pm.test("Content-Type is present", function () {
    pm.response.to.have.header("Content-Type");
});

补充

内置的动态变量,可以直接用在 request URL / headers / body 中

  • {{$guid}} 生成一个GUID 即全局唯一标识符
  • {{$timestamp}} 生成当前的时间戳
  • {{$randomInt}}: 生成一个随机整数([0,1000])

Collection Runner使用外部数据文件,即采用数据驱动

参考

最后

参考连接