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

标签 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();
    }
}

我有两个问题。

  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

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

最佳答案

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

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

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

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

关于java - 如何暂停@test的执行直到@BeforeSuit执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58161904/

相关文章:

java - 使用 JAVA Mail API 发送带附件的电子邮件而不存储在本地机器中

batch-file - for 循环中的管道中断双引号变量

java - 在 Windows 7 Pro 中使用批处理文件关闭多个 cmd 窗口。

visual-studio - 当前选择的 "Solution Configuration"选项存储在 VS 2010 或 2012 中的什么位置?

selenium - 如何使用selenium删除文本字段中的默认值?

visual-studio - 通过包管理器控制台从解决方案中删除项目

java - JSP 页面上带有十进制值的数字格式异常

java - 如何使用 Eclipse JDT ASTParser 获取方法的类名?

windows - 想要抑制文件未找到输出

java - 执行 JOIN 查询 Hibernate - 无法解析属性