我有一个执行 TestNG 测试套件的 Gradle 任务。 我希望能够向任务传递一个标志,以便使用特殊的 TestNG XML 套件文件(或者如果未设置标志,则仅使用默认套件)。
gradle test
...应该运行默认的标准测试套件
gradle test -Pspecial
...应该运行特殊的测试套件
我一直在尝试这样的事情:
test {
if (special) {
test(testng_special.xml);
}
else {
test(testng_default.xml);
}
}
但是我收到了未定义的属性错误。正确的做法是什么?
if (project.hasProperty('special'))
应该这样做。
请注意,您选择 testng 套件的操作将不起作用,据我所知:测试任务没有任何
test()
方法。请参阅 https://discuss.gradle.org/t/how-to-run-acceptance-tests-with-testng-from-gradle/4107 了解工作示例:
test {
useTestNG {
suites 'src/main/resources/testng.xml'
}
}
这里有 3 个针对 Kotlin DSL 的解决方案(build.gradle.kts):
val prop = project.properties["myPropName"] ?: "myDefaultValue"
val prop = project.properties["myPropName"] ?: error("Property not found")
if (project.hasProperty("special")) {
val prop = project.properties["myPropName"]
}
请注意,您可以省略
project.
前缀,因为它隐含在 Gradle 构建文件中。
这对我有用:
test {
if (properties.containsKey('special')) {
test(testng_special.xml);
}
else {
test(testng_default.xml);
}
}
来自 Gradle 文档:
-P,--project-prop
设置根项目的项目属性,例如 -Pmyprop=myvalue
所以你应该使用:
gradle test -Pspecial=true
属性名称后面有一个值