Skip to main content
Skip table of contents

Java Scripts

Javaテストスクリプトの開発

1.はじめに

T-Plan Robotは、Java言語でテストスクリプトを記述できるプログラム可能なJava APIを備えています。TPRスクリプト言語と比較して、このアプローチには次のような多くの利点があります:

  • 強化されたスクリプティング機能。Java構文ははるかに複雑であり、制限されたTPRスクリプト言語では不可能な構文を可能にします。

  • テストコードにおいて、サードパーティ製Javaライブラリが提供する機能を活用する能力。例えば、リレーショナルDB(JDBC経由)、XML(JAXP使用)、SAP(SAP JCo)などの外部ソースとのテストデータ入出力など。

  • カスタマイズ。APIはリモートデスクトップ接続やスクリプティングエンジンなど、T-Plan Robot Enterpriseの内部コンポーネントへのインターフェースを提供するため、ツールの動作をカスタマイズすることが可能です。

  • JavaネイティブAPIおよびサードパーティ製ライブラリを介した他のテストフレームワークとの容易な統合

  • 統合開発環境(IDE)(例:NetBeansEclipse)を通じてテストスクリプトを設計する能力。これらのツールは、プログラマーが効率的にJavaコードを作成する上で、はるかに高度な支援を提供します。

  • Javaテストスクリプトは、Javaコードブロックの形式で通常のテストスクリプトに直接埋め込むことができます。これは、スクリプト言語が不足している、または非効率な場合に、簡単なタスクを作成するためのJavaへの迅速なアクセスを提供することを目的としています。

  • Javaテストスクリプトクラスは、通常のテストスクリプトからRunコマンドを使用して直接インスタンス化および実行できます。Javaコードにパラメーターを渡す仕組みさえ存在します。これは、標準スクリプト言語をカスタム機能で拡張したり、サードパーティ製アプリケーションやデータソースと統合したりするための便利な方法です。

このドキュメントは、Javaテストスクリプトの作成および実行方法に関する基本情報を提供するとともに、T-Plan Robot ドキュメント内で詳細情報を参照する場所を示すことを目的としています。

2.開発環境のセットアップ

ロボットのスクリプトエディタではJavaソースコードの編集が可能ですが、メソッドヒントやデバッグといった高度な開発機能は備えていません。そのため、Java開発にはNetBeansEclipseなどのJava統合開発環境(IDE)の使用を強く推奨します。ロボットはこれらの環境との連携を以下のようにサポートしています:

  1. Robotのプロジェクトフォルダは、ほとんどのIDEと互換性があります。Javaクラスはsrc/フォルダに配置されるため、RobotとIDEが共有するプロジェクトフォルダを作成することが可能です。

  2. ロボットはGUIウィンドウのアクティベーション(フォーカス)時に外部スクリプトファイルの更新を自動的に検出し、未保存のコード変更がない限りスクリプトエディタを再読み込みします。この動作により、IDEとロボットの両方で同一のJavaクラスまたは複数のクラスを同時に編集することが可能となります。

  3. Javaテストスクリプトは、Robot(GUIコントロールまたは-r CLIオプション経由) から、あるいはIDE(main()メソッド経由)から実行できます。

  4. 新しいJavaテストスクリプトの作成にはRobotの使用を推奨します。テストコードはGUIツール(スクリプトレコーダー、コードテンプレート、コマンドウィザードなど)を通じて生成してください。その他のJavaコードの開発にはNetBeansを使用してください。

以下の手順は、T-Plan Robot EnterpriseNetBeans 間で共有されるプロジェクトの設定方法を示していますが、これらの手順は他のIDEにも適用可能です。

A.NetBeans のセットアップ

  1. まだインストールしていない場合は、NetBeansをダウンロードしてインストールしてください。

  2. NetBeansを起動します。

  3. 最初にNetBeansでプロジェクトを作成します。これにより、src/フォルダとbuild.xmlファイルを含む<project_home>/<project_name>のようなパスが作成されます。

    1. メニューのFile->New Projectを選択する。

    2. Java Applicationをを選択し、、Nextをクリックします

    3. プロジェクト名を入力し、プロジェクトを保存するフォルダを選択してください。オプションで、デフォルトのRobotプロジェクトパス(name=MyAutomation, folder=<user home>)をを使用することもできます。

    4. Finish を選択して、プロジェクト構造と設定ファイルを作成します。

  4. プロジェクトツリー内の「 MyAutomation 」ノードを右クリックし、ポップアップメニューから「プロパティ」を選択してプロジェクト設定を開きます。

    1. JavaプラットフォームがJDK 1.6以降であることを確認してください。

    2. コンパイルタブが選択されていることを確認し、[JAR/フォルダを追加]ボタンを選択してください(ダイアログが幅広すぎる場合があり、ボタンを表示させるには右にスクロールする必要があることに注意してください)。

    3. T-Plan Robotのインストールフォルダに移動し、リリースノートファイルの表に記載されているすべてのJARファイルをコンパイル時ライブラリリストに追加してください。

    4. 使用するサードパーティ製ライブラリを追加してください。

  5. 変更を保存するには「OK」を選択してください。

