我有一个功能可以测试场景,比如场景 A
Feature: Testsuite
Scenario: Scenario A
# calling a reusable helper file here
* def getProducts = call read('../helpers/get-products.feature')
如何在可重用帮助程序
retry until
文件上使用 get-products.feature
,而不直接将其包含在帮助程序功能的内容中?
也就是说,有什么方法可以实现类似的目标
retry call read('../helpers/get-products.feature') until response.status == "Complete."
是的,这可以完成,尽管重试逻辑需要位于 JavaScript 函数中,而不是使用空手道重试直到。
首先,您需要创建一个函数来处理重试逻辑并调用功能文件 ex.重试功能.js。该函数将采用 2 个参数,第一个参数是您要调用并执行重试的功能文件的路径,第二个参数是您要重试的次数
function retryFeatureCall(featurePath, maxAttempts) {
var attempts = 0;
var result;
while (attempts < maxAttempts) {
result = karate.call(featurePath);
if (result.responseStatus == 200) {
return result;
}
attempts++;
karate.log('Retry attempt:', attempts);
}
throw new Error('Max retry attempts reached');
}
现在您可以在主要功能中使用此功能来尝试对您调用的功能进行多次重试。下面将尝试分别调用该功能 5 次,仅在收到 200 响应代码时退出。
Scenario: Call feature with retry
* def retryFeatureCall = read('classpath:retryFeature.js')
* def result = retryFeatureCall('classpath:testFeature.feature', 5)
* match result.responseStatus == 200
您还可以从技术上删除函数中限制重试次数的逻辑,但不确定如果该方法最终没有完成,您将如何退出该方法。
如果您需要更多的重试尝试之间的时间,您可以将 thread.sleep 添加到函数中。
退出条件不必位于responseStatus上,它可以是响应本身的任何条件。