我正在尝试使用标签来限制我的 Serenity BDD 套件。
尝试了很多很多变体(WithTags、CucumberOptions、-Dcucumber.options、-Dcucumber.filter.tags)但没有喜悦,转向人群的智慧。
目前我正在 IntelliJ IDE 中执行。
我正在使用 Gradle 的运行配置并传入标签。
在之前设置环境的挑战中,我发现使用 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 报告的这段代码片段所示
期望:只有带有@sprint-13标签的场景才会运行。 期望:这是核心功能,我一定错过了其他人都得到的东西;)
我尝试了什么?
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"