【问题标题】:Postman conditional tests if json body array is empty = skip tests如果 json 正文数组为空,则 Postman 条件测试 = 跳过测试
【发布时间】:2020-01-25 11:09:41
【问题描述】:

我想将 Postman/Newman API 测试集成到 CICD 中,因此测试结果应始终通过(或跳过)。因此,我想根据响应的数据使用条件测试。

我尝试了GitHub上描述的方法,但我的情况却大不相同。

因此,如果响应的 json 正文包含一个空数组,则应跳过测试。如果没有,请执行测试...

空数据

{
    "data": []
}

可测试的数据

{
    "data": [
        {
            "key1": "value1",
            "key2": {
                "amount": 1357,
                "unit": "units"
            },
            "from": "2019-08-01",
            "to": "2019-08-31",
        }
    ]
}

测试脚本

let response = JSON.parse(responseBody);

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

(pm.expect(pm.response.json().data).to.be.empty === true ? pm.test.skip : pm.test)('Body is empty', function () {
    pm.environment.set("key2Amount", response.data[0].key2.amount);
    var key2Amount = pm.environment.get("key2Amount");

    pm.test("Response includes corresponding amount", function () {
       pm.expect(pm.response.json().data[0].key2.amount).to.eql(key2Amount);
    });
});

空数据:TypeError: Cannot read property 'key2' of undefined

可测试数据:AssertionError: expected [ Array(1) ] to be empty

我也试过了

(pm.expect([]).to.be.an('array').that.is.empty ? pm.test : pm.test.skip)

可测试数据:测试结果为阳性。

空数据:TypeError: Cannot read property 'key2' of undefined。为什么不跳过?

进一步

(pm.expect([]).to.be.empty ? pm.test.skip : pm.test)

空数据:跳过的测试

可测试数据:跳过的测试

使测试运行或跳过的数组的正确条件是什么?

【问题讨论】:

    标签: javascript postman postman-testcase


    【解决方案1】:

    你能用这样的东西吗:

    let response = pm.response.json();
    
    pm.test("Status code is 200", function() {
      pm.expect(pm.response.code).to.equal(200);
    });
    
    let skipTest = (response.data === undefined || response.data.length === 0);
    
    (skipTest ? pm.test.skip : pm.test)('Body is empty', function () {
        pm.environment.set("key2Amount", response.data[0].key2.amount);
    
        pm.test("Response includes corresponding amount", function () {
          pm.expect(response.data[0].key2.amount).to.eql(pm.environment.get("key2Amount"));
        });
    });
    

    【讨论】:

    • 感谢丹尼的快速回复!乍一看,它似乎运行良好!
    • 别担心,我有点不确定你在测试什么。那只是从响应中获取值,然后根据响应的值检查它 - 这总是正确的吗?
    • 就是这样。我正在使用实时数据进行测试,因此每次发送请求时响应值都不同。我没有更好的想法来测试它,你呢?我们对模拟数据进行了单独的单元测试,所以大部分代码也被覆盖了。
    • 这并不是一个真正的测试,因为它正在检查自己的值,无论返回什么都会通过,所以它永远不会失败。它永远不会告诉你任何新的东西。就像说你pm.expect(1).to.equal(1) - 这永远是真的。价值重要吗?或者它不是空的、未定义的、数字等的事实。
    • 真实故事。但它只适用于这些类型的测试,我还有其他的在响应中需要明确的值。但是,是的,我最好测试值的类型(字符串、数字、日期……)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 2018-08-15
    • 2018-06-15
    相关资源
    最近更新 更多