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 日]
有两件事我必须澄清:
- 我在 Maven 多模块项目中动态选择测试用例,这意味着调整
pom.xml
通常是一个选项,但我想避免它。
- 我已经尝试从 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 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
类似地使用,除了您可以提供包含测试名称的文件。
我正在 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 日]
有两件事我必须澄清:
- 我在 Maven 多模块项目中动态选择测试用例,这意味着调整
pom.xml
通常是一个选项,但我想避免它。 - 我已经尝试从 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 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
类似地使用,除了您可以提供包含测试名称的文件。