文件夹级断言必须在右键文件夹→Edit→Tests中编写,而非单个请求的Tests里;它会在每个子请求响应后立即执行一次,仅用于通用校验,不支持跨请求设环境变量或跳过个别请求,推荐用pm.test()而非tests[]语法。

文件夹级断言必须在 Edit → Tests 里写,不是点请求再进 Tests
Postman 的文件夹(Folder)级断言不会出现在单个请求的 Tests 标签页里,必须右键点击文件夹 → Edit → 切换到 Tests 页签才能编辑。很多人误以为“在某个请求里写了断言,同文件夹下其他请求也会自动继承”,其实不会——只有明确在文件夹的 Tests 中写的脚本,才会对它内部所有请求生效。
常见错误现象:
– 写完断言后运行整个文件夹,Test Results 里没看到对应断言项
– 单个请求测试通过,但跑文件夹时状态码校验失败却不报错
– 断言逻辑实际没执行,因为脚本被写在了请求层级而非文件夹层级
- 文件夹级断言运行时机:每个子请求响应返回后,**立即执行一次**该文件夹的
Tests脚本(不是只执行一次) - 作用域隔离:文件夹
Tests中定义的变量(如let token = ...)无法被子请求的Tests直接访问,反之亦然 - 调试技巧:用
console.log()打印日志,在 Postman Console(View → Show Postman Console)里查看是否触发
用 pm.test() 写文件夹断言比 tests[] 更可靠
虽然两种语法目前都支持,但 tests["xxx"] = ... 在文件夹级断言中容易因异步或作用域问题失效,尤其当多个子请求并发执行时,tests 对象可能被覆盖或未及时刷新。推荐统一使用 pm.test() 形式,它是基于 Chai 的 BDD 风格,自带描述性名称和独立执行上下文。
示例:统一校验所有子请求返回 JSON 且状态码为 200 或 201
pm.test("Response is JSON and status in [200, 201]", function () {
pm.response.to.be.json;
pm.expect(pm.response.code).to.be.oneOf([200, 201]);
});
- 不要用
responseCode.code(旧语法),它在文件夹级有时读不到值;优先用pm.response.code或pm.response.status - 如果需要校验响应头(比如
X-RateLimit-Remaining),记得加空值判断:pm.expect(pm.response.headers.get("X-RateLimit-Remaining")).to.exist; - 避免在文件夹
Tests中调用pm.sendRequest(),这会阻塞后续请求执行,且不被官方推荐用于断言场景
环境变量提取 + 文件夹断言组合时,注意执行顺序陷阱
文件夹断言本身不能设置环境变量供同级子请求使用——因为子请求的 Pre-request Script 在文件夹 Tests **之前**就已执行完毕。也就是说,你不能指望在文件夹 Tests 里解析出 access_token,然后让下一个子请求自动带上它。
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
正确做法是把变量提取逻辑放在**子请求自己的 Tests 里**,并配合环境变量作用域管理:
- 登录请求的
Tests中写:pm.environment.set("auth_token", pm.response.json().token); - 后续请求的
Authorization设置为Bearer {{auth_token}} - 文件夹级断言只做「通用校验」,比如所有接口都应返回
Content-Type: application/json,或响应时间 - 若需跨请求传递中间值(如分页游标),建议用全局变量
pm.globals.set(),但要小心污染其他集合
文件夹断言不支持跳过个别请求,但可用 pm.info.requestName 过滤
Postman 没有原生的「忽略某请求的文件夹断言」开关。如果你有一个健康检查接口(如 /health)返回 204,而其他接口都应是 200/201,硬套统一状态码断言就会失败。
解决办法是手动判断请求名,跳过特定逻辑:
if (pm.info.requestName !== "GET /health") {
pm.test("Status code is 200 or 201", function () {
pm.expect(pm.response.code).to.be.oneOf([200, 201]);
});
}
-
pm.info.requestName返回的是你在 Postman 里给该请求起的名字(不是 URL),确保命名清晰、无空格或特殊字符 - 不要用 URL 路径做判断(如
pm.request.url.path),因为带参数时路径不固定,且不同环境 base URL 可能不同 - 这种条件分支不宜嵌套过深,超过 2 层建议拆成独立文件夹,保持断言职责单一
文件夹断言真正难的不是语法,而是厘清「谁在什么时候读取什么数据」——尤其是当多个层级(集合 → 文件夹 → 请求)都有 Tests 时,执行顺序和变量可见性很容易串扰。最稳妥的做法是:文件夹断言只做轻量、无副作用的验证,重逻辑(如 token 提取、数据关联)一律下沉到具体请求内。










