Postman预请求(Pre-request Script)
顾名思义,发送请求前执行的脚本。
设置变量、获取变量值的示例脚本
//设置一个环境变量
pm.environment.set("variable_key", "variable_value");
//设置一个全局变量
pm.globals.set("variable_key", "variable_value");
//获取一个环境变量
pm.environment.get("variable_key");
//获取一个全局变量
pm.globals.get("variable_key");
//获取一个变量
pm.variables.get("variable_key");
清除变量的示例脚本
//清除一个环境变量
pm.environment.unset("variable_key");
//清除一个全局变量
pm.globals.unset("variable_key");
发送一个请求示例脚本
pm.sendRequest("https://postman-echo.com/get", function (err, response) {
console.log(response.json());
});
测试脚本(Tests)
操作变量和发送请求脚本
//设置一个环境变量
pm.environment.set("variable_key", "variable_value");
//设置一个全局变量
pm.globals.set("variable_key", "variable_value");
//获取一个环境变量
pm.environment.get("variable_key");
//获取一个全局变量
pm.globals.get("variable_key");
//获取一个变量
pm.variables.get("variable_key");
//清除一个环境变量
pm.environment.unset("variable_key");
//清除一个全局变量
pm.globals.unset("variable_key");
//发送一个请求
pm.sendRequest("https://postman-echo.com/get", function (err, response) {
console.log(response.json());
});
这8个方法和预请求中的类似
TESTS脚本
1、检查响应体中是否包含一个字符串
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});
2、将XML格式的响应体转换成JSON对象
var jsonObject = xml2Json(responseBody);
3、检查响应体等于一个字符串
pm.test("Body is correct", function () {
pm.response.to.have.body("response_body_string");
});
4、检查响应体的JSON值
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.value).to.eql(100);
});
5、检查响应中包含某个header
pm.test("Content-Type is present", function () {
pm.response.to.have.header("Content-Type");
});
6、检查响应时间,要求小于200S
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});
7、要求该接口响应Code为200
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
8、要求code名称当中包含某个字符串
pm.test("Status code name has string", function () {
pm.response.to.have.status("Created");
});
9、要去Status Code符合某种条件
pm.test("Successful POST request", function () {
pm.expect(pm.response.code).to.be.oneOf([201,202]);
});
比如要求响应的code是200、201、202中的一个
10、使用轻量级验证器
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;
});
比如验证响应结果中的某个字段的数据类型;
tests维护的脚本
var schema = {
"items": {
code:{type:"number"},
msg:{type:"number"},
list:{type:"number"}
}
};
var data1 =JSON.parse(responseBody);
pm.test('Schema is valid', function() {
pm.expect(tv4.validate(data1, schema)).to.be.true;
});
pm对象
1、pm对象包含与正在执行的脚本有关的所有信息,并允许访问正在发送的请求的副本或接收到的响应。
2、pm.info对象
(1)pm.info.eventName 返回结果为字符串,输出是在“Pre-request Script”选项卡还是在“Tests”选项卡
(2)pm.info.iteration 返回结果为数值类型。它用来显示当前的迭代次数,从0开始
(3)pm.info.iterationCount 返回结果为数值类型。用于返回计划运行的迭代总数
(4)pm.info.requestName返回字符串类型。用于返回请求名
(5)pm.info.requestId 返回字符串类型,用于返回请求ID
3、pm.sendRequest对象
pm.sendRequest对象允许异步发送HTTP/HTTPS请求
4、pm.request对象
用来获取请求对象,在“Pre-request Script”选项卡中指将要发送的请求;在“Tests”选项卡中指上一个发送的请求
5、pm.response对象
包含响应有关的所有信息
pm.response.code
pm.response.reason
pm.response.headers
pm.response.text
pm.response.json
pm.response.responseTime
6、pm.iterationData对象
包含数据集运行期间提供的数据文件
7、pm.cookies对象
包含一个与请求所创建的域相关联的Cookies列表
8、测试脚本中的断言API
pm.respnse.to.have.status(code:number)
pm.respnse.to.have.status(reason:string)
pm.respnse.to.have.header(key:string)
pm.respnse.to.have.header(key:string,optonalValue:string)
pm.respnse.to.have.body
pm.respnse.to.have.body(optionalValue:string)
pm.respnse.to.have.body(optionalValue:RegExp)
pm.respnse.to.have.jsonBody
pm.respnse.to.have.jsonBody(optionalExpectEqual:Object)
pm.respnse.to.have.jsonBody(optionalExpectPath:string)
pm.respnse.to.have.jsonBody(optionalExpectPath:string,optionalValue:)
9、pm.response.to.be.
可以断言预定义的规则
pm.response.to.be.info 检查响应码是否为1XX
pm.response.to.be.success 检查响应码是否为2XX
pm.response.to.be.redirection 检查响应码是否为3XX
pm.response.to.be.clientError 检查响应码是否为4XX
pm.response.to.be.serverError 检查响应码是否为5XX
pm.response.to.be.error 检查响应码是否为4XX或5XX
pm.response.to.be.ok 检查响应码是否为200
pm.response.to.be.accepted 检查响应码是否为202
pm.response.to.be.badRequest 检查响应码是否为400
pm.response.to.be.unauthorized 检查响应码是否为401
pm.response.to.be.forbidden 检查响应码是否为403
pm.response.to.be.notFound 检查响应码是否为404
pm.response.to.be.rateLimited 检查响应码是否为429
分支和循环
集合包含多个请求,当运行一个集合时,Postman会默认按照一定的顺序来执行所包含的接口请求。不过有些时候下需要按照指定顺序执行,可以借助postman.setNextRequest("request_name");执行下一个请求。Postman.setNextRequest(null)停止工作流程
注意:
1、在预请求或测试脚本中使用,一旦设置多个值则最后一个生效
Postman Sendbox
1、环境或全局变量
Postman.setEnvironmentVariable(variableName,variableValue)
Postman.getEnvironmentVariable(variableName)
Postman.setGlobaltVariable(variableName,variableValue)
Postman.getGlobaltVariable(variableName)
Postman.clearEnvironmentVariable(variableName)
Postman.clearGlobaltVariable(variableName)
Postman.clearGlobaltVariable()清除所有全局变量
2、动态变量
{{$guid}} 添加v4样式的guid
{{$timestamp}} 添加当前时间戳
{{$randomInt}} 添加一个0~1000的随机整数
3、cookies
(1)responseCokies 获取域对应的所有Cookies,结果是一个Array,需要启用拦截器才能工作
(2)Postman.getResponseCookie(cookieName)获取指定名称的Cookie,需要启用拦截器才能工作