Выполнение .jar в сценарии Groovy

Я создаю тестовый пример с Katalon Studio, используя режим сценария, который является отличным сценарием. Мне нужен этот отличный скрипт для выполнения .jar, который будет находиться в папке проекта Katalon.

В целях тестирования я создал .jar, который создает файл с именем «the-file-name» и выводит сообщение в консоль.

Я нашел способ выполнить команду в Groovy:

def command = "git --version"

def proc = command.execute()

proc.waitFor()

println proc.in.text

Это напечатает версию git в консоли Katalon. Итак, я догадался, что достаточно поместить «java -jar test.jar», но даже несмотря на то, что выполнение, кажется, заканчивается правильно, также кажется, что .jar ничего не сделал. На всякий случай я выполнил тот же самый .jar из командной строки Windows, и он отлично работает. Файл создается, и сообщение записывается в консоль.

При выполнении консоль Katalon действует так, как если бы она была запущена правильно. Сообщения об ошибках отсутствуют, и выполнение помечено как успешное, но тестовый файл «the-file-name» нигде не может быть найден, и я не получаю вывод консоли .jar, показанный в консоли Katalon, как в команде git.


person MikeMapanare    schedule 25.02.2019    source источник
comment
Если у вас есть код, пожалуйста, не используйте снимки экрана для его передачи, а просто вставьте код. Это помогает поисковым системам подобрать его и т. Д., А также помогает написать ответ с помощью копирования и вставки. А что касается вашей проблемы: проверьте код ошибки и посмотрите, есть ли что-то на stderr. Не думайте, что в вашем терминале что-то работает, это работает и в разных программах. Environment / paths / ... может быть отключен и т. Д.   -  person cfrick    schedule 25.02.2019


Ответы (1)


Нашел способ это сделать.

public class CustomKeywords {

    @Keyword
    def runBatch(String path) {
        def cmd = "cmd /c \"java -jar \"" + path + "\"\"";
        runCmd(cmd)
    }

    def runCmd(String cmd) {
        KeywordUtil.logInfo("cmd: ${cmd}")

        def proc = cmd.execute();
        def outputStream = new StringBuffer();
        def errStream = new StringBuffer()
        proc.waitForProcessOutput(outputStream, errStream);
        println(outputStream.toString());
        println(errStream.toString())

        if(proc.exitValue() != 0){
            KeywordUtil.markFailed("Out:" + outputStream.toString() + ", Err: " + errStream.toString())
        }
    }

}
person MikeMapanare    schedule 25.02.2019