所有黄瓜测试后运行

时间:2017-03-08 14:10:39

标签: java testing automated-tests cucumber

有没有办法在所有黄瓜测试运行后运行一个方法?

@After注释会在每次测试后运行,对吧?我想要的东西只能运行一次,但最后才会运行。

4 个答案:

答案 0 :(得分:4)

您可以使用标准的JUnit注释。

在你的跑步者课上写下类似的内容:

@RunWith(Cucumber.class)
@Cucumber.Options(format = {"html:target/cucumber-html-report", "json-pretty:target/cucumber-json-report.json"})
public class RunCukesTest {

    @BeforeClass
    public static void setup() {
        System.out.println("Ran the before");
    }

    @AfterClass
    public static void teardown() {
        System.out.println("Ran the after");
    }
}

答案 1 :(得分:2)

您可以做的是为TestRunFinished事件注册事件处理程序。为此,您可以创建一个自定义插件,该插件将为此事件注册您的钩子:

public class TestEventHandlerPlugin implements ConcurrentEventListener {

    @Override
    public void setEventPublisher(EventPublisher eventPublisher) {
        eventPublisher.registerHandlerFor(TestRunFinished.class, teardown);
    }

    private EventHandler<TestRunFinished> teardown = event -> {
        //run code after all tests
    };
}

然后您将必须注册插件:

  • 如果您正在运行Cucumber CLI,则可以使用-p / --plugin选项并传递Java类的完全限定名称:your.package.TestEventHandlerPlugin
  • Junit跑步者:
@RunWith(Cucumber.class)
@CucumberOptions(plugin = "your.package.TestEventHandlerPlugin") //set features/glue as you need.
public class TestRunner {

}

答案 2 :(得分:1)

使用TestNG套件功能也可以。

@BeforeSuite
public static void setup() {
    System.out.println("Ran once the before all the tests");
}

@AfterSuite
public static void cleanup() {
    System.out.println("Ran once the after all the tests");
}

答案 3 :(得分:-3)

cucumber是一个场景基础测试,您应该逐步在.feature文件中编写自己的场景,这些步骤分别按步骤定义执行。

因此,如果您希望在所有步骤之后发生某些事情,您应该在最后一步中编写它并在其步骤定义中开发此步骤。

此外,对于您希望在其他步骤之前执行的操作,您应该在.feature文件中的所有步骤之前考虑一个步骤,并在其步骤定义中进行开发。