Опрос по каратэ на основе ответа JSON - PullRequest
1 голос
/ 06 марта 2020

Я создаю животное в базе данных, а затем пытаюсь извлечь животное, которое я только что создал. Тем не менее, в базе данных есть временная задержка ~ 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'

1 Ответ

0 голосов
/ 06 марта 2020

Синтаксис retry until - это то, что вы ищете: https://github.com/intuit/karate#retry до

РЕДАКТИРОВАТЬ: в соответствии с этим требованием:

Это также важно, чтобы заголовок requestId был заново сгенерирован при повторной попытке запроса.

Вам необходимо configure headers с функцией JavaScript, чтобы она запускалась при каждой повторной попытке. В противном случае нет никакой другой опции для настройки тела, пожалуйста, вручную напишите опрос l oop, если необходимо (также объяснено в документации).

РЕДАКТИРОВАТЬ: вот простой пример, чтобы увидеть, как Заголовок foo является динамическим c для каждой попытки. Вставьте это в fre sh Scenario, и оно будет работать.

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