Postman中常用脚本

一、设置变量和获取变量

// 设置全局变量
pm.globals.set("variable_key", "variable_value");

// 获取全局变量
var globalVar = pm.globals.get("variable_key");

// 设置环境变量
pm.environment.set("variable_key", "variable_value");

// 获取环境变量
var envVar = pm.environment.get("variable_key");

// 设置集合变量
pm.collectionVariables.set("variable_key", "variable_value");

// 获取集合变量
var collectionVar = pm.collectionVariables.get("variable_key");

// 设置局部变量(仅在当前请求中有效)
pm.variables.set("variable_key", "variable_value");

// 获取变量(自动从最近的作用域获取)
var variable = pm.variables.get("variable_key");

二、 在 Pre-request Script 中设置请求头和请求体

设置请求头

// 添加单个请求头
pm.request.headers.add({
    key: 'Authorization',
    value: 'Bearer ' + pm.environment.get('token')
});

// 添加多个请求头
pm.request.headers.add({
    key: 'X-API-Key',
    value: pm.environment.get('api_key')
});

pm.request.headers.add({
    key: 'X-Request-ID',
    value: pm.variables.get('request_id')
});

// 移除请求头
pm.request.headers.remove('X-Deprecated-Header');

// 更新已存在的请求头
pm.request.headers.upsert({
    key: 'Content-Type',
    value: 'application/json; charset=utf-8'
});

// 批量设置请求头
const headers = [
    {key: 'X-Client-Version', value: '1.0.0'},
    {key: 'X-Platform', value: 'web'},
    {key: 'X-Timestamp', value: Date.now().toString()}
];

headers.forEach(header => {
    pm.request.headers.add(header);
});

设置请求体

// 设置 JSON 请求体
const requestBody = {
    name: pm.variables.get('user_name'),
    email: pm.variables.get('user_email'),
    timestamp: Date.now(),
    metadata: {
        source: 'postman',
        version: '1.0'
    }
};

pm.request.body.update({
    mode: 'raw',
    raw: JSON.stringify(requestBody),
    options: {
        raw: {
            language: 'json'
        }
    }
});

//简单粗暴一点
pm.request.body = JSON.stringify(requestBody);

// 设置表单数据
pm.request.body.update({
    mode: 'formdata',
    formdata: [
        {key: 'username', value: pm.environment.get('username')},
        {key: 'password', value: pm.environment.get('password')},
        {key: 'remember_me', value: 'true'}
    ]
});

// 设置 URL 编码表单
pm.request.body.update({
    mode: 'urlencoded',
    urlencoded: [
        {key: 'grant_type', value: 'password'},
        {key: 'username', value: pm.environment.get('username')},
        {key: 'password', value: pm.environment.get('password')}
    ]
});

三、在 Tests 中处理响应码和响应数据

检查响应码

// 基本响应码检查
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

pm.test("Status code is successful", function () {
    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]);
});

// 条件性测试
if (pm.response.code === 200) {
    pm.test("Response time is less than 200ms", function () {
        pm.expect(pm.response.responseTime).to.be.below(200);
    });
    
    pm.test("Response has required fields", function () {
        var jsonData = pm.response.json();
        pm.expect(jsonData).to.have.property('id');
        pm.expect(jsonData).to.have.property('name');
        pm.expect(jsonData).to.have.property('email');
    });
}

image.png

参考:https://apifox.com/apiskills/writing-postman-test-scripts/

响应数据处理

const jsonData = pm.response.json();
// 检查属性是否存在
pm.expect(jsonData).to.have.property('success', true);
pm.expect(jsonData).to.have.property('data');

// 精确值匹配
pm.expect(jsonData.status).to.equal('success');
pm.expect(jsonData.code).to.equal(200);
pm.expect(jsonData.active).to.be.true;

四、常见json处理

//获取response的json数据
const jsonData = pm.response.json();

//json转string
const  jsonString = JSON.stringify(jsonData);

//string转json
const jsonData= JSON.parse(jsonString);

//json数组长度
var len = jsonData.obj.length;

//遍历json数组
for (var i = 0; i < jsonData.data.length; i++) {
    data =  jsonData.data[i];
}

//遍历json数组
for (var item of jsonData.items) {
    console.log(item);
}

//遍历json数组
jsonData.data.forEach((item, index) => {
    console.log(item);
    console.log(index);
});

五、控制请求执行流程

//实现循环调用,并通过变量控制循环次数
const count = Number(pm.collectionVariables.get("count")) ;
let index = Number(pm.collectionVariables.get("index"));
if (index < count) {
    postman.setNextRequest("下一条要执行的API");
    //循环一次,计数+1
    pm.collectionVariables.set("index", index + 1);
} else {
    // 退出循环
    postman.setNextRequest(null);
}

六、在脚本中发送 HTTP 请求

//发送简单的 GET 请求
const userRequest = {
    url: 'https://api.example.com/users/current',
    method: 'GET',
    header: {
        'Authorization': 'Bearer ' + pm.environment.get("token")
    }
};

pm.sendRequest(userRequest, function (err, response) {
    if (!err && response.code === 200) {
        const user = response.json();
        pm.environment.set("userId", user.id);
        pm.environment.set("userRole", user.role);
        console.log("用户信息获取成功:", user.name);
    }
});

//发送带参数的 POST 请求
const authRequest = {
    url: 'https://api.example.com/auth/token',
    method: 'POST',
    header: {
        'Content-Type': 'application/json'
    },
    body: {
        mode: 'raw',
        raw: JSON.stringify({
            username: pm.environment.get("username"),
            password: pm.environment.get("password")
        })
    }
};

pm.sendRequest(authRequest, function (err, response) {
    if (err) {
        console.log("认证失败:", err);
    } else {
        const responseJson = response.json();
        if (responseJson.access_token) {
            pm.environment.set("access_token", responseJson.access_token);
            console.log("Token 获取成功");
        }
    }
});
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容