Запуск внешней программы из теста

Класс ExecTest запускает программу, определенную в переменной execName, в системе, в которой выполняется тест.
package customcode;

import com.ibm.rational.test.lt.kernel.services.ITestExecutionServices;
import com.ibm.rational.test.lt.kernel.services.ITestLogManager;
import org.eclipse.hyades.test.common.event.VerdictEvent;

import java.io.IOException;

/**
 * Класс ExecTest запускает программу, определенную в переменной execName,
 * в системе, в которой выполняется тест.
 * Вердикт теста - PASS, если код возврата программы равен 0.
 * Вердикт теста - FAIL, если программа не выполняется или
 * если код возврата программы отличен от нуля.
 * В этом примере программа - это perl.exe.
 */

/**
 * @author Примеры пользовательского кода IBM
 */

public class ExecTest implements
        com.ibm.rational.test.lt.kernel.custom.ICustomCode2 {

    /**
     * Экземпляры этого объекта будут созданы с помощью конструктора no-arg.
     */
    public ExecTest() {
    }

    public String exec(ITestExecutionServices tes, String[] args) {
        ITestLogManager logger = tes.getTestLogManager();
        int rtnval = 1;
        Process p = null;
        String execName = "C:/Windows/System32/perl.exe C:/Perl/true.pl";

        Runtime rt = Runtime.getRuntime();
        // Выполнить тест
        try {
            p = rt.exec(execName);
        } catch (IOException e) {
            logger.reportMessage("Невозможно выполнить = " + execName);
            logger.reportVerdict("Выполнить " + execName + " не удалось",
                                                VerdictEvent.VERDICT_FAIL);
            return null;
        }

        // Дождаться окончания выполнения теста
        try {
            rtnval = p.waitFor();
            logger.reportMessage("Код возврата процесса: " +
                                                String.valueOf(rtnval));
        } catch (InterruptedException e1) {
            logger.reportMessage("Невозможно дождаться окончания выполнения = " + execName);
            logger.reportVerdict("Дождаться окончания выполнения " + execName + " не удалось",
                                                VerdictEvent.VERDICT_FAIL);
            return null;
        }

        // Проверить код возврата теста и задать соответствующий вердикт
        if (rtnval != 0)
        {
            logger.reportVerdict("Выполнить не удалось", VerdictEvent.VERDICT_FAIL);
        } else {
            logger.reportVerdict("Выполнение прошло успешно", VerdictEvent.VERDICT_PASS);
        }

        return null;
    }
}

Комментарии