如何重试请求,直到我使用空手道 dsl 获得有效的动态生成的响应值

How to retry a request until i get a valid dynamically generated value in response using karate dsl

我正在发送从后端获取 API ID 的请求,但由于我的后端速度很慢,它不会一次性返回 ID,这导致我的测试用例在第一次尝试时失败。虽然如果我再试一次它会通过,但这并不是理想情况下应该起作用的。我试过睡一觉,但看起来也不太好。

我的测试用例是:

鉴于URL商店URL

并且参数查询=

方法获取时

然后状态200

我可以在这里做点什么吗?如果 APIIDStr 第一次为空,它会尝试再次获取直到获得有效值?

是的。 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);
  }
}

编辑 - 另见:

下面的代码现在可以正确运行:

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方法可以重试-post场景(它可以自动检查状态)。

或:

...
* 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

非常感谢!