一、简介
Cucumber是一个支持行为驱动开发(BDD)的测试自动化工具。它运行以纯文本 Gherkin 语法编写的规范,用于描述系统行为。
在本教程中,我们将看到几种将 Cucumber 与 Gradle 集成的方法,以便在项目构建过程中运行 BDD 规范。
2. 设置
首先,让我们使用Gradle Wrapper设置一个 Gradle 项目。
接下来,我们将 cucumber-java 依赖项添加到 build.gradle :
testImplementation 'io.cucumber:cucumber-java:6.10.4'
这会将官方 Cucumber Java 实现添加到我们的项目中。
3. 使用自定义任务运行
为了使用 Gradle 运行我们的规范,我们将 创建一个使用 Cucumber 中的命令行界面运行器 (CLI) 的任务 。
3.1.配置
让我们首先将所需的配置添加到项目的 build.gradle 文件中:
configurations {
cucumberRuntime {
extendsFrom testImplementation
}
}
接下来,我们将创建自定义 cucumberCli 任务:
task cucumberCli() {
dependsOn assemble, testClasses
doLast {
javaexec {
main = "io.cucumber.core.cli.Main"
classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output
args = [
'--plugin', 'pretty',
'--plugin', 'html:target/cucumber-report.html',
'--glue', 'com.baeldung.cucumber',
'src/test/resources']
}
}
}
此任务配置为运行 src/test/resources 目录下的 .feature 文件中找到的所有测试场景。
Main 类的 –glue 选项指定运行场景所需的步骤定义文件的位置。
–plugin 选项指定测试报告的格式和位置。我们可以组合多个值来生成所需格式的报告,例如 Pretty 和 HTML ,如我们的示例所示。
还有其他几种可用的选项。例如,有一些选项可以根据名称和标签过滤测试。
3.2.设想
现在,让我们在 src/test/resources/features/account_credited.feature 文件中为我们的应用程序创建一个简单的场景:
Feature: Account is credited with amount
Scenario: Credit amount
Given account balance is 0.0
When the account is credited with 10.0
Then account should have a balance of 10.0
接下来,我们将实现运行场景所需的相应步骤定义—— 粘合剂 :
public class StepDefinitions {
@Given("account balance is {double}")
public void givenAccountBalance(Double initialBalance) {
account = new Account(initialBalance);
}
// other step definitions
}
3.3.运行任务
最后,让我们从命令行运行 cucumberCli 任务:
>> ./gradlew cucumberCli
> Task :cucumberCli
Scenario: Credit amount # src/test/resources/features/account_credited.feature:3
Given account balance is 0.0 # com.baeldung.cucumber.StepDefinitions.account_balance_is(java.lang.Double)
When the account is credited with 10.0 # com.baeldung.cucumber.StepDefinitions.the_account_is_credited_with(java.lang.Double)
Then account should have a balance of 10.0 # com.baeldung.cucumber.StepDefinitions.account_should_have_a_balance_of(java.lang.Double)
1 Scenarios (1 passed)
3 Steps (3 passed)
0m0.381s
正如我们所看到的,我们的规范已经与 Gradle 集成,运行成功,并且输出显示在控制台上。此外,HTML 测试报告可在指定位置找到。
4. 使用 JUnit 运行
我们可以使用 JUnit 来运行 Cucumber 场景,而不是在 Gradle 中创建自定义任务。
让我们首先包含 cucumber-junit 依赖项:
testImplementation 'io.cucumber:cucumber-junit:6.10.4'
由于我们使用 JUnit 5,我们还需要添加 junit-vintage-engine 依赖项:
testImplementation 'org.junit.vintage:junit-vintage-engine:5.7.2'
接下来,我们将在测试源位置创建一个空的运行器类:
@RunWith(Cucumber.class)
@CucumberOptions(
plugin = {"pretty", "html:target/cucumber-report.html"},
features = {"src/test/resources"}
)
public class RunCucumberTest {
}
在这里,我们在 @RunWith 注释中使用了 JUnit Cucumber 运行程序。此外,所有 CLI 运行程序选项(例如 features 和 plugin )都可以通过 @CucumberOptions 注释获得。
现在,执行 标准 Gradle 测试 任务将查找并运行所有功能测试 ,以及任何其他单元测试:
>> ./gradlew test
> Task :test
RunCucumberTest > Credit amount PASSED
BUILD SUCCESSFUL in 2s
5. 使用插件运行
最后一种方法是 使用第三方插件,该插件提供了运行 Gradle 构建规范的能力 。
在我们的示例中,我们将使用 gradle-cucumber-runner 插件来运行 Cucumber JVM。在底层,这会将所有调用转发到我们之前使用的 CLI 运行程序。让我们将其包含在我们的项目中:
plugins {
id "se.thinkcode.cucumber-runner" version "0.0.8"
}
这会向我们的构建添加一个 Cucumber 任务,现在我们可以使用默认设置运行它:
>> ./gradlew cucumber
值得注意的是, 这不是官方的 Cucumber 插件 ,还有其他提供类似功能的插件。
六,结论
在本文中,我们演示了使用 Gradle 配置和运行 BDD 规范的几种方法。
最初,我们研究了如何利用 CLI 运行程序创建自定义任务。然后,我们研究了使用 Cucumber JUnit 运行程序使用现有 Gradle 任务来执行规范。最后,我们使用第三方插件来运行 Cucumber,而无需创建我们自己的自定义任务。
与往常一样,完整的源代码可以在 GitHub 上找到。