如何暂停执行@test直到执行@BeforeSuit?

时间:2019-09-30 05:22:44

标签: java batch-file automation

我正在编写一个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. 执行批处理文件时,它没有以预期的方式执行。批处理文件将首先检查是否已安装该软件,如果已安装,则将首先将其卸载,然后再次安装。但是,如果已经安装了该软件,则它将先运行安装代码,然后再运行卸载代码,因此,该软件将在执行结束时被卸载。是的,由于卸载需要花费一些时间,其余的Java代码不会等待相同的时间,而是同时执行,这是不希望的。我想在批处理文件执行时暂停执行。只是第一个问题。

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

@echo off

if exist "C:\Program Files (x86)\Host Analytics\SpotlightXL" (
GOTO UNINSTALL
) else (
GOTO INSTALL
)

:UNINSTALL
    CALL C:\Users\adutta\Desktop\uninstall.bat
    GOTO INSTALL

:INSTALL
    CALL C:\Users\adutta\Desktop\install.bat
    exit

我该如何解决这些问题?有什么解决办法或建议吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

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