我想检查具体响应头(“Location”)中的值作为Postman中的测试结果。 在Postman的文档中,我找到了如何使用
检查标题存在的示例pm.test("Content-Type is present", function () {
pm.response.to.have.header("Content-Type");
});
但我正在寻找的是像
pm.test("Location value is correct", function () {
CODE HERE THAT CHECKS "Location" HEADER EQUALS TO SOMETHING;
});
答案 0 :(得分:22)
我终于找到了解决方案:
pm.test("Redirect location is correct", function () {
pm.response.to.have.header("Location");
pm.response.to.be.header("Location", "http://example.com/expected-redirect-url");
});
答案 1 :(得分:5)
这是在“测试”部分中提取特定响应标头的另一种方式...
loc = pm.response.headers.get("Location");
以防万一,如果后续请求需要特定信息(例如标头值),那么您还可以如下将其存储/设置为环境变量,然后进一步重用
pm.environment.set("redirURL", loc);
var loc = null;
pm.test("Collect redirect location", function () {
pm.response.to.have.header("Location");
loc = pm.response.headers.get("Location");
if (loc !== undefined) {
pm.environment.set("redirURL", loc);
}
});
优点是-可以操纵变量中收集的值。
但这全取决于情况。就像,您可能想要提取并预处理/后处理重定向URL。
例如,
在运行测试集合时,您希望将值收集在变量中,并将其更改为指向模拟服务器的 host:port 。
答案 2 :(得分:0)
HeadersList具有方法has(item, valueopt) → {Boolean}
,因此检查标头的最简单方法是:
const base_url = pm.variables.get("base_url")
pm.test("Redirect to OAuth2 endpoint", () => {
pm.expect(pm.response.headers.has("Location",`${base_url}/oauth2/`)).is.true
})
答案 3 :(得分:0)
pm.test("Location value is correct", function () {
pm.expect(pm.response.headers.get('Location')).to.eql('http://google.com');
});
答案 4 :(得分:0)
Postman 也支持 ES6/ES2015 语法,允许我们使用箭头函数。
下面是一个简单的测试来验证通用响应头是否存在:
pm.test("Verify response headers are present ", () => {
pm.response.to.have.header("Date");
pm.response.to.have.header("Content-Length");
pm.response.to.have.header("Content-Type");
});
当然,您可以检查您的 API 可能返回的任何自定义标头。
答案 5 :(得分:0)
使用 BDD 期望/应该样式:
pm.test("Redirect location is correct", () => {
pm.expect(pm.response).to.include.header("Location");
pm.expect(pm.response).to.have.header("Location", "http://example.com/expected-redirect-url");
});