无法设置为在KarateDSL中按顺序执行某些场景,以及与标记和线程计数并行执行某些场景

无法设置为在KarateDSL中按顺序执行某些场景,以及与标记和线程计数并行执行某些场景,karate,Karate,我有2个功能文件,每个都有2个场景。我想从以下位置执行场景: *[第一特征],[第二特征]-顺序; *[第三特征]-并行 我使用标记和两个测试运行程序(threadCount=1,threadCount=5),但所有场景都是并行执行的(由于timeline.html) 场景: @sequential Feature: First feature Background: # some code @smoke Scenario: f1, s1 # some code

我有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
应按顺序执行的场景的测试运行程序:

@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>
...