如何在执行@BeforeSuit之前暂停@test的执行?



我正在编写一个TestNG程序,我想在执行测试之前执行一些操作。基本上我想在测试开始之前执行一个.bat文件。在.bat文件中,我正在对软件进行一些安装和卸载。这是我在@BeforeSuit中的代码

@BeforeSuite
public void beforeSuite() {
try {           
String[] command = {"cmd.exe", "/C", "Start", "C:\Users\adutta\Desktop\uninstal-install.bat"};
Process p =  Runtime.getRuntime().exec(command);  
p.waitFor();
} catch (IOException ex) {
System.out.println(ex);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

我有 2 个问题。

  1. 我想暂停程序的执行,直到批处理文件无法完全执行。

  2. 执行
  3. 批处理文件时,它不会以预期的方式执行。批处理文件将首先检查软件是否已安装,如果已安装,则首先将其卸载,然后再次安装。但是,如果软件已经安装,则它首先运行安装代码,然后运行卸载代码,因此,在执行结束时卸载软件。是的,由于卸载需要一些时间,其余的java代码不会等待相同的代码,而是同时执行,这是不希望的。我想在执行批处理文件时暂停执行。这只不过是第一个问题。

这是我的批处理文件内容 -

@echo off
if exist "C:Program Files (x86)Host AnalyticsSpotlightXL" (
GOTO UNINSTALL
) else (
GOTO INSTALL
)
:UNINSTALL
CALL C:UsersaduttaDesktopuninstall.bat
GOTO INSTALL
:INSTALL
CALL C:UsersaduttaDesktopinstall.bat
exit

如何解决这些问题?有什么解决方案或建议吗?

据我所知,问题出在您的批处理文件中。根据设计,TestNG 将等待配置方法运行完成,然后再继续执行其他配置方法或测试方法。TestNG不会在那里尝试任何并行性。

您需要确保批处理文件具有适当的等待/睡眠机制,以确保它仅在批处理文件中编写脚本的所有活动运行完成后返回。

@BeforeSuite方法中,需要添加适当的轮询逻辑,以等待活动完成,然后继续。

目前从您的代码来看p.waitFor();会立即返回,这解释了为什么您的@BeforeSuite方法在软件安装/卸载活动完成之前退出。

最新更新