注:Eclipseを使用し実行可能JARファイルをエクスポートする際は、必ずライブラリ処理内の「生成されたJARに必要なライブラリを抽出する」オプションを選択してください。これを行わないと、ロボットのプラグイン機能が動作しなくなります。

B.Robotのセットアップ

  1. スタート・ロボット

  2. RobotがJDKインストール環境のJava実行ファイルで起動されているか、JDKへのパスが適切に設定されていることを確認してください。手順についてはリリースノートを参照してください。JDKへのアクセス設定に失敗すると、後続のJavaテストスクリプトの実行がRobotによって拒否されます。

  3. 共有プロジェクトを作成するには

    • 新しいロボットプロジェクトを作成するには、ロボットGUIで「ファイル」>「新規プロジェクト」を選択し、同じプロジェクトホームとプロジェクト名を選択します。

    • 既存のRobotプロジェクトとNetBeansプロジェクトを統合するには、プロジェクトの内容をNetBeansプロジェクトフォルダにコピーし、その後「ファイル」>「プロジェクトを開く」からプロジェクトを開きます。

  4. 使用するサードパーティ製Javaライブラリは、ロボットのクラスパス(Startコマンドの-classpathオプション内)に追加するか、ロボットインストールフォルダのplugins/ディレクトリにコピーしてください。

  5. Javaテストスクリプトを作成します(下記参照)。NetBeansで同じクラスを開き、必要に応じて両環境でテストコードの開発を開始します。

3.Javaテストスクリプトの基礎

Javaテストスクリプトは、com.tplan.robot.scripting.JavaTestScriptインターフェースを実装するJavaクラスです。ほとんどのJavaテストスクリプトは、このインターフェースを実装し、自動化メソッドの巨大なフレームワークを提供するcom.tplan.robot.scripting.DefaultJavaTestScriptクラスを単純に拡張します。新しいJavaテストスクリプトはいくつかの方法で作成できます:

  1. ロボットGUIの「新規テストスクリプト」ウィンドウ(ファイル→新規テストスクリプト)を通じて。

  2. TPRテストスクリプトをJavaに変換することで実現します。詳細はJavaコンバーターヘルプのトピックを参照してください。この方法は、TPRフォーマットからJavaに移行する人のヘルプトピックを参照してください。この方法は、TPR形式からJavaへ移行するユーザーに適しています。

  3. IDEで手動作成。

最も一般的な方法は、[新規テストスクリプト]ウィンドウでテストスクリプトを作成することです。このウィンドウを開くには、Robot GUIで[ファイル]>[新規テストスクリプト]を選択するか、Ctrl+Nを押します。

  1. テストスクリプトのタイプ値をJavaテストスクリプト(*.java)に設定してください

  2. テストスクリプト名フィールドに、希望するJavaクラス名を設定します。ウィンドウには、Script<番号>などの一意のデフォルト名が提案されます。

  3. 必要に応じて、詳細オプションでJavaパッケージをカスタマイズしてください。

  4. main()メソッドを作成するフラグはオンのままにしておくことを推奨します。そうしないと、このメソッドを手動で追加する必要があるためです。main()メソッドが存在することで、IDEからテストスクリプトを実行できるようになります。

  5. スクリプトパスオプションはデフォルト値のままにしておいてください。これらは後からいつでもPathタブを通じて変更できます。

[OK]をクリックしてウィンドウを閉じると、以下のテストスクリプトが生成されます:

JS
package scripts; 
import com.tplan.robot.scripting.*; 
import com.tplan.robot.*; 
import java.io.*; 

public class Script1 extends DefaultJavaTestScript {

