问题:Maven Surefire 运行测试命令行字符串限制 (-Dtestu003dx.y.z#abc)

我正在使用 Maven Surefire 在 Windows Server 上通过 Jenkins 运行我的一部分测试用例。

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

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

问题是在 Windows (CMD.exe) 上有一个命令行字符串限制不允许执行很长的测试列表(限制 8191 个字符)。

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

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

更新[2020 年 1 月 21 日]

我必须澄清两件事:

1.我在Maven多模块项目中动态选择测试用例,这意味着调整pom.xml通常是一个选项,但我想避免它。

2.我已经尝试过从Python脚本调用命令,而不是直接在Window的cmd.exe中调用:

import subprocess

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

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

更新[2020 年 2 月 17 日]

Powershell 和/或.bat也不起作用,也不能在 Windows Git bash 的.sh脚本中运行它。通过.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 操作系统中。

解答

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

Logo

CI/CD社区为您提供最前沿的新闻资讯和知识内容

更多推荐