6.1预请求脚本
1.为集合添加脚本
2.为文件夹添加脚本
3.为请求添加脚本
4.预请求脚本执行的顺序
5.常用的预请求脚本
6.2测试脚本
1.为集合、文件夹、请求添加脚本
2.测试脚本执行的顺序
3.常用的测试脚本
Postman支持JavaScript,它允许用户向请求和集合添加动态行为,通过JavaScript脚本,可以构建包含动态参数的请求,在请求之间传递数据,用户可以在“Pre-request Script”和“Tests”中添加JavaScript代码。前者运行在请求发送到服务器之前,为预请求。后者运行在收到响应之后,为测试脚本。
可以将预请求和测试脚本添加到一个集合、一个文件夹、一个请求中。
1.为集合添加脚本
如图:
下图为打开界面:
2.为文件夹添加脚本
打开如下图:
3.为请求添加脚本
打开请求直接在参数栏中添加脚本。
4.预请求脚本执行的顺序
集合中的每个请求,按着这样的层次结构运行:集合级脚本>文件夹级脚本>请求级脚本
对于单个请求:预请求脚本在请求发送之前执行。
对于文件夹中的请求:预请求脚本在文件夹中的每个请求之前执行。
对于集合中的请求:预请求脚本在集合中的每个请求之前运行。
下面做个小实验,准备了1个集合,集合里面包含1个文件夹,文件夹里面包含1个请求。如下图:
在集合的Pre-request Scripts 中写入console.log(1)
在文件夹的Pre-request Scripts 中写入console.log(2)
在单个请求的Pre-request Scripts 中写入console.log(3)
打开“Postman Console”控制台,在Collection运行器中执行集合,结果如下图
5.常用的预请求脚本
Postman在右侧区域列出了常用脚本,来了解下。
(1)设置变量、获取变量值的示例脚本
① Set a global variable(设置一个全局变量)
pm.globals.set("variable_key", "variable_value");
② Set an environment variable(设置一个环境变量)
pm.environment.set("variable_key", "variable_value");
(2)清除变量的示例脚本
① Clear a global variable(清除一个全局变量)
pm.globals.unset("variable_key");
② Clear an environment variable(清除一个环境变量)
(3)发送请求的示例脚本
① Send a request(发送一个请求)
pm.globals.unset("variable_key");pm.sendRequest("https://postman-echo.com/get", function (err, response) {
console.log(response.json());
});
1.为集合、文件夹、请求添加脚本
方法与预请求脚本一样。
2.测试脚本执行的顺序
集合中的每个请求,按着这样的层次结构运行:集合级脚本>文件夹级脚本>请求级脚本。
对于单个请求:测试脚本在接收响应之后执行。
对于文件夹中的请求:测试脚本在文件夹中的每个请求运行之后执行。
对于集合中的请求:测试脚本在集合中的每个请求运行之后执行。
同样做个小实验,准备了1个集合,集合里面包含1个文件夹,文件夹里面包含1个请求。如下图:
在集合的Tests 中写入console.log(4)
在文件夹的Tests中写入console.log(5)
在单个请求的Tests 中写入console.log(6)
打开“Postman Console”控制台,在Collection运行器中执行集合,结果如下图
3.常用的测试脚本
(1)操作变量及发送请求脚本
① Set a global variable(设置一个全局变量)
pm.globals.set("variable_key", "variable_value");
② Set an environment variable(设置一个环境变量)
pm.environment.set("variable_key", "variable_value");
③ Get a global variable(获取全局变量)
pm.globals.get("variable_key");
④ Get an environment variable(获取环境变量)
pm.environment.get("variable_key");
⑤ Get a variable(获取变量)
pm.variables.get("variable_key");
⑥ Clear a global variable(清除一个全局变量)
pm.globals.unset("variable_key");
⑦ Clear an environment variable(清除一个环境变量)
pm.environment.unset("variable_key");
⑧ Send a request(发送一个请求)
pm.globals.unset("variable_key");pm.sendRequest("https://postman-echo.com/get", function (err, response) {
console.log(response.json());
});
(2)Response body:Contains string(检查响应体中是否包含一个字符串)
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});
(2)Response body:Contains string(检查响应体中是否包含一个字符串)
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});
响应体中包含“成功”字样。
(3)Response body:Convert XML body to a JSON Object(将XML格式的响应体转换成JSON对象)
var jsonObject = xml2Json(responseBody);
(4)Response body:Is equal to string(检查响应体等于一个字符串)
pm.test("Body is correct", function () {
pm.response.to.have.body("response_body_string");
});
上述(2)中的例子在此失败,因为响应体是包含“成功”的一大段文字。
(5)Response body:JSON value check(检查响应体的JSON值)
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.value).to.eql(100);
});
还是(2)中的例子检查返回体中的“msg”的值是否等于“成功”,这里PASS。
(6)Response headers:Content-Type header check(检查响应体中包含某个header)
pm.test("Content-Type is present", function () {
pm.response.to.have.header("Content-Type");
});
还是(2)中的例子,检查是否包含“Access-Control-Max-Age”头,这里包含,所以PASS。
(7)Response time is less than 200ms(检查响应时间,要求小于200ms)
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});
响应时间为85ms,所以PASS。
(8)Status code:Code is 200(要求接口响应code为200)
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
接口响应code=200,PASS。
(9)Status code:Code name has string(要求code名称当中包含某个字符串)
Status中包含“OK”字符串,PASS
(10)Status code:Successful POST request(要求Status code 符合某种条件)
pm.test("Successful POST request", function () {
pm.expect(pm.response.code).to.be.oneOf([201,202]);
});
假设要求响应code是200、201、202中的一个,实际响应code=200,PASS。
(11)Use Tiny Validator for JSON data(使用轻量级验证器)
用来检查响应体数据类型。
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;
});
可以看出数据类型对应上了,PASS。
注意:JavaScript提供了7种数据类型,string、number、boolean、object(对象)、undefined、null、symbol。