   public void test() {
      try {
         setTemplateDir(getVariableAsString( "_PROJECT_TEMPLATE_DIR" ));
         setOutputDir(getVariableAsString( "_PROJECT_REPORT_UNIQUE_DIR" ));
         report( new File( "results.xml" ), "" );
         // Develop the automation code in here
      } catch (StopRequestException ex) {
         throw ex;
      } catch (IOException ex) {
         ex.printStackTrace();
         throw new IllegalStateException(ex);
      }
   }

   public static void main(String args[]) { 
      Script1 script = new Script1(); 
      ApplicationSupport robot = new ApplicationSupport(); 
      AutomatedRunnable runnable = robot.createAutomatedRunnable(
            script, "Script1@" + Integer.toHexString(script.hashCode()), args, System.out, false ); 
      new Thread(runnable).start(); 
   }
}

以下のルールが適用される:

  • test()メソッドはテストスクリプトのエントリポイントとして機能し、スクリプトが実行されると呼び出されます。そのため、メインスクリプト本体は、report()メソッド呼び出しの直後にtest()メソッドのtry-catchブロック内に配置する必要があります。もちろん、クラスは他のメソッドを定義したり、他のクラスをインスタンス化してtest()メソッド内で使用したりすることも可能です。

  • デフォルトのJavaテストスクリプトのメソッドの多くはIOExceptionをスローする可能性があるため、メインスクリプト本体はtry-catchブロックで囲む必要があります。このような例外(例:IllegalStateException)は、RuntimeExceptionインスタンスでラップして再スローすることを推奨します。これによりRobotはテストスクリプトを失敗として報告し、例外は実行ログに記録されます。この方法の代替として、例外をキャッチしてスクリプト内で直接処理する方法もあります。例えば例外をキャッチした際にllog()メソッドでエラーをログ出力し、exit()で終了コード> 0を返すといった処理です。

  • スクリプトの停止が要求された場合、DefaultJavaTestScriptメソッドはcom.tplan.robot.scripting.StopRequestExceptionをスローします。そのため、スクリプトを適切に停止できるように、この例外はtry-catchブロックでキャッチすべきではありません。上記のクラス例は、例外をキャッチして再スローする代替案を示しています。

  • main()メソッドはオプションであり、削除可能です。このメソッドを含まないJavaテストスクリプトは、Robot CLIおよびGUIを通じて実行できますが、IDEからは実行できません。

何らかの理由で DefaultJavaTestScript クラスを拡張できない場合、代替アプローチとして、JavaTestScript インターフェースを実装するクラスを作成する方法があります。この方法でも T-Plan Robot Enterprise がテストスクリプトを実行するには十分ですが、DefaultJavaTestScript の自動化メソッドに直接アクセスすることはできません。回避策として、このクラスのインスタンスを作成し、コードからそのメソッドを以下のように呼び出します:

JS
import com.tplan.robot.scripting.*; 
import com.tplan.robot.scripting.interpret.TestScriptInterpret; 
import java.io.IOException; 

public class MyCustomTest implements JavaTestScript { 
   ScriptingContext context; 
   TestScriptInterpret interpret; 

   public void setContext(ScriptingContext context) { 
      this.context = context; 
   } 

   public void setInterpret(TestScriptInterpret interpret) { 
      this.interpret = interpret; 
   } 

   public void test() { 
      try { 
         DefaultJavaTestScript defaultScript = new DefaultJavaTestScript(); 
         defaultScript.setContext(context); 

         defaultScript.setTemplateDir(getVariableAsString( "_PROJECT_TEMPLATE_DIR" )); 
         defaultScript.setOutputDir(getVariableAsString( "_PROJECT_REPORT_UNIQUE_DIR" )); 
         defaultScript.report( new File( "results.xml" ), "" ); 
         // Develop the automation code in here
      } catch (StopRequestException ex) { 
         throw ex; 
      } catch (IOException ex) { 
         ex.printStackTrace(); 
         throw new IllegalStateException(ex); 
      } 
   } 
} 

