如何重试请求,直到我使用空手道 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
调用读取('Sleep.feature')
def APIIDStr = response.list[0].id
打印'APIID from Store is: ',APIIDStr
我可以在这里做点什么吗?如果 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
非常感谢!
我正在发送从后端获取 API ID 的请求,但由于我的后端速度很慢,它不会一次性返回 ID,这导致我的测试用例在第一次尝试时失败。虽然如果我再试一次它会通过,但这并不是理想情况下应该起作用的。我试过睡一觉,但看起来也不太好。
我的测试用例是:
鉴于URL商店URL
并且参数查询=
方法获取时
然后状态200
调用读取('Sleep.feature')
def APIIDStr = response.list[0].id
打印'APIID from Store is: ',APIIDStr
我可以在这里做点什么吗?如果 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
非常感谢!