隔离地执行功能,但并行地包含场景



我有一个庞大且快速增长的空手道测试体,并使用并行执行来加快处理速度,这基本上在不同的配置下工作得很好:

  • 正常并行执行(绝大多数测试)
  • 在极少数特殊情况下,在一个特性(parallel=false)内顺序执行场景
  • 完全顺序执行(通过单独的单线程运行器,由自定义@sequential标签触发)修改配置设置,全局查找等内容

然而,对于许多类型的全局查找的基本功能,也有一个参数化(Scenario Outline)特性。目前它以"完全顺序的"方式运行。模式,因为它会影响其他测试。但实际上,只要功能作为一个整体单独执行(因为测试确实影响其他功能),该功能内部的场景就可以并行执行(它们不会相互影响)。

那么,有没有一种方法来实现"并行场景的顺序特征"?执行?我承认这可能是一个小众案例,但是在我的案例中,它将大大加快测试的执行速度。

…发布这个问题已经让我的想法流动,并指出了一个可能的方法来实现这一点:

private static void runLocalParallel(Builder<?> builder) {
final List<Feature> features = builder.tags("@local_parallel").resolveAll();
for (Feature feature : features) {
builder.features(feature).parallel(8);
}
}

这识别所有标记为@local_parallel的特征,迭代它们并为每个特征单独执行并行运行程序。结果处理、报告输出等仍然需要以一种优雅的方式实现,但这也是可行的。

是的,确实是一个边缘情况-但它已经出现了几次。我们一直在想一种"分类"的方法。线程,这意味着我们可以做一些事情,比如某些标签只能在特定的线程上运行。仔细想想,这是一个很好的功能请求,所以我打开了一个,欢迎评论。https://github.com/karatelabs/karate/issues/2235

理论上,如果你编写了一些持有锁的Java glue代码,你可以在输入任何&;critical&;之前调用该代码。特性。我还没有试过,但也许值得一试。

最新更新