この原則は、他の任意のテストスクリプトをインスタンス化して呼び出すために使用できます。唯一の要件は、そのメソッドの呼び出しを開始する前に、setContext()を通じてテストスクリプトインスタンスのコンテキストを初期化することです。Javaテストスクリプトはいくつかの方法で実行できます:

  1. T-Plan Robot GUI からテストスクリプトの実行ヘルプトピックを参照してください。

  2. T-Plan Robot CLI を通じてJavaソースコード(.javaファイル)は、-r optionの引数として指定できます.

  3. TPRテストスクリプトからのコRunコマンドの呼び出しを通じて。この仕組みはJavaテストスクリプトとTPRの章で説明されています。

  4. main()メソッドを持つテストスクリプトは、コマンドラインまたはIDEからスタンドアロンのJavaプログラムとして実行することも可能です。このメソッドは、createAutomationRunnable()を通じてスクリプトインスタンスから自動化実行可能オブジェクトを作成し、そのrun()メソッドの呼び出しによって実行するか、Threadクラスインスタンス内のスレッドとして起動する必要があります。

  5. main()メソッドで使用されるコードは、あらゆるサードパーティ製JavaアプリケーションからRobot自動化プロセスを開始するために利用できます。また、複数の自動化プロセスを並列に、順序通りに、あるいはその両方の組み合わせで開始するために再利用することも可能です。例については、オンラインチュートリアルのプログラムレベルの実行と負荷テストトピックを参照してください。

4.スクリプト本体の開発

テストスクリプト本体を開発するには、スクリプトエディターヘルプトピックで説明されているロボットのGUIツールを活用してください。ロボットのGUI機能の大半は、TPR形式と同様にJavaをサポートしています。ただし、以下に列挙する機能は例外です。これらは更新リリース内で順次対応されます。

機能

ステータス

スクリプトのコメントをエクスポート

Java テストスクリプトにはまだ対応していません。

セレクションの実行(コードのブロックを選択して実行する機能)。

サポートされています。

Var/Evalコマンド

GUIコンポーネント(プロパティウィンドウ)には、JavaにおけるVar/Evalコマンドの同等機能を作成できるものは存在しません。getContext().setVariable() または getContext().setVariableAs...() メソッドのいずれかを手動でコーディングする必要があります。

スクリプト画像の表示(プロジェクトビューでスクリプトが使用するコンポーネント画像を表示する機能)

Java テストスクリプトにはまだ対応していません。

5.オプション機能

Javaテストスクリプトは、TPR言語で知られるフォールバック手順と互換性のある2つのリスナーインターフェースを任意で実装できます:

リスナー・インターフェース

説明

com.tplan.robot.scripting.DisconnectListener

スクリプト実行中にデスクトップへの接続が予期せず切断された際に呼び出されるメソッドを宣言します。これにより、標準のコネクション回復が使用できない場合における、I/Oエラー処理および/または最終的なカスタム接続回復のための中央集約ポイントを設定できます。

com.tplan.robot.scripting.ComparisonFailureListener

compareTo(), waitFor()またはscreenshot()メソッドによる画像比較が失敗した際に呼び出すメソッドを宣言します。これにより、比較エラー処理の中央集約点を設定できます。例えば、スクリプトが画面上のコンポーネント位置特定に多数の画像比較操作を依存している場合、各比較結果の失敗を個別にテストする代わりに、このインターフェースを通じて失敗処理の中央集約ポイントを設定できます。

クラスをリスナーとしてどこかに登録する必要はありません。テストスクリプトクラスがこれらのインターフェースを実装するだけで、指定されたイベントを受信できます。Javaテストスクリプトは、テストフレームワーク全体で様々なリスナーインターフェースを実装することで、さらなる情報(イベント)を受け取ることが可能です。最も重要なものは以下の通りです:

リスナー・インターフェース

説明

com.tplan.robot.scripting.ScriptListener

テストスクリプトのライフサイクルイベント(実行開始、停止、一時停止、正常終了など)を受信します。このインターフェースを実装するテストスクリプトは、`test()`メソッド内部で`getContext().getScriptManager().addScriptListener()`を通じて登録できます。

java.beans.PropertyChangeListener

このインターフェースを実装するテストスクリプトは、コンテキスト変数の変更イベントに対して、getContext().getVariables().addPropertyChangeListener() を通じてリスナーを登録できます。

com.tplan.robot.remoteclient.RemoteDesktopClientListener

ローカルデスクトップクライアントによって実行された操作のイベント(デスクトップへのマウスやキーボードイベントの送信など)を受信します。このインターフェースを実装するテストスクリプトは、`test()`メソッド内部から`getContext().getClient().addClientListener()`を通じて登録できます。

com.tplan.robot.remoteclient.RemoteDesktopServerListener

リモートデスクトップからのイベント(デスクトップ画面の更新やリモートクリップボードの変更など)を受信します。このインターフェースを実装するテストスクリプトは、`test()`メソッド内部から`getContext().getClient().addServerListener()`を通じて登録できます。

com.tplan.robot.LicenseListener

