我可以设置功能在空手道中运行的顺序吗?

时间:2018-09-28 06:46:57

标签: dsl karate

我总共有14个功能,其中一个用于清洁,我希望最终运行。但是,当我运行我的套件时,它会在测试过程中运行,因此会破坏它。

我可以设置运行顺序吗?

1 个答案:

答案 0 :(得分:1)

如果最后确实是一次执行,则可以通过添加@AfterClass

让JUnit负责此步骤。

下面的示例显示了可以在其中添加前后代码的地方。

@RunWith(Karate.class)
@CucumberOptions(features = "classpath:features")
public class TestRunner {

  @BeforeClass
  public static void beforeClass() {
    System.out.println("BEFORE"); 
  }     

  @AfterClass
  public static void afterClass() {
    System.out.println("AFTER"); 
  }     

}

当前,功能执行的顺序取决于底层的Cucumber实现。

空手道目前使用Cucumber MultiLoader从文件系统或类路径中加载功能。 自空手道版本0.8.1起,黄瓜版本为1.2.5,其顺序由Java ClassLoader.getResources https://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html#getResources(java.lang.String)

确定。

您将不得不担心目录结构和文件夹中文件的命名。

(顺便说一句,更清洁的方法是使每个功能都与其他功能完全独立)。

如果您真的想强制执行功能,“空手道方法”就是只执行一个功能,然后让该功能彼此调用您想要的功能,即: < / p>

指定Runner仅执行您的协调器功能:

    @RunWith(Karate.class)
    @CucumberOptions(features = "classpath:features/orchestrator.feature")
    public class TestRunner {

      @BeforeClass
      public static void beforeClass() {
        System.out.println("BEFORE"); 
      }     

      @AfterClass
      public static void afterClass() {
        System.out.println("AFTER"); 
      }     

    }

定义将依次调用其他功能的测试协调器:

    Feature: Test orchestration feature 

    Scenario: Run all of the tests in order

      * call read('first.feature')
      * call read('second.feature')
      * call read('third.feature')

以下是被称为-首先的示例功能:

    Feature: First feature 

    Scenario: First

      * print "first"

秒:

    Feature: Second feature 

    Scenario: Second

      * print "Second"

第三个:

    Feature: Third feature 

    Scenario: Third

      * print "Third"