Karate 空手道中的标签并行运行功能

Karate 空手道中的标签并行运行功能,karate,Karate,我有一个端到端的测试套件,带有@e2e标记的特性。这些功能包含在不同的模块中,即WNG、DTC、FFD以及它们自己的标签(如@e2eWNG、@e2eDTC、@e2eFFD)和@e2e。每个模块都可以独立运行,我希望并行执行测试。例如,带有@e2eWNG的标记可以在单个线程上运行,@e2eDTC可以在另一个线程上运行,等等 现在我只运行所有带有标记@e2e的测试,这是顺序的 我看了一个例子,但我不知道如何通过标记来分隔线程 我试着根据这里提到的一个解决方案来做这件事——这就是我在我的TestRun

我有一个端到端的测试套件,带有@e2e标记的特性。这些功能包含在不同的模块中,即WNG、DTC、FFD以及它们自己的标签(如@e2eWNG、@e2eDTC、@e2eFFD)和@e2e。每个模块都可以独立运行,我希望并行执行测试。例如,带有@e2eWNG的标记可以在单个线程上运行,@e2eDTC可以在另一个线程上运行,等等

现在我只运行所有带有标记@e2e的测试,这是顺序的

我看了一个例子,但我不知道如何通过标记来分隔线程

我试着根据这里提到的一个解决方案来做这件事——这就是我在我的TestRunner课程中所做的

Results DTC = Runner.path("classpath:").tags("@e2eDTC").reportDir("target/cucumber-html-reports").parallel(1);
Results WNG = Runner.path("classpath:").tags("@e2eWNG").reportDir("target/cucumber-html-reports").parallel(1);
Results FFD = Runner.path("classpath:").tags("@e2eFFD").reportDir("target/cucumber-html-reports").parallel(1);

assertTrue(DTC.getErrorMessages(), DTC.getFailCount() == 0); 
assertTrue(WNG.getErrorMessages(), WNG.getFailCount() == 0); 
assertTrue(FFD.getErrorMessages(), FFD.getFailCount() == 0); 

generateReport(DTC.getReportDir());
generateReport(WNG.getReportDir());
generateReport(FFD.getReportDir());
但我明白这又是顺序性的。我只是想知道我们是否有办法并行化由标记分隔的执行。我可能遗漏了一些东西,但任何建议都会非常有用

使用标记@e2e运行所有测试,这是连续的

如果使用线程数大于1的并行运行程序,则不应发生这种情况


在我看来,没有必要在不同的线程上运行每个标记。只需使用一个平行流道和3个标记。这是所有团队都要做的。如果您有一些测试确实没有与套件中的其他测试混合(这是一种反模式,您应该进行修复),您可以查看
@parallel=false
标记:

谢谢@Peter。我尝试了您建议的方法,使threads=3,并将失败的测试标记为@parallel=false。但这并没有帮助,因为我在下一次运行的其他测试中看到了失败。这些测试是互斥的,但我认为这是编写测试的方式,例如在WNG中,单线程按顺序运行测试就可以了。与其他模块相同。但我希望找到一种方法来并行运行由标签分隔的功能。我还尝试了3个不同的测试跑步者从maven命令行给他们打电话。但这也是预期的。@Mihir空手道在这里帮不了你。您可以尝试使用Java执行器自己管理线程,类似这样:谢谢您的输入。我将研究java执行器。我还希望在CI/CD上实现这一点,在那里我可以为每个标记配置并行运行程序。这也可能解决这个问题。再次感谢:)@Mihir在我看来,“问题”在于你的测试不是独立的。我强烈建议你解决根本原因。CI/CD和所有这些都会起作用——但你永远都会感到痛苦和不确定,你的测试是否因为并行时间问题或其他原因而失败。就我的2c