テストからの外部プログラムの実行

ExecTest クラスの機能は、execName 変数で定義されるプログラムを、テストの実行先にするシステムで実行することです。
package test;

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 変数で定義されるプログラムを、テストの
 * 実行先にするシステムで実行することです。
 * プログラムの戻りコードが 0 の場合、テスト判断は PASS (合格) に設定されます。
 * プログラムを実行しなかった場合や、プログラムの戻りコードがゼロ以外の場合、
* テスト判断は FAIL (不合格) に設定されます。
 * このサンプルでは、プログラムは perl.exe です。
 */

/**
 * @作成者 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("Unable to run = " + execName);
            logger.reportVerdict("Execution of " + execName + " failed",
                                                VerdictEvent.VERDICT_FAIL);
            return null;
        }

        // テストが完了するまで待機
        try {
            rtnval = p.waitFor();
            logger.reportMessage("Process return value is " +
                                                String.valueOf(rtnval));
        } catch (InterruptedException e1) {
            logger.reportMessage("Unable to wait for " + execName);
            logger.reportVerdict("WaitFor on " + execName + " failed",
                                                VerdictEvent.VERDICT_FAIL);
            return null;
        }

        // テストの戻りコードを確認し、テスト判断を適切に設定
        if (rtnval != 0)
        {
            logger.reportVerdict("Execution failed", VerdictEvent.VERDICT_FAIL);
        } else {
            logger.reportVerdict("Execution passed", VerdictEvent.VERDICT_PASS);
        }

        return null;
    }
}

フィードバック