gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:04:50 25 4
gpt4 key购买 nike

我正在编写一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com