我正在发送一个从后端获取API ID的请求,但是由于我的后端很慢,因此无法一次性返回ID,这使我的测试用例在第一次尝试中失败了。虽然如果我再试一次,它会通过,但这并不是理想的方法。我试着睡一觉,但这看起来也不是很有希望。
我的测试用例是:
给出URL storeURL
参数查询=
方法获取时
然后状态为200
调用read('Sleep.feature')
def APIIDStr = response.list [0] .id
从商店打印'APIID是:',APIIDStr
我可以在这里做些什么,以便如果APIIDStr在第一次执行时为空,它将尝试再次获取直到获得有效值?
答案 0 :(得分:1)
是的。请参考有关如何使用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);
}
}
答案 1 :(得分:0)
以下代码现在可以正确运行:
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
非常感谢!