【问题标题】:Use If condition in Karate to extract values在空手道中使用 If 条件提取值
【发布时间】:2020-09-07 09:18:39
【问题描述】:

我有以下 JSON 响应 -

    {
        "type": "StudentSchema",
        "version": 1,
        "students": [
            {
                id: 1,
                name: "John",
                roll: "1234"
            },
            {
                id: 2,
                name: "David",
                roll: "4434"
            }
        ]
}

那么如何在空手道中提取名为 John 的数组以进行进一步验证? 例如我想说如果 name == John 然后保存 id

我正在下面尝试,但它似乎不起作用 -

* def userId =  get[0] response $[?(@students.name == 'John')].id
* match userId == 2

【问题讨论】:

    标签: bdd karate


    【解决方案1】:

    假设你的 JSON 是

    MyJson =  {
        "type": "StudentSchema",
        "version": 1,
        "students": [
            {
                id: 1,
                name: "John",
                roll: "1234"
            },
            {
                id: 2,
                name: "David",
                roll: "4434"
            }
        ]
    }
    

    现在您要获取姓名为 john 的学生的 ID,您可以使用 JSON 路径获取它

    * def JSONpath = '$..students[?(@.name=='John')].id'
    * def userId = karate.jsonPath(MyJson,JSONpath)
    

    它将为您提供一个满足 json 路径条件的 ID 数组,您可以从中进行断言。

    【讨论】:

    • 是的,这也可以* def id = get[0] response.students[?(@.name=='John')].id
    • 非常感谢@PeterThomas 假设我的 json 嵌套了 1 层,如下所示,我需要获取关键数学的“详细信息” - {“type”:“StudentSchema”,“version”:1, “学生”:[{“id”:1,“姓名”:“John”,“roll”:“1234”,“科目”:[{“key”:“数学”,“代码”:“11”, "details": "Mathematics" } ] } ] } 我可以用一个表达式来实现吗?
    • @Sayan 请将此答案标记为已接受。答案是肯定的,请参阅:stackoverflow.com/a/63774964/143475 - 如果需要,请提出另一个问题
    猜你喜欢
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2018-10-25
    相关资源
    最近更新 更多