如何在Postman的新pm。* API中使用条件语句?

时间:2017-10-25 10:27:51

标签: testing postman chai

我有一个关于如何使用带有条件语句的新pm。* API的问题。请查看以下示例代码

if(pm.test("Status code is 200", function() {pm.expect(pm.response.code).to.equal(300);
})){

var token = pm.response.headers.get("Authorization");
pm.environment.set("JWT Token", token.substr(7));

pm.test("Response body is empty ", function () {
    pm.expect(pm.response.text().length).to.equal(0);
});
}

console.log(pm.test("Status code is 200", function() {pm.expect(pm.response.code).to.equal(300)}));

我可能想要进行某些测试,例如只有当200返回时我才想使用if。但是,当我故意将等值更改为300以检查是否有效时,即使第一次测试失败,也会运行两个测试并设置变量。

对于断言,console.log返回一个空对象而不是true / false。如果我使用像

这样的东西
console.log(pm.expect(pm.response.code).to.equal(300));

我收到一条错误消息:评估测试脚本时出错:AssertionError:预计200到300等等

有谁知道如何解决这个问题?

干杯

2 个答案:

答案 0 :(得分:9)

我也曾在邮递员的github上问过这个问题而且我得到了帮助。显然pm.test不会返回测试结果,因为你可以在一个pm.test中有多个断言,并且这些断言是异步执行的。

以下代码按预期工作:

pm.test("Status code is 200", function() {
  pm.expect(pm.response.code).to.equal(200);
});

(pm.response.code===200 ? pm.test : pm.test.skip)("Response body is empty", function () {

    pm.expect(pm.response.text().length).to.equal(0);

    var token = pm.response.headers.get("Authorization");
    pm.environment.set("JWT Token", token.substr(7));
});

答案 1 :(得分:2)

如果您要在此处执行的所有操作是如果响应代码不是200,则跳过其余测试,则可以执行以下操作:

pm.test("Status code is 200", function() {
    pm.expect(pm.response.code).to.equal(200);
});

if (pm.response.code !== 200) {
    return;
}

// Tests that require 200 could continue here