ライセンスシートの総数/使用数/空き数に関するイベントを受信します。この情報は、テストスクリプトスケジューラが過剰な並列スクリプトの起動を回避するために使用できます。任意のJavaクラスは、com.tplan.robot.ApplicationSupport.addLicenseListener()メソッドの呼び出しを通じて、いつでも登録できます。

TPRテストスクリプトとは異なり、Javaスクリプトはcom.tplan.robot.preferences.UserConfigurationクラスを通じてユーザー設定値を変更できます。以下の規則が適用されます:

  • 設定はテストスクリプトクラスのどこからでも変更できます。main()メソッド内で変更を行う場合、ApplicationSupportのインスタンス化後に行う必要があります。

  • ユーザー設定は共有オブジェクトであるため、設定変更は既存のテストプロセス(実行中のスクリプト)だけでなく、変更後に同じJavaインスタンス内で開始されるすべてのテストプロセスにも影響します。

  • 設定を変更するには、設定キー(名前)と期待される値のタイプを特定する必要があります。設定キーとそのデフォルト値はDefaultConfiguration.propertiesファイルに記載されています。設定キーと期待される値は、設定ウィンドウの設定の詳細を表示機能を通じて、よりユーザーフレンドリーな方法で取得することも可能です。

  • プレファレンスのキーまたは値がNullであることは許可されません。すべてのプレファレンス値は内部的にStringインスタンスとして保存され、非String値は米国英語のフォーマットを使用して文字列に変換されます。setメソッドとgetメソッドは自動的にこの変換を実行します。例えば、setString("preferenceName", "2")とsetInteger("preferenceName", 2)は同等であり、プレファレンスを値2に設定します。

  • このフレームワークは、設定値が想定される型に合致するかどうかを一切チェックしません。例えば数値設定に数値以外の値を設定した場合、設定自体は正しく保存されますが、その値に依存するオブジェクトはクラッシュしたりエラーを発生させたりする可能性があります。設定値がどのようなものになり得るかを必ず理解してください。設定値を確認するには「設定」ウィンドウが最適です。

設定値を設定する方法は2つあります:

  1. UserConfiguration.getInstance().set...() メソッドのいずれかによる直接設定。この方法は永続的であり、他のプロセスが UserConfiguration.saveConfiguration() メソッドを呼び出した場合、変更内容がハードドライブ上のユーザー設定ファイルに保存される可能性があります。OSレベルで2つの独立したRobotプロセスがユーザー設定ファイルを上書きするのを防ぐ同期メカニズムが存在しないため、同じユーザーアカウントで複数のRobotインスタンスが実行される可能性がある環境では、この方法による設定値の変更は推奨されません。

  2. 設定の上書き。設定フレームワークは、UserConfiguration.getInstance().getOverrideTable() を通じて利用可能な上書き設定キー値マップを維持します。このマップは設定ファイルから読み込まれた設定よりも優先度が高く、単一の Java プロセス内でのみ有効であり、その値はどこにも保存されません。これはテストスクリプト向けの推奨方法です。

以下の例は、 を通じて実行されるテストスクリプトを示しています。main()起動時にロボットのGUIウィンドウを最大化しようとするメソッド。対応するui.mainframe.maximizeこの設定は、[環境設定]ウィンドウの[メニュー&ツールバー]パネルにある「起動時にGUIを最大化」という項目で確認できます。

JS
import com.tplan.robot.preferences.UserConfiguration; 
... 

public class Script1 extends DefaultJavaTestScript { 

    public void test() { 
        ... 
    } 

    public static void main(String args[]) { 
        Script1 script = new Script1(); 
        ApplicationSupport robot = new ApplicationSupport(); 
        UserConfiguration.getInstance().getOverrideTable().put( "ui.mainframe.maximize" , "true" ); 
        AutomatedRunnable runnable = robot.createAutomatedRunnable(script, "javatest" , args, System.out, false ); 
        new Thread(runnable).start(); 
    } 
}

設定を変更する機能により、テストスクリプトは以下のような設定駆動型の機能を制御できます:

  • デスクトップビューアのヘルプトピックに記載されている接続回復、接続プール、およびリフレッシュデーモン

  • プロトコルバージョン、ピクセルフォーマット、エンコーディング、ログレベルなどのVNCセッションパラメータ。環境設定ウィンドウの「RFB (VNC) 3.x クライアント」パネルを参照してください。

6.重要なテストフレームワークオブジェクト

