如何使用 Gradle 运行多个测试但不是 GEB 中的所有测试?

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

我正在运行 gradle 从 Windows 命令行运行测试。我运行单个测试的方法是:

gradlew.bat chromeTest -DchromeTest.single=test1Spec

或对于所有测试:

gradlew.bat chromeTest

如果我尝试只运行两个这样的测试类:

gradlew.bat chromeTest -DchromeTest=test1Spec,test2Spec--info

然后 gradle 开始运行所有测试。

我需要的是:只运行 2 或 3 个 Groovy 类。具体来说,既不是一个,也不是全部。任何帮助都会非常有益!抱歉,再次转发这个问题。

gradle spock geb
2个回答
4
投票

-DtestTaskName
支持通配符,例如
Test*Spec
foo.bar.*Spec
,但仅限于单一模式。如果您需要支持多种模式,则必须实现自己的命令行参数(在最简单的情况下意味着读取系统属性)并使用它来配置
Test#include
Test#getFilter
。 (有关详细信息,请参阅
Gradle 构建语言参考
中的 Test。)

Gradle 1.10 引入了

--tests
作为
-DtestTaskName
的替代品,但同样,仅支持一种模式。


0
投票

根据文档看来,自 Gradle 2.13 起,可以使用

--tests
参数指定多个模式,因为从本文档的版本开始,在描述中添加了以下部分(以粗体显示):

提供命令行选项“--tests”,方便设置测试 筛选。对于经典的“单一测试方法”特别有用 执行'用例。当使用命令行选项时, 构建脚本中声明的包含过滤器将被忽略。 是 可以提供多个“--tests”选项和与任何匹配的测试 这些模式将被包括在内。

然后以下命令就可以工作:

gradle test --tests some.pattern.class --tests different.pattern.class

另外,正如 @PeterNiederwieser 所解释的,您可以在

TestFilter
中配置
build.gradle
,包括或排除包、类和方法的不同模式。以下示例来自 gradle api 文档

test {
       filter {
          //specific test class, this can match 'SomeTest' class and corresponding method under any package
          includeTestsMatching "SomeTest"
          includeTestsMatching "SomeTest.someTestMethod*"
          ...

          //specific test class and method
          includeTestsMatching "org.gradle.SomeTest.someSpecificFeature"
          includeTest "org.gradle.SomeTest", "someTestMethod"

          ...

          //exclude a specific test by its name
          excludeTestsMatching "*canDoSomethingSpecific"
          //excluding tests by name also works for test names which have spaces
          excludeTestsMatching "*can do something specific"
       }
   }
© www.soinside.com 2019 - 2024. All rights reserved.