Maven Surefire 运行 测试命令行字符串限制 (-Dtest=x.y.z#abc)

Maven Surefire Run Tests Command Line String Limitation (-Dtest=x.y.z#abc)

我正在 Windows 服务器上通过 Jenkins 使用 Maven Surefire 运行 我的测试用例的子集。

要指定测试用例为运行,我执行:

mvn surefire:test -DfailIfNoTests=false -Dtest=x.y.z#a,x.y.z#b

问题是 Windows (CMD.exe) 上有一个 Command Line String Limitation 不允许执行很长的测试列表(限制 8191 个字符)。

有没有人知道我是否可以使用文件作为 -Dtest 参数(即 -Dtest=testcases.txt)的输入或解决此问题的任何其他想法?

我知道我可以在 Jenkins 中切换到 Groovy 脚本而不是 CMD.exe,但我想避免这种情况。

更新 [2020 年 1 月 21 日]

有两件事我必须澄清:

  1. 我在 Maven 多模块项目中动态选择测试用例,这意味着调整 pom.xml 通常是一个选项,但我想避免它。
  2. 我已经尝试从 Python 脚本调用命令,而不是直接在 Window 的 cmd.exe:
  3. 中调用它
import subprocess

command = 'mvn surefire:test -Dtest={} -DfailIfNoTests=false'.format(tests)
subprocess.call(command, shell=True)

这也不起作用,也许 Powershell 是@mark-bramnik 建议的一个选项?

更新 [2020 年 2 月 17 日]

Powershell and/or .bat 也不起作用,运行在 Windows Git 的 .sh 脚本中也不行bash 工作。 当 运行 通过 .sh 脚本连接它时,我收到与 JDK:

相关的错误
/c/maven-3.6.1/bin/mvn: line 191: /c/Program Files/Java/jdk-11/bin/java: Argument list too long
/c/maven-3.6.1/bin/mvn: line 191: /c/Program Files/Java/jdk-11/bin/java: No error

显然,Windows OS.

本身就存在命令长度限制

您可以在 运行 模块的 pom.xml 中将测试列表配置为 运行。

如果您希望仅从 jenkins 加载此列表,请创建一个特殊的 maven 配置文件(同样,在同一个 pom xml 中)并在该配置文件中创建一个带有 surefire 插件配置的配置。

另一种方法是将您 运行 的行放入某种 shell 脚本中(在 windows 世界中,我猜它会很强大 shell )。

除此之外,据我所知,-Dtest 不能接受当前 surefire 实现中的文件,所以如果你不想扩展 surefire 插件(我对此表示怀疑:))您可能应该使用上述方法之一

使用 Maven Surefire 的选项 -Dsurefire.includesFile 找到了一个解决方案,它显然可以与 -Dtest 类似地使用,除了您可以提供包含测试名称的文件。