如果json正文数组为空,则进行邮递员条件测试=跳过测试

时间:2019-09-25 09:29:24

标签: javascript postman postman-testcase

我想将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)

空数据:已跳过测试

可测试的数据:跳过的测试

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

1 个答案:

答案 0 :(得分:0)

您可以使用这样的东西吗?

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"));
    });
});