テスト・ジェネレーターは、レコーダー・パケットを使用し、テスト・ジェネレーターがテスト・モデルに追加するテスト・モデル・エレメントを生成します。
テスト・ジェネレーターを定義する前に、ジェネレーターが使用可能なデータの型と、ジェネレーターが生成するモデル・エレメントのタイプを識別する必要があります。
テスト・ジェネレーターの入力データとして使用できるのは、レコーダーが生成した生データか、変換ステージで変更されたデータのいずれかです。
テスト・ジェネレーターの出力エレメントは、フィーチャー (通常は特定のプロトコルに対応します) によってタイプ指定されます。
新規テスト・ジェネレーターを定義するには、以下のようにします。
- com.ibm.rational.test.lt.testgen.core3.testGenerator 拡張ポイントを使用して、plugin.xml ファイルで新規のテスト・ジェネレーター・タイプを宣言します。
- このテスト・ジェネレーターに固有の ID および名前を割り当てます。
- テスト・ジェネレーターが使用可能なパケット・タイプを宣言します。
- テスト・ジェネレーターに送信されるパケット・ストリームの必須プロパティーを宣言します。フレームワークは必要なコンバーターを変換ステージで組み込むため、これらのプロパティーはパケットがテスト・ジェネレーターに到達した際に検査されます。
コンバーターによるプロパティーの定義については、新規パケット・コンバーターの定義を参照してください。
- com.ibm.rational.test.lt.testgen.core.testgen.ITestGenerator インターフェースを実装する実装クラスを定義します。
本製品には、パケットの開始タイム・スタンプに基づいて順序付けされたパケットのストリームを生成する、組み込みのコンバーターが含まれています。
通常、レコーダーは終了タイム・スタンプに基づいてソートされたパケットを生成します。大部分のテスト・ジェネレーターでは開始タイム・スタンプに基づいて入力パケットを順序付けする必要があるため、パケット・ストリームの必須プロパティーには sorted プロパティーを含める必要があります。
ITestGenerator の実装については以下の点を考慮してください。
- 通常は、基本的な実装が用意されていて、特定のメソッドのオーバーライドのみが必要である com.ibm.rational.test.lt.testgen.core.testgen.BaseTestGenerator クラスを拡張します。
- テスト・ジェネレーター構成にあるすべてのオプションは、getContext().getConfiguration() メソッドを使用して initialize() メソッドで読み取られます。
- process() メソッドが最も重要です。フレームワークは、入力パケットごとにこのメソッドを呼び出します。このメソッドはモデル・エレメントを作成し、エレメントを出力テストに追加します。モデル・エレメントは、getContext().getStack() メソッドによって返される ITestStack オブジェクトのメソッドを使用してテストに追加する必要があります。
- フレームワークは、すべてのパケットがテスト・ジェネレーターに送信された後、complete() メソッドを呼び出します。
complete() メソッドは、ポストプロセッシング操作を実行するために使用できます。
- エラー・メッセージなど、テスト・ジェネレーターからユーザーへのメッセージを報告するには、getContext().logMessage() メソッドを使用します。
メッセージがリカバリー不能エラーに関するものである場合、フレームワークはテスト生成の処理を停止します。
注: テスト・ジェネレーターでテストへのエレメントの追加に遅延があってはなりません。
テスト・ジェネレーターは、エレメントが作成された直後にそれらをテストに追加する必要があります。
テスト・ジェネレーターは、テストに追加した後のエレメントにもデータを追加することができます。
テストへのエレメントの追加に遅延があると、生成されたエレメントが正しく順序付けされない可能性があります。
例えば、混合プロトコル環境で別のテスト・ジェネレーターもエレメントを生成する場合や、記録に注釈が含まれている場合、生成されたエレメントが正しい順序にならない可能性があります。
それでもテストへのエレメントの挿入を遅らせる可能性がある処理 (例えば、上位オブジェクトの作成を目的としたデータの累積) を実行する必要がある場合は、その処理を実行するコンバーターを作成して、そのコンバーターをテスト・ジェネレーターの開始前に挿入してください。