Serenity BDD、Java 和 Gradle 不强制执行 Cucumber 标签

问题描述 投票:0回答:1

我正在尝试使用标签来限制我的 Serenity BDD 套件。

尝试了很多很多变体(WithTags、CucumberOptions、-Dcucumber.options、-Dcucumber.filter.tags)但没有喜悦,转向人群的智慧。

目前我正在 IntelliJ IDE 中执行。
我正在使用 Gradle 的运行配置并传入标签。

IntelliJ 运行配置: IntelliJ screenshot

在之前设置环境的挑战中,我发现使用 Gradle 时,我必须使用 Gradle 构建文件传递参数:

test {
    useJUnitPlatform()
    def parameter = '-Denvironment='
    def environment = System.getProperty('environment')
    
    jvmArgs parameter+environment
}

当我除了环境之外还传递了 cucumber.filter.tags 时,它不起作用,我复制了这个方法:

test {
    useJUnitPlatform()
    def parameter = '-Denvironment='
    def environment = System.getProperty('environment')
    def parameterCucumber = '-Dcucumber.filter.tags="'
    def tags = System.getProperty('cucumber.filter.tags')

    if (tags=="null" || tags.isEmpty()) {
        println("Calling JVM with following arguments:")
        println(parameter+environment)
        jvmArgs parameter+environment
    } else {
        println("Calling JVM with following arguments:")
        println(parameter+environment+" "+parameterCucumber+tags+"\"")
        jvmArgs parameter+environment+" "+parameterCucumber+tags+"\""
    }
}

当我在 IntelliJ 中运行 Gradle 构建时,由于 println() 语句,它将输出以下内容。 它似乎是正确的 JVMArguments:

> Configure project :
Calling JVM with following arguments:
-Denvironment=sandbox -Dcucumber.filter.tags="@sprint-13"
> Task :clearReports
> Task :clean
> Task :compileJava
> Task :processResources
> Task :classes
> Task :compileTestJava
> Task :processTestResources
> Task :testClasses
14:56:54.470 [Test worker] DEBUG i.c.core.plugin.SerenityReporter - SRP:handleTestRunStarted Thread[Test worker,5,main] 
14:56:54.727 [Test worker] DEBUG i.c.core.plugin.SerenityReporter - SRP:handleTestSourceRead Thread[Test worker,5,main]
14:56:54.728 [Test worker] DEBUG i.c.core.plugin.SerenityReporter - Running feature from classpath:features//closingPackage/closingpackage.feature
14:56:54.748 [Test worker] INFO  n.thucydides.core.steps.StepEventBus - Loading JUnit Platform configuration parameters from classpath resource [junit-platform.properties].
14:56:54.790 [Test worker] INFO   - 

当我使用 IntelliJ 执行时,它会运行所有测试,如 Serenity 报告的这段代码片段所示

已执行标签的 Serenity 列表: tags

期望:只有带有@sprint-13标签的场景才会运行。 期望:这是核心功能,我一定错过了其他人都得到的东西;)

我尝试了什么?

  • -Dcucumber.options=
  • 在 TestSuiteClass 中,使用 CucumberOptions(),尝试在那里使用 filter.tags
  • 尝试过WithTags()语法,后来明白是JUnit不是cucumber
tags build.gradle serenity-bdd cucumber-serenity
1个回答
0
投票

TL;DR 在 gradle 测试任务中使用 jvmArgs 时,传递逗号分隔的参数,而不是一个包含多个参数的字符串。

详情: 当使用 Serenity BDD、Java、Cucumber 和 Gradle 时,我发现有必要向 build.gradle 中的测试任务添加代码,以便将环境设置和 Cucumber 标签传递到 Java 虚拟机。 解析命令行参数所需的代码,然后调用方法 jvmArgs 传递一组逗号分隔的参数。

如帖子中所示,之前我只将包含多个参数的单个字符串传递给 jvmArgs。

正确的代码

test {
    useJUnitPlatform()

    jvmArgs "-Denvironment="+System.getProperty('environment'), "-Dcucumber.filter.tags=\"" + System.getProperty('cucumber.filter.tags') + "\""
}

当 IntelliJ Gradle 构建具有 run 语法时,这将正常工作

clean test -Denvironment=sandbox -Dcucumber.filter.tags="@sprint29"

仅在命令行上就是

./gradlew clean test -Denvironment=sandbox -Dcucumber.filter.tags="@sprint29"

© www.soinside.com 2019 - 2024. All rights reserved.