无法设置为按顺序执行某些方案,以及与KarateDSL中的标记和线程数并行执行的某些方案

时间:2019-09-26 20:30:59

标签: karate

我有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。

您是否有解决办法?

2 个答案:

答案 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结果。

两个或两个以上错误假设相互交织并隐藏实际问题时的典型情况。为什么实际上我以前没有发现这个问题。

因此,这不是问题,这只是我的错误假设。