Karate 无法将变量值解析为数组变量

Karate 无法将变量值解析为数组变量,karate,Karate,我试图使用下面的空手道代码将变量“I”值传递给数组索引“locations[I]”。但是抛出一个错误,表示无法解析。如有任何变动,请提出建议 Feature: Verify Branches Background: For loop implementation Given url '' When method GET Then status 200 * def i = 0 * def z = $.locations[i].zip * def

我试图使用下面的空手道代码将变量“I”值传递给数组索引“locations[I]”。但是抛出一个错误,表示无法解析。如有任何变动,请提出建议

Feature: Verify Branches

Background: For loop implementation
    Given url ''
    When method GET
    Then status 200  
    * def i = 0
    * def z = $.locations[i].zip
    * def p = $.locations[i].phone
    * def fun = 
    """ 
    function(locations){ 
        for (var i = 0; i < locations.length; i++)
        {
            print(i)
            print('Element at Location ' + i +':' + p)
        }
    }
    """ 

Scenario: Validate the locations
    Given url ''
    When method GET
    Then status 200  
    * call fun p
功能:验证分支
背景:用于循环实现
给定url“”
当方法得到
然后状态200
*DEFI=0
*def z=$.locations[i].zip
*def p=$.locations[i]。电话
*def fun=
""" 
功能(位置){
对于(变量i=0;i
由于您没有提供
响应的值,因此很难理解任何内容。这里有很多错误。但我会努力的

以这条线为例:

* def z = $.locations[i].zip
这将不起作用,默认情况下,空手道不支持JsonPath中的变量,请参阅文档:

我认为您不必使用JsonPath,而普通JavaScript就足够了:

* def z = response.locations[i].zip
而且,您似乎只是在尝试循环一个数组并调用一个特性。请参阅上的文档

请花些时间阅读文档和示例,这将是值得您花费时间的。还有一个建议-在我离开之前,让你更好地理解空手道。如果需要,有一种方法可以将一个JSON数组转换为另一个JSON数组:

* def fun = function(x){ return { value: x } }
* def list = [1, 2, 3]
* def res = karate.map(list, fun)
* match res == [{ value: 1 }, { value: 2 }, { value: 3 }]

因此,您根本不需要手动执行
for
循环。

*def z=response.locations[i]。zip此代码对我有效。但是完整的代码并没有像预期的那样工作,数组计数是218,但我只能循环到9个位置,然后在控制台中得到下面的消息:“18:57:23.960[Finalizer]DEBUG org.apache.http.impl.conn.poollighttpclientconnectionmanager-连接管理器正在关闭[Finalizer]DEBUG org.apache.http.impl.conn.DefaultManagedHttpClient连接-http-outgoing-1:关闭连接18:57:23.960[Finalizer]DEBUG org.apache.http.impl.conn.PoolighttpClientConnectionManager-连接管理器关闭“@ManojKumarKotturi请查看我的上述评论,如果需要,请提出新问题,否则这会让每个人都困惑。当然,我会在这里发布一个新问题,好的,谢谢