我总共有14个功能,其中一个用于清洁,我希望最终运行。但是,当我运行我的套件时,它会在测试过程中运行,因此会破坏它。
我可以设置运行顺序吗?
答案 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"