T-Plan Robot テストフレームワークは、主に com.tplan.robot.scripting パッケージ下に集中した一連の Java クラスで構成されています。これらの役割を理解することで、より優れたテストスクリプトの開発や自動化プロセスのカスタマイズが可能になります。テストスクリプトは自動化コマンド呼び出しで構成されるファイルです。各コマンドは専用のコマンドハンドラを通じて処理されます。これは CommandHandler インターフェースを実装するクラスであり、コマンド構文と、コマンドがコンパイルまたは実行された際に実行すべき処理を定義します。利用可能なコマンドハンドラのマップはスクリプトマネージャー(後述)によって管理されます。コマンドハンドラはTPR言語とJavaテストスクリプトで共有されるため、Plugin APIを介してコマンドハンドラを追加すると、両方のスクリプト形式で利用可能になります(Javaの場合、カスタムコマンドはDefaultJavaTestScriptの汎用メソッドrunScriptCommand()を使用して呼び出す必要があります)。コマンドハンドラは実質的にプラグインであるため、ソースコードから製品全体を再構築することなく言語に新規コマンドを追加することが極めて容易です。各テストスクリプトはテストインタプリタにカプセル化されます。これはTestScriptInterpretインターフェースを実装するクラスであり、以下を定義します:

  • テストスクリプトエディタでテストスクリプトコードを表示する方法。インタプリタはエディタ用にStyledDocumentを作成するため、任意のカスタムコードスタイルを作成し、構文強調表示を実装できます。

  • テストスクリプトコードのコンパイル方法。Javaテストスクリプトインタプリタはjavac Javaコンパイラを通じてコードをコンパイルします。一方、TPRスクリプトインタプリタは実際にはコードをコンパイルせず、コードが必要な構文を満たしているかのみを確認します。

  • テストスクリプトコードの実行方法。ユーザーがテストスクリプトの実行を選択すると、テストフレームワークは実際には関連するスクリプトインタプリタのexecute()メソッドを呼び出すだけです。スクリプトの実行を停止または一時停止するメソッドも用意されています。

テストスクリプトインタプリタは、TestScriptInterpretインターフェースを実装するプラグイン可能なオブジェクトです。これにより、カスタムインタプリタを実装し、T-Plan Robot Enterpriseが別の言語をサポートすることが可能になります。スクリプトがコンパイルまたは実行されるたびに、スクリプトコンテキストの固有インスタンスに関連付けられます。これはマップであり、コンパイルや実行に関連する全ての必要データを格納する役割を担います。スクリプト変数のマップ、出力オブジェクトのリスト(スクリーンショット、警告、ログ、スクリプト/ステップ結果など)、コンパイルエラーのリスト、テストスクリプトインタプリタ、デスクトップクライアント、スクリプトマネージャー、スクリプトパーサーなど、全ての重要なオブジェクトへの参照など、多くの重要なオブジェクトを含みます。詳細は ScriptingContext インターフェースを参照してください。このインターフェースはコンテキスト内に現れる可能性のある全オブジェクトへのキーを定義するとともに、頻繁にアクセスされるオブジェクト向けの便利な取得メソッドを多数提供します。スクリプトマネージャーは、テストフレームワークに参加する全てのオブジェクトの主要なハブとして機能します。自動テストスレッドごとに1つのスクリプトマネージャーインスタンスが存在します。マネージャーはインスタンス化された全てのテストスクリプトインタプリタを追跡し、コマンドハンドラーのマップも維持します。また、全てのスクリプティングコンテキストインスタンスを作成し、デフォルトデータ(重要なオブジェクトへの参照や適用可能なデフォルト/暗黙的変数)で初期化します。addCommandListener()やaddScriptListener()などのメソッドにより、テストスクリプトのライフサイクル中に発生する様々なイベントへの登録が可能です。デスクトップクライアントは、T-Plan Robot Enterpriseと接続されたデスクトップ間の通信を処理します。クライアントクラスはRemoteDesktopClientインターフェースを実装します。これらはスクリプティングフレームワークの一部ではありませんが、スクリプト実行において重要な役割を果たします。クライアントは接続URLで指定されたプロトコルに応じて選択されます。現在使用中のクライアントへの参照は、コンテキストおよびスクリプトマネージャーオブジェクト(getClient()メソッド)を通じて取得可能です。クライアントへの接続が既に存在している状態でスクリプトが実行された場合、このメソッドはクライアントへのアクセスを提供します。そうでない場合は、connect()メソッド呼び出しを通じて接続が確立されるまでnullを返します。

7.JavaテストスクリプトとTPR

