在JUnit 5中使用Cucumber标签

2023/05/09

1. 概述

在本教程中,我们将说明如何使用Cucumber标签表达式来操纵测试的执行及其相关设置。

我们将研究如何分离API和UI测试,并控制我们为每个测试运行的配置步骤。

2. 带有UI和API组件的应用程序

我们的示例应用程序有一个简单的UI,用于生成给定范围内的随机数:

我们还有一个返回HTTP状态代码的/status Rest端点。我们将使用CucumberJUnit 5通过验收测试涵盖这两个功能。

为了让Cucumber与JUnit 5一起工作,我们必须在我们的pom中声明cucumber–junit-platform-engine作为它的依赖项:

<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-junit-platform-engine</artifactId>
    <version>6.10.3</version>
</dependency>

3. Cucumber标签和条件钩子

Cucumber标签可以帮助我们将场景分组在一起。假设我们对测试UI和API有不同的要求。例如,我们需要启动浏览器来测试UI组件,但这不是调用/status端点所必需的。我们需要的是一种确定要运行哪些步骤以及何时运行的方法,Cucumber标签可以帮助我们解决这个问题。

4. UI测试

首先,让我们通过标签将我们的功能或场景分组在一起。在这里,我们用@ui标签标记我们的UI Feature:

@ui
Feature: UI - Random Number Generator

    Scenario: Successfully generate a random number
        Given we are expecting a random number between min and max
        And I am on random-number-generator page
        When I enter min 1
        And I enter max 10
        And I press Generate button
        Then I should receive a random number between 1 and 10

然后,基于这些标签,我们可以通过使用条件钩子来操纵我们为这组Feature运行的内容。我们使用单独的@Before和@After方法执行此操作,并在ScenarioHooks中使用相关标签进行标注:

@Before("@ui")
public void setupForUI() {
    uiContext.getWebDriver();
}
@After("@ui")
public void tearDownForUi(Scenario scenario) throws IOException {
    uiContext.getReport().write(scenario);
    uiContext.getReport().captureScreenShot(scenario, uiContext.getWebDriver());
    uiContext.getWebDriver().quit();
}

5. API测试

与我们的UI测试类似,我们可以使用@api标签标记我们的API Feature:

@api
Feature: Health check

    Scenario: Should hava a working health check
        When I make a GET call on /status
        Then I should receive 200 response status code
        And should receive a non-empty body

我们还有带有@api标签的@Before和@After方法:

@Before("@api")
public void setupForApi() {
    RestAssuredMockMvc.mockMvc(mvc);
    RestAssuredMockMvc.config = RestAssuredMockMvc.config()
        .logConfig(new LogConfig(apiContext.getReport().getRestLogPrintStream(), true));
}

@After("@api")
public void tearDownForApi(Scenario scenario) throws IOException {
    apiContext.getReport().write(scenario);
}

当我们运行AcceptanceTestRunnerIT时,我们可以看到正在为相关测试执行适当的设置和拆卸步骤。

6. 总结

在本文中,我们展示了如何使用Cucumber标签和条件钩子来控制不同测试集及其设置/拆卸指令的执行。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章