Как повторить запрос, пока я не получу действительное динамически сгенерированное значение в ответ, используя dsl каратэ - PullRequest
0 голосов
/ 10 сентября 2018

Я отправляю запрос на получение идентификатора API из бэкэнда, но из-за того, что мой бэкэнд медленный, он не возвращает идентификатор за один раз, и это делает мой тестовый случай неудачным с первой попытки. Хотя это проходит, если я пытаюсь снова, но это не идеально, это должно работать. Я пытался заснуть, но это тоже не выглядит многообещающим.

Мой тестовый пример:

Данный URL storeURL

И запрос param =

Когда метод получить

Тогда статус 200

  • вызов прочитан ('Sleep.feature')

  • def APIIDStr = response.list [0] .id

  • печать 'APIID из магазина:', APIIDStr

Могу ли я сделать что-то здесь, чтобы, если APIIDStr пуст с первого раза, он пытался извлечь снова, пока не получит правильное значение?

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Теперь можно правильно запустить следующий код:

Feature:
  Background:
  * url 'url'

  Scenario:
  * def input =
  """
  {
    'form': {},
    'query': {},
  }
  """
  * path '/rest/n/test'
  * params input.query
  * form fields input.form
  * method post
  * status 200
  * math response contains { result: 1 }
  * eval if (response.result != 1) karate.call('delete-user.feature'))

Итак, я надеюсь, что retryPost метод, который может повторить сценарий (он может автоматически проверять состояние).

или

...
* eval if (responseStatus == 5xx) retryPost/retryGet/retryPut
* eval if (response.result != 1) retryPost/retryGet/retryPut

Здесь retryPost/retryGet/retryPut только повторно запустите код раздела.

например:

Feature:
  Background:
  * url 'url'

  Scenario:
  # section 1
  ...
  * method post
  * eval if () retryPost # only re-run section 1

  # section 2
  ...
  * method post
  *eval if () retryPost # only re-run section 2

Большое спасибо!

0 голосов
/ 10 сентября 2018

Да. Пожалуйста, обратитесь к документации о том, как реализовать опрос с использованием JavaScript: https://github.com/intuit/karate#polling

function(x) {
  while (true) {
    var result = karate.call('get.feature');
    var greeting = result.response;
    karate.log('poll response', greeting);
    if (greeting.id == x) {
      karate.log('condition satisfied, exiting');
      return;
    }
    karate.log('sleeping');
    // uncomment / modify the sleep time as per your wish
    // java.lang.Thread.sleep(1000);
  }
}
...