Javaテストスクリプトは、TPR形式のスクリプトから簡単に呼び出せます。同じプロジェクトに属するJavaテストスクリプトは、TPRコードからRunコマコマンドで直接呼び出せます。JARファイルにバンドルされているJavaクラス、またはプロジェクトのJavaホームディレクトリ<projectHome>/src以外のフォルダにあるJavaクラスは、まずincludeコマンドでインポートする必要があります。Verify.javaというJavaスクリプトとTestFile.tprというTPRスクリプトの2つで構成される単純なプロジェクトを想定しましょう:

JavaテストスクリプトVerify.javaは、"file "によって参照されるファイルの存在を検証し、"exists "コンテキスト変数を "true"(ファイルが存在する)または "false"(ファイルが存在しない)のいずれかに設定する:

JAVA
package scripts; 

import com.tplan.robot.scripting.*; 
import com.tplan.robot.*; 
import java.io.*; 

public class Verify extends DefaultJavaTestScript { 

    public void test() { 
        try { 
            setVariable("exists", new File(getVariableAsString("file")).exists()); 
        } catch (StopRequestException ex) { 
            throw ex; 
        } catch (Exception ex) { 
            ex.printStackTrace(); 
            throw new IllegalStateException(ex); 
        } 
    } 
} 

TPR テストスクリプト TestFile.tpr は、scripts.Verify クラスを呼び出して C:∕mydata.xls ファイルの存在をチェックし、その結果に応じて合格または不合格のテストステップをレポートに入力します:

JS
Var _REPORT_DIR="{_PROJECT_REPORT_UNIQUE_DIR}" 
Var _TEMPLATE_DIR="{_PROJECT_TEMPLATE_DIR}" 
Report "results.xml" 
Var file="C:\mydata.xls" 
Run scripts.Verify 
if ("{exists}" == "true") { 
    Step "File existence" pass 
} else { 
    Step "File existence" fail 
    Exit 1 
}

実行コマンドの呼び出しは、プロパティダイアログで簡単に作成・変更できます。開くには、スクリプトエディタで空の行を右クリックし、コンテキストメニューからコマンドの作成->実行を選択するか、既存の実行コマンドを右クリックしてプロパティを選択します。

この例は、JavaスクリプトとTPRスクリプトがどのようにデータを交換するかも示している。TPRスクリプトは "file "変数をターゲットファイル名に設定し、Javaコードは後でそれをピックアップする。TPRスクリプトから見える変数はすべて、DefaultJavaTestScriptクラスが提供するgetVariableAs...()メソッドを通してJavaコードから利用できる。Javaスクリプトは、setVariable()メソッドを通して、変数を作成したり書き換えたりすることもできます。DefaultJavaTestScript クラスをサブクラス化していない Java テストスクリプトは、context オブジェクトが提供する同じメソッド(context.getVariableAs...() および context.setVariable())を通じて、変数を操作できます。

TPRスクリプトがJavaスクリプトにパラメータを渡すには、さらに2つの方法がある:

  1. 宣言されていないパラメータ、

  2. 宣言されたパラメータ。

宣言されていないパラメータを含む例を作成するには、単に次のように置き換えるだけでよい。

JS
Var file="C:\mydata.xls" 
Run scripts.Verify

JS
Run scripts.Verify file="C:\mydata.xls"

Run コマンドは"name=value"パラメーターをJavaクラス名の引数の後に追加します。これらの値は内部的にローカル変数に変換されるので、Javaテスト・スクリプトを修正する必要はありません。唯一の違いは「ファイル元の例で使用された変数はグローバルで、スクリプトの最後まで存在しますが、ローカル変数は Java テスト スクリプトの実行時だけ存在し、Run コマンドが終了すると削除されます。

実行プロパティ・ウィンドウは、下部のダイナミック・パラメータ・リストを通じて、宣言されていないパラメータの編集をサポートしています:

これらのパラメータは、強制もチェックもされないので、宣言されていないと呼ばれる。Javaコードが期待するパラメータの正しいセットとその値を指定するのは、ユーザー次第です。このアプローチには、当然ながら多くの欠点がある。間違ってパラメータを省略したり、間違ったパラメータ値を指定したりしやすい。また、プログラマーは、各 Java テストスクリプトのパラメータをきちんと文書化する必要があります。

これらの欠点に対処するため、Java テスト・スクリプトはパラメータを宣言することができます。これはすべて、Java テストスクリプト側でパラメトリックテストスクリプトインターフェース(最終的にはその親ExtendedParamsObjectひとつ)。インターフェイスメソッドは、テストスクリプトの説明(短い形式と長い形式)、受け入れ可能なパラメータ名のリスト、およびプリファレンスオブジェクトで、各パラメーターをカプセル化して記述する。このPreferenceクラス名 - テストスクリプトのパラメータのサポートは、Preferences フレームワークの上に構築されました。

