【问题标题】:How to check a particular value on basis of condition in karate如何根据空手道的条件检查特定值
【发布时间】:2021-11-21 12:43:45
【问题描述】:

目标:匹配 check 值对于 API 中的 123S123O 响应是正确的

首先检查此位置上的值x.details[0].user.school.name[0].codeable.text是否为123S,然后检查x.details[0].data.check的值是否为abc

然后检查此位置上的值x.details[1].user.school.name[0].codeable.text 是否为123O 然后检查x.details[1].data.check 是否为xyz

数组间的响应改变它不是强制性的第一个元素是123S有时API返回123O作为第一个数组响应。

示例 JSON。

{
    "type": "1",
    "array": 2,
    "details": [
        {
            "path": "path",
            "user": {
                "school": {
                    "name": [
                        {
                            "value": "this is school",
                            "codeable": {
                                "details": [
                                    {
                                        "hello": "yty",
                                        "condition": "check1"
                                    }
                                ],
                                "text": "123S"
                            }
                        }
                    ]
                },
                "sample": "test1",
                "id": "22222"
            },
            "data": {
                "check": "abc"
            }
        },
        {
            "path": "path",
            "user": {
                "school": {
                    "name": [
                        {
                            "value": "this is school",
                            "codeable": {
                                "details": [
                                    {
                                        "hello": "def",
                                        "condition": "check2"
                                    }
                                ],
                                "text": "123O"
                            }
                        }
                    ]
                },
                "sample": "test",
                "id": "11111"
            },
            "data": {
                "check": "xyz"
            }
        }
    ]
}

我在 Postman 中的表现如何,但如何在空手道中复制?

var jsonData = pm.response.json();

pm.test("Body matches string", function () {
    for(var i=0;i<jsonData.details.length;i++){
        if(jsonData.details[i].user.school.name[0].codeable.text == '123S')
        {
            pm.expect(jsonData.details[i].data.check).to.equal('abc');
        }
        if(jsonData.details[i].user.school.name[0].codeable.text == '123O')
        {
            pm.expect(jsonData.details[i].data.check).to.equal('xyz');
        }
    }
});

【问题讨论】:

    标签: karate


    【解决方案1】:

    2 行。这会处理任意数量的查找值组合:)

    * def lookup = { '123S': 'abc', '123O': 'xyz' }
    * match each response.details contains { data: { check: '#(lookup[_$.user.school.name[0].codeable.text])' } }
    

    【讨论】:

    • 太棒了。谢谢彼得。很高兴看到只有 2 行代码使它工作:)。这是否记录在某处或空手道演示项目中的任何示例?我不明白这里的逻辑 { data: { check: '#(lookup[_$.user.school.name[0].codeable.text])' } } 想了解它是否记录在案。
    • @Maddy 是的,这是 2-3 个概念的组合,但它都在文档中。从这里开始:github.com/karatelabs/karate#referring-to-self - 并阅读:stackoverflow.com/a/59162760/143475
    • 我添加了另一个相同的问题。也请指导一下。我们的实际 JSON 中有很多键,所以我提供了最小的一个来显示我们现在遇到的问题
    • @Maddy 抱歉。创建一个新问题。请记住,我应该可以粘贴并在本地尝试。如果我不能,你不会得到答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 2014-06-06
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    相关资源
    最近更新 更多