如何修改Postman健康检查脚本以兼容预期的503响应
解决方案
你需要调整测试逻辑,允许两种合法场景:
- 正常情况:响应状态码200,顶级
status为"OK" - 预期异常:响应状态码503,顶级
status为"DOWN"且services.stats.status为"503"
修改后的脚本如下:
pm.test("状态码合法", function () { const statusCode = pm.response.code; const jsonData = pm.response.json(); // 允许状态码为200或503 pm.expect(statusCode).to.be.oneOf([200, 503]); if (statusCode === 503) { // 503场景下必须满足顶级status为DOWN,且stats服务返回503 pm.expect(jsonData.status).to.eql("DOWN"); pm.expect(jsonData.services?.stats?.status).to.eql("503"); } else { // 200场景保持原校验逻辑 pm.expect(jsonData.status).to.eql("OK"); } }); pm.test("服务状态符合预期", function () { const jsonData = pm.response.json(); const statusCode = pm.response.code; if (statusCode === 200) { // 正常状态下所有服务必须返回200 Object.values(jsonData.services).forEach(service => { pm.expect(service.status).to.eql("200"); }); } else if (statusCode === 503) { // 仅允许stats服务返回503,其余服务必须正常 Object.entries(jsonData.services).forEach(([name, service]) => { if (name === "stats") { pm.expect(service.status).to.eql("503"); } else { pm.expect(service.status).to.eql("200"); } }); } });
逻辑说明
- 合并原有的状态码与顶级
status校验,通过oneOf允许两种合法状态码 - 针对503场景增加专属校验规则,确保只有stats服务返回预期的503状态
- 细化服务状态校验:正常场景下所有服务必须正常;异常场景仅stats可返回503,其余服务仍需保持可用
- 使用
?.可选链操作符避免stats服务不存在时抛出错误(若Postman版本不支持,可替换为jsonData.services && jsonData.services.stats)
内容的提问来源于stack exchange,提问作者bob
相关产品推荐
相关产品推荐

