Skip to content

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');
    });
});