そのためにVerify.javaを宣言します。"file"パラメーターは、IDEで以下のようにクラスを更新する:

JAVA
package scripts; 
import com.tplan.robot.preferences.Preference; 
import com.tplan.robot.scripting.*; 
import java.io.*; 
import java.util.*; 
public class Verify extends DefaultJavaTestScript implements ParametrizedTestScript {
    public void test() {
        try { 
            setVariable("exists", new File(getVariableAsString("file")).exists()); 
        } catch (StopRequestException ex) {
            throw ex; 
        } catch (Exception ex) { 
            ex.printStackTrace(); 
            throw new IllegalStateException(ex); 
        }
    }
    public String getShortDescription() {
        return "ファイルの存在を確認" ;
    }

    public String getLongDescription() {
        return "ローカルファイルシステム内のファイルの存在を確認します。 \n"
                + "ファイルは必ず \"file\" パラメータとして渡され、絶対ファイルでなければなりません";
    }

    // "file "パラメーター名を返す
    public List getParameters() { 
        return Arrays.asList(new String[]{"file"}); 
    }

    // "file "パラメータが "one of "でない。
    public List getParameterValues(String parameterName) {
        return null ; 
    }

  // これは、プロパティウィンドウが「OK」ボタンで閉じられるときに、そこから取得したパラメータを使って呼び出されます。
  // これにより、コマンドが作成される前に、パラメータを後処理して微調整したり、拒否したりすることができます。
    public void setParameters(Map paramsAndValues) { { パラメータを設定します。
    }

    public List getVisualParameters() { 
        List l = new ArrayList(); 
        Preference p = new Preference("file", Preference.TYPE_FILE, "File to verify", null); 

        // パラメータに空の値を拒否させる
        p.setAcceptEmptyValue(false);

        // パラメータを必須にする(空の場合、エディタは閉じない)
        p.setMandatory(true);

        l.add(p);
        return 1;
    }
}

このようなテスト スクリプトの Run プロパティ ウィンドウには、次のように表示されます。”file"GUIは、宣言されたパラメータタイプに応じて、その値に最適なエディタコンポーネントを選択します。そのPreference.TYPE_FILEタイプは、例えば、編集可能なテキストフィールドで表され、オプションとして、"... "ボタンで選択されたローカルファイルシステムからのファイルを入力することができる。このパラメータは必須であると宣言され、空の値を受け付けないように設定されているため、検証するファイルフィールドが入力されない限り、プロパティウィンドウは閉じません。

image-20260112-195215.png

についてプリファレンスクラスは、ほとんどの一般的な値の型をサポートしています。また、値のチェックや値エディタコンポーネントのカスタマイズを可能にするオプションのメカニズムもあります。例えば、数値は最小値、最大値、またはその両方に対してチェックすることができます。

このフレームワークにより、Javaスクリプトのカプセル化されたライブラリを構築することができ、JavaとTPRテストスクリプトの両方から呼び出すことができる。スクリプトは自動化タスクに限定されません。test()メソッドは、例えば JDBC を介したデータベース I/O のようなカスタム機能を実装することができます。この観点から、JavaテストスクリプトはT-Plan Robot Enterpriseの代替プラグインインターフェースと考えることができます。

8.サードパーティアプリとの統合

RobotをJavaアプリケーションに統合するには、以下のJavaシステムプロパティを利用することができます:

プロパティ

説明

robot.macNativeLayerDir=<dir_containing_librobot.dylib>

Mac OS X用のlibrobot.dylibネイティブ・ライブラリの場所を設定します。ApplicationSupportクラスがインスタンス化される前にプロパティを設定します。

robot.licenseKey=<ライセンスキーのパス(s)>

のパスまたはセミコロンで区切られたパスを設定する。ライセンスキー.ApplicationSupportクラスがインスタンス化される前にプロパティを設定します。

robot.cleanInstallMode=true

<userHome>/tplanrobot.cfgにある既存のユーザー設定ファイルは無視します。ApplicationSupportクラスがインスタンス化される前にプロパティを設定してください。

robot.setWindowSize=<幅>x<高さ>

ロボットのウィンドウサイズを設定します。通常、デモの録画用にウィンドウを準備するために使用します。GUIを開く前に設定してください。

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.