Я хотел бы запустить внешний файл .bat, используя скрипт groovy в soapUI. также хотел бы использовать вывод, сгенерированный из внешнего файла, в качестве значения для заголовка
вот скрипт, который я использую для запуска файла bat
String line
def p = "cmd /c C:\\Script\\S1.bat".execute()
def bri = new BufferedReader (new InputStreamReader(p.getInputStream()))
while ((line = bri.readLine()) != null) {log.info line}
вот содержимое bat файла
java -jar SignatureGen.jar -pRESOURCE -nRandomString -mGET -d/api/discussion-streams/metadata -teyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJjbGllbnQiOiIxIiwicm9sZSI6IllGQURNSU4iLCJleHAiOjI3NTgzMjU2MDIsInRpIjo3MjAwNiwiaWF0IjoxNTU4MzI1NjAyLCJwZXJzb24iOiI1In0.bbci7ZBWmPsANN34Ris9H0-mosKF2JLTZ-530Rex2ut1kjCwprZr_196N-K1alFBH_A9pbG0MPspaDOnvOKOjA
Следующий код:
def p = "ls -la".execute()
def err = new StringBuffer()
def out = new StringBuffer()
p.waitForProcessOutput(out, err)
p.waitForOrKill(5000)
int ret = p.exitValue()
// optionally check the exit value and err for errors
println "ERR: $err"
println "OUT: $out"
// if you want to do something line based with the output
out.readLines().each { line ->
println "LINE: $line"
}
основан на Linux, но переводится в Windows, просто заменяя ls -la
вызовом вашего файла bat cmd /c C:\\Script\\S1.bat
.
Это выполняет процесс, вызывает ждатьForProcessOutput, чтобы убедиться, что процесс не блокируется и что мы сохраняем потоки stdout и stderr процесса, а затем ждем завершения процесса, используя ждатьForOrKill.
После waitForOrKill
процесс либо был остановлен, потому что он занял слишком много времени, либо завершился нормально. В любом случае переменная out
будет содержать вывод команды. Чтобы выяснить, была ли ошибка во время выполнения bat-файла, вы можете проверить переменные ret
и err
.
Я выбрал тайм-аут waitForOrKill
наугад, настройте его в соответствии с вашими потребностями. Вы также можете использовать waitFor
без тайм-аута, который будет ждать завершения процесса, но, как правило, лучше установить тайм-аут, чтобы ваша команда не выполнялась бесконечно.
Переменная out
в приведенном выше коде содержит вывод. Это тип StringBuffer, и если вам нужна переменная в экземпляре String, вместо этого вы можете, например, сделать: def strOut = out.toString()
что даст вам переменную strOut
типа java.lang.String
с выводом из выполнения файла bat.
Спасибо за ваш ответ, однако, как я могу захватить вывод и назначить его переменной