0. test的构成
一个标准test的写法如下:
pm.test("test name", function () {
//测试逻辑
});
它由两部分构成:
- test name. 这个name会出现在你的测试报告中
- function. 这部分包含你的居体测试逻辑(解析数据,断言等等)
一个具体的例子如下:
pm.test("http code is 200", function () {
//判断http返回码
pm.response.to.have.status(200);
});
pm.test("response data is right", function () {
//解析返回值
var response = JSON.parse(responseBody);
//通过断言判断返回值的正确性
pm.expect(response.msg).to.eql("ok");
pm.expect(response.code).to.eql(0);
});
1. 如何运行/查看一个test
1. 单个test
- 在Tests窗口写测试
- 点击send发送请求
- 在Test Results窗口查看结果
2. 批量test
如下图所示,可以整体运行一个集合的中的全部测试
运行后可看到类似下图的测试结果
2. 一些常用的变量
//响应的http code
pm.response.code
//请求响应时间, 单位ms
pm.response.responseTime,
//返回回数据的大小,包含header
pm.response.responseSize,
//响应头,一个object
responseHeaders
//取Content-Type
responseHeaders['Content-Type']
//响应体,字串。如果服务端返回的是json,需要JSON.parse后才能得到对应的json对象
responseBody
//获取相应cookie值
pm.cookies.get(cookieName:String)
3. 常用断言
3.1 pm.expect
1. pm.expect(a).to.equal(b)
a,b严格相等,例:
pm.test("response data is right", function () {
var response = JSON.parse(responseBody);
//response.code === 0
pm.expect(response.code).to.eql(0);
});
2. pm.expect(a).to.deep.equal(b)
a,b为多层结构时,判断a,b相等。例:
pm.test("deep equal", function(){
var a = {
num1:[1,1,1],
num2:[2,2,2]
};
var b = {
num1:[1,1,1],
num2:[2,2,2]
};
pm.expect(a).to.deep.equal(b);
});
3. pm.expect(object).to.have.property(key)
object中有属性key。例:
pm.test("have property", function(){
var object = {
name:"ball",
money:0,
age:100
}
pm.expect(object).to.have.property('age');
});
4. pm.expect(a).to.include('b')
a中包含b
pm.test("include", function(){
//a可以是字串
var str = "this is a test";
pm.expect(str).to.include('this');
//a可以是数组,此时b只能是简单值,不能是array。若希望b为array,需要用members方法做断言。
var ary = [1,2,3,4];
pm.expect(ary).to.include(2);
//a可以是是object
var obj = {
name:"ball",
money:0,
age:100
};
pm.expect(obj).to.include({age:100, name:"ball"});
});
5. pm.expect(a).to.be.below(b)
a小于b。例:
//响应时间小于200ms
pm.expect(pm.response.responseTime).to.be.below(200);
6. expect(a).to.be.above(b)
a大于b。
更多断言,参见
https://learning.postman.com/docs/postman/scripts/test-examples/#assertion-library-examples
https://www.chaijs.com/api/bdd/
3.2 pm.response
1. pm.response.to.have.status(code:Number)
判断http返回码。例:
//http code 200
pm.response.to.have.status(200);
2. pm.response.to.have.header(key:String, optionalValue:String)
判断响应头字段。例
//响应头中有Cache-Control,其值为no-cache
pm.response.to.have.header('Cache-Control', 'no-cache');
更多使用参见
https://learning.postman.com/docs/postman/scripts/postman-sandbox-api-reference/#response-assertion-api-available-in-the-test-scripts
4. 引用沙箱中的js库
postman的测试中可以使用很多js库。具体参见
https://learning.postman.com/docs/postman/scripts/postman-sandbox-api-reference/
一个使用crypto-js做AES加密的例子:
var crypto = require('crypto-js');
var uid = "[email protected]";
var key = crypto.enc.Utf8.parse("112233");
var opt = {
mode:crypto.mode.ECB,
padding:crypto.pad.Pkcs7
}
var userid = crypto.AES.encrypt(uid, key, opt);
5. 发送异步请求
详见
https://learning.postman.com/docs/postman/scripts/postman-sandbox-api-reference/#pmsendrequest