我有2个功能文件,每个功能文件有2个场景。我要从执行场景: * [第一功能],[第二功能]-依序; * [第三功能]-并行;
我使用标签和2个测试运行程序(threadCount = 1,threadCount = 5),但是所有场景都是并行执行的(由于timeline.html)。
场景:
@sequential
Feature: First feature
Background:
# some code
@smoke
Scenario: f1, s1
# some code
@regression
Scenario: f1, s2
# some code
@sequential @smoke
Feature: Second feature
Background:
# some code
@smoke
Scenario: f2, s1
# some code
@regression
Scenario: f2, s2
# some code
Feature: Third feature
Background:
# some code
@smoke
Scenario: f3, s1
# some code
@regression
Scenario: f3, s2
# some code
应按顺序执行的方案的测试运行器:
@KarateOptions(tags = {"@regression,@smoke", "@sequential,~@ignore"})
public class TestsRunner extends TestSetBase {
@Test
public void AllSequentialTests() {
Results results = Runner.parallel(getClass(), 1, PropertyValues.getReportDir());
generateReport(PropertyValues.getReportDir());
assertTrue(results.getFailCount() == 0, results.getErrorMessages());
}
}
用于并行执行的测试运行器:
@KarateOptions(tags = {"@regression,@smoke", "~@sequential,~@ignore"})
public class TestsRunner2 extends TestSetBase {
@Test
public void AllSequentialTests() {
Results results = Runner.parallel(getClass(), 5, PropertyValues.getReportDir());
generateReport(PropertyValues.getReportDir());
assertTrue(results.getFailCount() == 0, results.getErrorMessages());
}
}
我正在从Maven运行测试:
...
<configuration>
<includes>
<include>api/TestsRunner.java</include>
<include>api/TestsRunner2.java</include>
</includes>
</configuration>
...
当前,当我执行测试时,timeline.html显示:
| ForkJoinPool-2-Worker1 | ---- [f1,s1]
| ForkJoinPool-2-Worker2 | ---- [f1,s2]
| ForkJoinPool-2-Worker3 | ---- [f2,s1] --- [f3,s2]
| ForkJoinPool-2-Worker4 | ---- [f2,s2]
| ForkJoinPool-2-Worker5 | ---- [f2,s1]
我尝试添加@ parallel = false,在这种情况下s1,s2将顺序执行,但f1,f2仍将并行执行。 我正在使用KarateDSL v.0.9.3。
您是否有解决办法?
答案 0 :(得分:0)
我多次阅读了您的问题,但放弃了。我还必须说,您可能是我遇到的第一个发现场景并行执行问题的人。
如果您想背靠背执行2个场景-在我看来,这是错误测试设计的典型案例,其中您需要进行另一个测试。正确的做法是将两者合并为一个Scenario
。您也可以尝试创建新的Scenario
并依次调用这两个Scenario
-的选项(不建议使用)。请参考:https://github.com/intuit/karate#call-tag-selector
如果您仍然觉得某些事情没有达到您的预期效果,请按照此过程进行操作,这样我们将更容易找出答案,而不是通过您的示例来阅读:https://github.com/intuit/karate/wiki/How-to-Submit-an-Issue
答案 1 :(得分:0)
早上比晚上更明智。我发现了错误。
我认为:
SequentialTestRunner {“ @ regression,@ smoke”,“ @ sequential,〜@ ignore”}-将运行所有顺序测试;
ParallelTestRunner {“ @ regression,@ smoke”,“〜@ sequential,〜@ ignore”}-将并行运行所有其他(未标记为顺序的)测试;
...但是ParallelTestRunner执行所有测试。因此,当我从maven调用两个执行器时,结果应如下所示: 所有顺序测试+所有测试(顺序测试将第二次执行)。 ...但是据我所见,执行程序非常聪明,不会第二次执行顺序测试。 结果,将仅显示ParallelTestRunner结果。
两个或两个以上错误假设相互交织并隐藏实际问题时的典型情况。为什么实际上我以前没有发现这个问题。
因此,这不是问题,这只是我的错误假设。