【问题标题】:How can I use multiple pm.expect in one pm.test in postman tests如何在邮递员测试中在一个 pm.test 中使用多个 pm.expect
【发布时间】:2021-05-27 14:33:09
【问题描述】:

我想检查请求是否有一个字符串,然后响应必须在邮递员中包含这个字符串。我写了一个这样的测试,但它对我不起作用。我不确定我是否可以在有条件的一项测试中使用多个 pm.expect。我的代码是

pm.test("test",function(){
var hasA = data.hasOwnProperty('A');
var hasB = data.hasOwnProperty('B');
if(hasA === true){
        pm.expect(response.A).to.eql(data.A);      
}
if(hasB === true){
        pm.expect(response.B).to.eql(data.B);      
}});

请求可以同时包含 A 和 B,所以我不能使用 if..else 语句。当我运行此测试时,如果 hasA 标志为真,那么即使 hasB 选项为真,代码也不会进入第二次。我该如何处理这个问题。有人可以帮忙吗?

【问题讨论】:

  • 你怎么我没有转到下一个?
  • 我不明白你的意思,但我明白“你怎么说我不去下一个?”从你的问题。当两个布尔值都为真时,我在每个 if 和第二个 if 中添加了一个日志,如果日志不写入控制台。抱歉,如果我误解了您的问题。
  • 那么在这种情况下,期望条件通过还是失败? Expect 是一个硬断言,因此如果除失败之外它不会转到下一行
  • 即使 A 失败,我也想检查 B。那我该怎么做呢?有没有办法做到这一点?也许它没有必要,但我想知道有什么办法。谢谢你的帮助。

标签: javascript postman


【解决方案1】:

expect 是硬断言,所以如果一个失败,那么它不会转到下一个,因此您可以使用以下任何一种方法:

尝试以下条件:

pm.test("test", function () {

    var hasA = data.hasOwnProperty('A');
    var hasB = data.hasOwnProperty('B');
    var hasBoth = hasA && hasB
    if (hasBoth) {
        pm.expect([response.A, response.B]).to.eql([data.A, data.B]);
    } else if (hasA) {
        pm.expect(response.A).to.eql(data.A);
    } else if (hasB){
        pm.expect(response.B).to.eql(data.B);
    }
});

尝试像这样捕获:

pm.test("test", function () {

    var hasA = data.hasOwnProperty('A');
    var hasB = data.hasOwnProperty('B');
    let error = {};
    try {
        if (hasA) {
            pm.expect(response.A).to.eql(data.A);
        }
    } catch (e) {
        error.A = e
    }
    try {
        if (hasB) {
            pm.expect(response.A).to.eql(data.A);
        }
    } catch (e) {
        error.B = e
    }

    if(Object.keys(error).length){
        pm.expect.fail(JSON.stringify(error))
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-01
    • 2020-12-21
    • 2021-09-09
    • 2018-06-14
    • 1970-01-01
    • 2021-05-12
    • 2014-07-09
    • 2020-07-13
    相关资源
    最近更新 更多