首页 > 解决方案 > 空手道-如何仅在失败的情况下自动重新运行

问题描述

在空手道中是否有任何方法可以在相同的执行中自动重新运行 UI 测试自动化(甚至在 API 中)失败的场景。我正在使用 gradle 作为构建工具。这是我这边的要求,如果任何测试失败,它应该再次重试。

如果我们可以在每个功能场景之后跳过 stop() 也是任何方式。并且只能在功能之后调用。这样单个驱动程序实例将适用于编写在一个功能文件中的所有场景。

请建议。

标签: karate

解决方案


目前不支持此功能。它可能会在下一个版本中出现,但不能保证。有些人认为重试是不好的测试实践,请查一下。

但这是一个可能的解决方法。如果你可以将你的“不稳定流”移动到一个特性中(应该已经是这种情况),你可以通过一个“包装器特性”和一个 JS 函数来调用它。可以对其进行增强,以便轻松获取要调用的功能和重试次数的参数。这里我们使用 JS 的 try-catch 块。

* def fun =
"""
function() {
  for (var i = 0; i < 3; i++) {
    try {
      karate.call('flaky.feature');
      karate.log('*** call success !')
      return;
    } catch (e) {
      karate.log('try failed:', i, e);
    }
  }
  karate.fail('test failed after retries: ' + i); // karate.fail('message') is only in 0.9.6 onwards, you can also [throw 'message']
}
"""
* fun()

我们将不支持跨多个 -s 重用驱动程序,Scenario除非它是一项called功能。请参阅此处的评论:在karate-config.js 中登录的 callSingle 对于空手道 UI 测试无法正常工作

请记住,空手道是开源的。如果这些对您来说如此高优先级的功能,请考虑贡献代码。

编辑 - 另见:https ://stackoverflow.com/a/66773839/143475


推荐阅读