Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Karate 基于JSON响应的空手道轮询_Karate - Fatal编程技术网

Karate 基于JSON响应的空手道轮询

Karate 基于JSON响应的空手道轮询,karate,Karate,我正在数据库中创建一个动物,然后试图检索我刚刚创建的动物。但是,数据库中存在5-10秒的时滞。因此,由于响应时间不同,睡眠等待不适合此场景 我想轮询消息,直到数组中返回animalId。在重新尝试请求时,重新生成requestId头也很重要 实现这一目标最优雅的方式是什么 情景: Given path '/animals' And header requestId = uniqueString(5) When method post Then status 200

我正在数据库中创建一个动物,然后试图检索我刚刚创建的动物。但是,数据库中存在5-10秒的时滞。因此,由于响应时间不同,睡眠等待不适合此场景

我想轮询消息,直到数组中返回animalId。在重新尝试请求时,重新生成requestId头也很重要

实现这一目标最优雅的方式是什么

情景:

    Given path '/animals'
    And header requestId = uniqueString(5)
    When method post
    Then status 200
    * def animalId = response.animalId

    Given path '/animals'
    And header requestId = uniqueString(5)
    When method get
    Then status 200


    {
        "animals": [
            {
                "animalId": "12219958",
                "reference": [
                    "12345"
                ]
            }
        ]
    }

    * def animalDetails = karate.jsonPath (response, "$.animals.[?(@.reference[0]== '" + animalId + "' )]")[0]
    * def animalId = '12345'

您要查找的是
重试直到
语法:

编辑:关于此要求:

在重新尝试请求时,重新生成requestId头也很重要

您必须使用JavaScript函数,这样每次重试都会触发它。否则,没有其他选项来调整主体,如果需要,请手动编写轮询循环(也在文档中解释)

编辑:下面是一个简单的示例,让您自己看看
foo
头在每次重试时是如何动态的。将此粘贴到一个新的
场景中
,它就会起作用

* def counter = { value: 0 }
* configure headers = function(){ return { foo: counter.value } }
* url 'http://httpbin.org/get'
* retry until counter.value++ == 2
* method get

您要查找的是
重试直到
语法:

编辑:关于此要求:

在重新尝试请求时,重新生成requestId头也很重要

您必须使用JavaScript函数,这样每次重试都会触发它。否则,没有其他选项来调整主体,如果需要,请手动编写轮询循环(也在文档中解释)

编辑:下面是一个简单的示例,让您自己看看
foo
头在每次重试时是如何动态的。将此粘贴到一个新的
场景中
,它就会起作用

* def counter = { value: 0 }
* configure headers = function(){ return { foo: counter.value } }
* url 'http://httpbin.org/get'
* retry until counter.value++ == 2
* method get

谢谢你的回答。你能提供一个在功能文件中的示例吗?还有一个函数示例(如果可能的话),假设重新生成的头是一个5位数的随机字符串。@zwanchi101在这里:-您上面共享的资源非常有用。但是,当我使用
retry till
语法时,尽管在后台使用
configure headers
,该函数仍不会触发。没有触发唯一的请求id,并且在循环的迭代2上使用了上一个值。有什么想法吗?@zwanchi101查看我的编辑,你可以看到
foo
标题被发送了不同的值。谢谢你的回答。你能提供一个在功能文件中的示例吗?还有一个函数示例(如果可能的话),假设重新生成的头是一个5位数的随机字符串。@zwanchi101在这里:-您上面共享的资源非常有用。但是,当我使用
retry till
语法时,尽管在后台使用
configure headers
,该函数仍不会触发。没有触发唯一的请求id,并且在循环的迭代2上使用了上一个值。有什么想法吗?@zwanchi101查看我的编辑,您可以看到
foo
标题以不同的值发送。请将答案标记为已接受:请将答案标记为已接受: