Postman 常用断言脚本合集

Postman 全套可直接复制断言脚本合集

前置通用代码(所有脚本开头统一获取返回JSON)

javascript 复制代码
// 固定放在Tests最顶部,统一接收响应json
let res = pm.response.json();

一、基础状态码断言

javascript 复制代码
// 1. 校验接口成功200
pm.test("接口响应状态码为200", function () {
    pm.expect(pm.response.code).to.eql(200);
});

// 2. 校验创建资源成功201
pm.test("新增资源返回201", function () {
    pm.expect(pm.response.code).to.eql(201);
});

// 3. 校验无权限401/禁止访问403
pm.test("未登录返回401", function () {
    pm.expect(pm.response.code).to.eql(401);
});
pm.test("无操作权限返回403", function () {
    pm.expect(pm.response.code).to.eql(403);
});

// 4. 校验参数错误400
pm.test("非法参数返回400", function () {
    pm.expect(pm.response.code).to.eql(400);
});

// 5. 校验服务异常500
pm.test("服务器异常返回500", function () {
    pm.expect(pm.response.code).to.eql(500);
});

二、业务码、返回提示文案断言

javascript 复制代码
// 1. 校验业务成功码(通用后端规范 code=200 / code=0)
pm.test("业务操作成功,code=200", function () {
    pm.expect(res.code).to.eql(200);
});
pm.test("业务操作成功,code=0", function () {
    pm.expect(res.code).to.eql(0);
});

// 2. 校验失败提示信息
pm.test("参数错误提示文案正确", function () {
    pm.expect(res.msg).to.include("参数不能为空");
});

// 3. 校验返回msg不为空
pm.test("返回提示信息非空", function () {
    pm.expect(res.msg).not.to.be.empty;
});

三、JSON 多层级字段校验(最常用)

场景1:提取token并校验(登录接口专用)

javascript 复制代码
pm.test("返回token,且不为空字符串", function () {
    // 校验字段存在、类型为字符串、非空
    pm.expect(res.data.token).to.be.a("string");
    pm.expect(res.data.token).not.to.be.empty;
});

// 同时存入环境变量,实现接口关联
var token = res.data.token;
pm.environment.set("token", token);
console.log("提取到的token:", token); // 控制台打印调试

场景2:多层嵌套字段校验

返回示例:{"code":200,"data":{"user":{"id":1001,"name":"测试用户"}}}

javascript 复制代码
pm.test("返回用户ID为数字", function () {
    pm.expect(res.data.user.id).to.be.a("number");
    pm.expect(res.data.user.id).greaterThan(0);
});
pm.test("用户名不为空", function () {
    pm.expect(res.data.user.name).not.empty;
});

场景3:数组列表校验(分页列表接口)

返回示例:{"code":200,"data":{"list":[{"id":1},{"id":2}],"total":2}}

javascript 复制代码
pm.test("列表是数组格式", function () {
    pm.expect(res.data.list).to.be.an("array");
});
pm.test("列表数据条数大于0", function () {
    pm.expect(res.data.list.length).greaterThan(0);
});
pm.test("分页总条数正确", function () {
    pm.expect(res.data.total).to.eql(2);
});

// 提取列表第一条id存入环境变量(用于后续删除/编辑接口)
let firstId = res.data.list[0].id;
pm.environment.set("targetId", firstId);

四、响应头断言(鉴权、缓存、跨域校验)

javascript 复制代码
// 校验响应头携带Token
pm.test("响应头返回Authorization", function () {
    pm.expect(pm.response.headers.get("Authorization")).to.exist;
});

// 校验跨域允许所有域名
pm.test("允许跨域访问", function () {
    pm.expect(pm.response.headers.get("Access-Control-Allow-Origin")).to.eql("*");
});

// 校验返回Content-Type为json
pm.test("返回数据格式为JSON", function () {
    pm.expect(pm.response.headers.get("Content-Type")).to.include("application/json");
});

五、响应时间断言(简易性能测试)

javascript 复制代码
// 普通接口响应小于800ms
pm.test("接口响应耗时 < 800ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(800);
});

// 分页列表慢接口放宽到1500ms
pm.test("列表接口响应耗时 < 1500ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(1500);
});

六、反向断言(异常场景用例)

javascript 复制代码
// 字段不等于某个值
pm.test("错误码不能是200", function () {
    pm.expect(res.code).not.to.eql(200);
});

// 字段不存在
pm.test("正常接口不返回error字段", function () {
    pm.expect(res).not.to.have.property("error");
});

// 数组为空(查询无数据场景)
pm.test("暂无数据,列表为空", function () {
    pm.expect(res.data.list.length).to.eql(0);
});

七、数据驱动/通用变量提取模板

1. 存入环境变量(仅当前环境生效,自动化首选)

javascript 复制代码
// 提取字符串token
pm.environment.set("token", res.data.token);
// 提取数字ID
pm.environment.set("orderId", res.data.order.id);
// 提取文本
pm.environment.set("username", res.data.user.name);

2. 存入全局变量(所有环境共享)

javascript 复制代码
pm.globals.set("globalToken", res.data.token);

3. 清除变量(后置清理脚本)

javascript 复制代码
// 用完删除环境变量
pm.environment.unset("token");
pm.environment.unset("orderId");

八、完整可直接复制的登录接口整套Tests脚本

javascript 复制代码
// 1. 获取返回JSON
let res = pm.response.json();

// 2. 状态码断言
pm.test("登录接口返回200", function () {
    pm.expect(pm.response.code).to.eql(200);
});

// 3. 业务码断言
pm.test("登录成功code=200", function () {
    pm.expect(res.code).to.eql(200);
});

// 4. 校验token存在
pm.test("返回有效token", function () {
    pm.expect(res.data.token).to.be.a("string");
    pm.expect(res.data.token).length.greaterThan(10);
});

// 5. 提取token存入环境变量,供后续接口鉴权使用
var token = res.data.token;
pm.environment.set("token", token);

// 6. 响应时间校验
pm.test("登录接口响应小于500ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(500);
});

// 7. 打印日志调试
console.log("登录成功,已存入token:", token);

九、下游接口引用变量示例

Headers 鉴权头

复制代码
Authorization: Bearer {{token}}

Body JSON参数

json 复制代码
{
  "id": "{{targetId}}",
  "name": "测试名称"
}

补充使用小技巧

  1. 脚本全部粘贴到请求右侧 Tests 标签,发送请求自动执行;
  2. 结果在 Test Results 面板查看,绿色=通过,红色=失败;
  3. console.log() 打印内容在底部 Console 窗口查看,调试变量;
  4. 数据驱动Runner使用CSV时,参数直接写 {``{列名}} 即可读取每行数据。