如何在批处理文件中调用下一个命令之前等待 maven 测试套件完成?

Posted

技术标签:

【中文标题】如何在批处理文件中调用下一个命令之前等待 maven 测试套件完成?【英文标题】:How to wait for maven test suite to finish before calling next command in batch file? 【发布时间】:2022-01-18 00:40:21 【问题描述】:

我正在构建一个测试套件,我需要在其中调用一个 testng.xml 文件,这可能需要一个小时才能完成。接下来我需要调用python脚本来修改结果并返回另一个testng.xml文件。我想把这一切都放到一个批处理文件中,但我不知道如何在调用 python 脚本之前等待第一个脚本完成运行。这是我到目前为止所拥有的,并且可以正常执行。如何插入等待?

set projectLocation=C:\myproject\pom.xml\location
cd %projectLocation%
mvn clean test -DsuiteXmlFile=testng.xml

在此之后,我需要转到 python,调用 python 并运行另一个 testng.xml。我一直在幸运地尝试循环

:LOOP
tasklist /fo csv /fi "IMAGENAME eq regressionTestRunner.xml" 2>NUL | find /I /N "regressionTestRunner.xml">NUL

IF ERRORLEVEL 1 (
  GOTO CONTINUE
) ELSE (
  echo Running
  Timeout /T 5 /Nobreak
  GOTO LOOP
)
:CONTINUE

【问题讨论】:

如果我没记错的话,问题在于懒惰的开发人员手册页和懒惰的编码风格。 mvn 真的是一个批处理文件,我假设mvn.cmd(尽管它可能仍然使用过时的.bat 扩展名)。因为它是一个批处理文件,您应该使用CALL 命令从另一个批处理文件调用它。当您使用CALL 命令时,该批处理文件应该运行,并且只有在它完成后,才运行调用批处理文件中的下一行。所以,根据你的问题内容,​​我建议你试试Call "%MAVEN_HOME%\bin\maven.cmd" clean test -DsuiteXmlFile=testng.xml,然后你的下一个命令。 感谢 Compo,使用 CALL 命令实际上解决了问题 【参考方案1】:

问题是因为开发人员提供的有关命令行工具的手册页通常是为了向您提供直接在控制台窗口中编写的命令行。出于这个原因,他们没有解释正确的用法,只是提供了可以用最少的打字输入的例子。当您使用批处理文件时,您只需输入一次命令,因此不需要这种懒惰的输入方式。

您需要注意的第一件事是mvn 本身并不是一个命令。这是一个缩短的命令,在技术上应该引用可执行批处理文件mvn.cmd(尽管它可能仍使用过时的 .bat 扩展名,mvn.bat。因为它是一个批处理文件,您应该使用CALL 命令从另一个批处理文件调用它。有关此命令的信息,请打开命令提示符窗口,键入 call /? 并按 ENTER 键。当您使用CALL 命令时,该批处理文件应该运行,并且只有在它完成后,才运行调用批处理文件中的下一行。

所以,根据您的问题内容,​​我建议您尝试一下:

@Set "projectLocation=C:\myproject\pom.xml\location"
@CD /D "%projectLocation%" 2>NUL || Exit /B
@Call "%MAVEN_HOME%\bin\maven.cmd" clean test -DsuiteXmlFile=testng.xml
@Rem Your next command here

【讨论】:

以上是关于如何在批处理文件中调用下一个命令之前等待 maven 测试套件完成?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取批处理文件以执行下一个命令而无需等待

使用R连续运行多个批处理文件?

批处理命令中如何在执行下一条命令时等待5秒钟

matlab调用exe立刻返回

如何在批处理脚本中等待? [复制]

如何告诉 PowerShell 在开始下一个命令之前等待每个命令结束?