我可以设置特征在空手道中应该 运行 的顺序吗?

Can i set the order in which the features should run in karate?

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

我可以设置 运行 的顺序吗?

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

来处理这一步

以下示例显示了您可以在何处添加前后代码。

@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 实现。

空手道目前使用 cucumbers 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)

决定

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

(附带说明,更简洁的方法是让每个功能完全独立于其他功能)。

如果您真的想强制执行功能的顺序,"Karate way" 将只执行一个功能,并让此功能依次调用您想要的功能,即:

指定 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"