Karate 使用Retry-until和JSON路径计算

Karate 使用Retry-until和JSON路径计算,karate,web-api-testing,Karate,Web Api Testing,我正在尝试使用retry-until语法构建轮询功能。我的测试在两种情况下使用重试 第一个方案很好,但第二个重试方案总是失败。使用msg重试次数过多:2次 下面是我的功能的外观 Given path brokerResult.activationPlan And header Authorization = oauthToken When method get Then status 200 And retry until response.blocks == '

我正在尝试使用retry-until语法构建轮询功能。我的测试在两种情况下使用重试

第一个方案很好,但第二个重试方案总是失败。使用msg
重试次数过多:2次

下面是我的功能的外观

Given path brokerResult.activationPlan
    And header Authorization = oauthToken
    When method get
    Then status 200
    And retry until response.blocks == '#[13]' && karate.jsonPath(response, "$.blocks[?(@.block_status=='ACTIVE')]")== '#[3]'
执行更多场景以更改状态

 Given path brokerResult.activationPlan
    And header Authorization = oauthToken
    When method get
    Then status 200
    And retry until karate.jsonPath(response, "$.blocks[?(@.block_status=='FINISHED')]") == '#[3]'
在这里,这种情况总是失败

我是空手道版本:0.9.2

我的问题是JSON路径评估是否与重试一起工作,直到我在第一个场景中假设是这样。要使第二个场景正常工作,我缺少的是什么。

否,JSON路径或“模糊匹配”标记在
重试之前不起作用

请阅读此答案以了解更多解释:

这应该给你一个提示来解决你的问题:

* def isActive = function(x){ var temp = karate.jsonPath(x, "$.blocks[?(@.block_status=='ACTIVE')]"); return temp.length == 3 }
* def response = { blocks: [{ block_status: 'ACTIVE' }, { block_status: 'ACTIVE' }, { block_status: 'ACTIVE' }] }
* def result = isActive(response)
* match result == true

我不确定是否可以使用
标记
进行不匹配的js评估。但是我很惊讶地看到它在第一个场景中起了作用,你能试着使用karate.match(karate.jsonPath(response,“$.block[?(@.block_status='FINISHED')]”,“$.block[3]”通过
marker
我的意思是
“#[3]”
,请改为
karate.match(karate.jsonPath(response,“$.blocks[?(@.block_status='FINISHED')”)”)”),“$.通过