Postman测试脚本:如何调用API两次模拟409错误场景
在单个Postman测试中验证409重复资源错误
能不能在单个测试里完成?
完全可以。Postman自带的pm.sendRequest() API支持在当前请求的测试脚本中发起额外HTTP请求,不用拆分两个依赖测试用例就能完成从创建资源到验证重复提交的全流程。
具体实现方法
1. 先配置基础请求
在Postman里创建POST请求,URL填POST /myservice/books,写好创建资源的请求体(要确保请求体里有唯一标识字段,比如isbn或uniqueBookName,这样重复提交才会触发409)。
2. 编写测试脚本
在请求的「Tests」标签里写以下脚本,逻辑分三块:验证首次创建成功、发起重复请求、验证409错误:
// 第一步:验证第一次请求成功创建资源 pm.test("首次请求成功创建资源", function () { pm.response.to.have.status(201); // 大部分创建接口返回201,根据你的API实际情况调整成200或其他 // 可选:进一步验证响应体里有资源ID,确保资源真的创建了 pm.response.to.be.json; pm.expect(pm.response.json().id).to.exist; }); // 第二步:发起重复创建请求并验证409 pm.test("重复创建返回409错误", async function () { // 直接复用当前请求的配置,不用手动写重复的headers和请求体 const duplicateReq = { url: pm.request.url.toString(), // 用当前请求的完整URL method: "POST", header: pm.request.headers.toJSON(), // 继承当前请求的请求头 body: pm.request.body.toJSON() // 继承当前请求的请求体 }; // 发送重复请求 const res = await pm.sendRequest(duplicateReq); // 验证状态码是409 pm.expect(res.code).to.equal(409); // 可选:验证响应体的错误提示,比如包含"资源已存在"这类关键词 pm.expect(res.json().message).to.include("已存在"); });
一些关键细节
- 用
async/await处理异步:pm.sendRequest是异步操作,用async函数配合await能让代码逻辑更顺,不用嵌套回调。 - 复用请求配置:直接用
pm.request的属性复制当前请求的headers和body,避免重复编写,后续修改请求体时脚本也不用改。 - 如果你的API域名存在环境变量(比如
baseUrl),可以把pm.request.url.toString()换成pm.environment.get("baseUrl") + "/myservice/books",适配不同环境。
回调写法(不习惯async/await可以用这个)
pm.test("重复创建返回409", function (done) { const duplicateReq = { url: pm.request.url.toString(), method: "POST", header: pm.request.headers.toJSON(), body: pm.request.body.toJSON() }; pm.sendRequest(duplicateReq, function (err, res) { if (err) { done(err); return; } pm.expect(res.code).to.equal(409); done(); }); });
内容的提问来源于stack exchange,提问作者Mopparthy Ravindranath
相关产品推荐
相关产品推荐

