Appearance
Postman 请求前置脚本
在 Postman 的前置脚本(Pre-request Script)中,可以执行许多常见的任务,如设置环境变量、处理数据、生成随机值、调用外部 API 等。以下是一些 Postman 前置脚本的常用示例:
1. 设置环境变量
在发送请求之前,可能需要根据某些条件设置环境变量。
javascript
// 设置环境变量
pm.environment.set("userId", "12345");
// 根据响应设置环境变量
pm.sendRequest("GET", "https://api.example.com/user/me", {}, function (err, response) {
if (!err) {
var jsonData = response.json();
pm.environment.set("userId", jsonData.id);
}
});
2. 生成随机值
可以使用 JavaScript 的内置函数来生成随机值。
javascript
// 生成随机整数
var randomInt = Math.floor(Math.random() * 100) + 1;
pm.globals.set("randomInt", randomInt);
// 生成随机字符串
var randomString = Math.random().toString(36).substring(7);
pm.globals.set("randomString", randomString);
3. 处理请求数据
可能需要修改请求体或请求头中的数据。
javascript
// 修改请求体中的某个值
var requestBody = pm.request.body.json();
requestBody.name = "New Name";
pm.request.body.set("json", requestBody);
// 添加请求头
pm.request.headers.add("Custom-Header", "CustomValue");
4. 调用外部 API
在发送主请求之前,可能需要从另一个 API 获取数据。
javascript
// 调用另一个 API 并获取数据
pm.sendRequest("GET", "https://api.example.com/other-data", {}, function (err, response) {
if (!err) {
var otherData = response.json();
// 使用获取的数据设置环境变量或修改请求
pm.environment.set("otherData", JSON.stringify(otherData));
}
});
5. 条件逻辑
根据某些条件修改请求。
javascript
// 根据环境变量决定是否添加请求头
if (pm.environment.get("addHeader") === "true") {
pm.request.headers.add("Conditional-Header", "HeaderValue");
}
6. 数据转换
将请求数据从一种格式转换为另一种格式。
javascript
// 将请求体中的日期从字符串转换为 JavaScript Date 对象
var requestBody = pm.request.body.json();
requestBody.date = new Date(requestBody.date);
pm.request.body.set("json", requestBody);
7. 日志记录
在脚本中记录信息以供调试。
javascript
// 在控制台打印日志
console.log("This is a log message");
// 记录响应的某个部分
pm.test("Response Check", function () {
var responseJson = pm.response.json();
console.log(responseJson.someField);
});
在编写前置脚本时,请确保脚本不会阻塞请求发送,特别是当进行异步操作(如 pm.sendRequest
)时。Postman 会等待异步操作完成后再发送主请求,但如果脚本中存在错误或无限循环,则可能会导致请求延迟或失败。
8. 前置发送 HTTP 请求
javascript
pm.sendRequest({
url: 'https://postman-echo.com/post',
method: 'POST',
header: {
'Accept': '*/*',
'Cache-Control': 'no-cache',
'Content-Type': 'application/json'
},
body: {
mode: 'raw',
raw: JSON.stringify({key: 'this is json'})
}
}, (error, response) => {
console.log(error ? error : response.json());
pm.test('response should be okay to process', () => {
pm.expect(error).to.equal(null);
pm.expect(response).to.have.property('code', 200);
pm.expect(response).to.have.property('status', 'OK');
});
});