Как приостановить выполнение @test до выполнения @BeforeSuit? - PullRequest
0 голосов
/ 30 сентября 2019

Я пишу программу 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 голосов
/ 01 октября 2019

Проблема в вашем командном файле из того, что я могу сказать. TestNG по своему замыслу будет ожидать завершения выполнения метода конфигурации, прежде чем приступить к выполнению других методов конфигурации или методов тестирования по этому вопросу. TestNG не пытается провести параллелизм там.

Вам необходимо убедиться, что ваш пакетный файл имеет соответствующие механизмы ожидания / ожидания, которые обеспечат его возврат только после того, как все действия, записанные в пакетном файле, завершатся.

В вашем методе @BeforeSuite вам потребуется добавить соответствующую логику опроса, которая будет ожидать завершения операций и затем продолжаться.

В настоящее время из вашего кода это выглядит как p.waitFor();немедленно возвращается обратно, что объясняет, почему ваш метод @BeforeSuite завершается до завершения действий по установке / удалению программного обеспечения.

...