Karate 空手道-我怎样才能传递参数作为钥匙?

Karate 空手道-我怎样才能传递参数作为钥匙?,karate,Karate,我有以下情况,需要使用firstKeyStr作为密钥,我的代码现在将“#firstKeyStr”视为密钥,而不是存储在其中的密钥 代码 Given path '/api/v1/sites' When method get Then status 200 And match response.success == true And match response.data == "#object" * def keys = karate.keys

我有以下情况,需要使用firstKeyStr作为密钥,我的代码现在将“#firstKeyStr”视为密钥,而不是存储在其中的密钥

代码

Given path '/api/v1/sites'

When method get

Then status 200
    
And match response.success == true
    
And match response.data == "#object"
    
* def keys = karate.keysOf(response.data)
    
* def firstKeyStr = keys[0]

And match response.data."#firstKeyStr" == "#object"
Json响应正文

{

"success": true,

    "data": {

        "5ef34d0ca5a3c56ae14d2a23": {

            "devices": [

                "5f03192010a47f3e5b714193"

            ],

            "groups": [   
       
                "5f0d9f30ef89e22778a2d230"

            ],

            "users": [],

            "triggers": [],

            "alerts": [

                "5f0d92b967bac60b84d3989b"

            ],

            "name": "test",

            "country": "US",
            ]
        }
}

我正在寻找一种在此行中传递此动态键(5ef34d0ca5a3c56ae14d2a23)的方法(并匹配response.data.“#firstKeyStr”==“#object”)

使用圆括号,以便使用JS而不是JsonPath:

* def response = { data: { a: 1, b: 2 } }
* def keys = karate.keysOf(response.data)
* def first = keys[0]
* match (response.data[first]) == 1

由于您是堆栈溢出新手,请阅读以下内容以获得最佳帮助:

正如Peter所说,您的JSON格式不好,并且不能保证键的顺序(除非您只有一个键)。下面的代码应该可以帮助您继续

示例代码:

Feature: firstKey

Scenario: firstKey
    * def resp = 
    """
    {

    "success": true,
        "data": {
            "5ef34d0ca5a3c56ae14d2a23": {
                "devices": [
                    "5f03192010a47f3e5b714193"
                ],
                "groups": [   
           
                    "5f0d9f30ef89e22778a2d230"
                ],
                "users": [],
                "triggers": [],
                "alerts": [
                    "5f0d92b967bac60b84d3989b"
                ],
                "name": "test",
                "country": "US"
                }
            }
    }
    """
        
    And match resp.data == "#object"
    * def keys = karate.keysOf(resp.data)
    * def firstKeyStr = keys[0]
    * print firstKeyStr
    * print (resp.data[firstKeyStr])

    And match (resp.data[firstKeyStr]) == "#object"

没用。在我的例子中,firstKeyStr是一个动态客户id,类似于返回的5ef34d0ca5a3c56ae14d2a23,并在数据中包含响应object@Orjuwan我要放弃了。你的例子很不完整,我试着猜。所以按照这个过程:@PeterSmith我在我的问题中添加了更多细节,希望现在清楚了,谢谢you@Orjuwan不,我试过了,你的json格式不好。我还觉得这是一种糟糕的测试方式,json中的键顺序无法保证。请阅读
上的文档,并对每个文档进行匹配。我请求这里的其他空手道用户帮助您,我知道这是API返回的json的一部分(不是完整的),我添加它是为了解释这里的键是动态的,我不能定义resp,因为我猜不到键。您不需要定义响应。这只是一个示例代码,用于验证第一个键的值是否为有效的JSON对象,这是您在问题中的目标。你需要根据你的实际反应来调整它。哦,我明白了,谢谢你,它成功了,我是空手道新手,只用了几个星期。