无法设置为在KarateDSL中按顺序执行某些场景,以及与标记和线程计数并行执行某些场景
我有2个功能文件,每个都有2个场景。我想从以下位置执行场景: *[第一特征],[第二特征]-顺序; *[第三特征]-并行 我使用标记和两个测试运行程序(threadCount=1,threadCount=5),但所有场景都是并行执行的(由于timeline.html) 场景:无法设置为在KarateDSL中按顺序执行某些场景,以及与标记和线程计数并行执行某些场景,karate,Karate,我有2个功能文件,每个都有2个场景。我想从以下位置执行场景: *[第一特征],[第二特征]-顺序; *[第三特征]-并行 我使用标记和两个测试运行程序(threadCount=1,threadCount=5),但所有场景都是并行执行的(由于timeline.html) 场景: @sequential Feature: First feature Background: # some code @smoke Scenario: f1, s1 # some code
@sequential
Feature: First feature
Background:
# some code
@smoke
Scenario: f1, s1
# some code
@regression
Scenario: f1, 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>
...
。。。
api/TestsRunner.java
api/TestsRunner2.java
...
当前,当我执行测试时,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
你有什么办法解决这个问题吗?我把你的问题读了好几遍,但还是放弃了。我还要说,你可能是我遇到的第一个发现场景并行执行是个问题的人 如果您希望背靠背地执行两个场景,我认为这是错误测试设计的典型案例,其中您有一个测试依赖于另一个。正确的做法是将两者结合到一个
场景中。您还可以尝试创建一个新的场景
并依次调用这两个场景
-s的选项(不推荐)。请参阅:
如果您仍然觉得有些事情没有按您预期的方式进行,请遵循此过程,我们将更容易理解,而不是阅读您的示例:早上比晚上聪明。我发现了错误
我假设:
- SequentialTestRunner{“@regression,@smoke”,“@sequential,~@ignore”}-将运行所有顺序测试
- ParallelTestRunner{“@regression,@smoke”,“~@sequential,~@ignore”}-将并行运行所有其他(未标记为sequential)测试
。。。但是ParallelTestRunner执行所有测试。因此,当我从maven调用两个执行器时,结果应该如下所示:
所有顺序测试+所有测试(顺序测试将第二次执行)。
... 但正如我所看到的,executor非常聪明,不会第二次执行顺序测试。
因此,将仅显示ParallelTestRunner结果
当两个或多个错误假设交织在一起并隐藏真实问题时的经典情况。为什么我以前没有发现这个问题
因此,这不是一个问题,这只是我的错误假设。您能将以前的答案标记为已接受吗?我知道这看起来可能是错误的测试设计。不幸的是,测试设计受到业务逻辑的限制。我会尽力解释的。测试集(10-20)依赖于一个唯一的“实体”,我为集合中的每个测试重新创建(使用不同的参数)。其余的测试(200)是独立的。因此,我创建了两个组:第一个(必须按顺序执行),第二个(可以并行执行)。目前,我正试图同时管理这两个小组。@Romal。将10-20放入一个功能中,使用@parallel=false
或正确创建实体的背景。否则,请按照说明:-并接受此答案:
@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());
}
}
...
<configuration>
<includes>
<include>api/TestsRunner.java</include>
<include>api/TestsRunner2.java</include>
</includes>
</configuration>
...