パケット・コンバーターは、レコーダー・パケットのストリームを変換します。
パケット・コンバーターを使用して、レコーダーが収集する生データを、テスト・ジェネレーターが使用する適切な形式に適合させます。
通常、コンバーターは、以下のいずれかのパターンに従います。
- フィルター・コンバーターは、特定の基準を満たさない入力パケットを除去します。
このコンバーターはパケットに変更を行ったり、出力ストリームに新規パケットを導入したりすることはありません。
この製品には汎用コンバーターが用意されており、ID は com.ibm.rational.test.lt.testgen.core3.filter です。このコンバーターに、条件を指定するパラメーターを追加することができます。
- アノテーター・コンバーターは、入力ストリームのパケットの削除や変更を行うことはありませんが、出力ストリームには追加のパケットを導入します。これらのパケットは、他のパケットから推測される追加情報を伝達する注釈 パケットです。例えば、コンバーターがパケット・ストリーム内でセッション、接続、またはページ境界を探し、入力ストリーム内で境界が検出された際には必ず境界パケットを追加することがあります。
これにより、テスト・ジェネレーターは、パケット・ストリーム内で先読みを行うことなく、境界を識別できるようになります。
- 再順序付けコンバーターは、入力ストリームのパケットの追加、変更、および除去は行いませんが、それらを異なる順序で出力します。
代表的な例が、本製品に用意されているパケット・ソーターで、これは開始タイム・スタンプ順にパケットをソートして出力します。ソーターの ID は com.ibm.rational.test.lt.testgen.core3.packetSorter です。
- 集約機能コンバーターには、さまざまな入力パケット・タイプと出力パケット・タイプがあります。
このコンバーターは、複数の入力パケットを 1 つの出力パケットに集約します。
通常、コンバーターは、下位プロトコルを上位プロトコルに変換します。例えば、本製品には、クライアントと HTTP サーバーの間で交換されるバイト・ストリーム内の生データを、集約された HTTP パケット (要求/応答のペア) に変換するコンバーターが用意されています。
新規コンバーターを定義するには、以下の手順を実行する必要があります。
- com.ibm.rational.test.lt.testgen.core3.packetConverter 拡張ポイントを使用して、plugin.xml ファイルで新規のパケット・コンバーター・タイプを宣言します。
- このパケット・コンバーターに固有の ID および名前を割り当てます。
- コンバーターが受信するパケット入力ストリームの必須プロパティーを宣言します。フレームワークは必要なコンバーターを変換ステージで組み込むため、これらのプロパティーはパケットがコンバーターに到達した際に検査されます。
例えば、開始タイム・スタンプに従って順序付けされた入力パケットをコンバーターが必要とする場合は、sorted パラメーターを指定します。
- 入力ストリームのプロパティーと比較して、このコンバーターがどのプロパティーを出力ストリームに追加するのか、または出力ストリームから除去するのかを宣言します。
例えば、コンバーターにより入力ストリームの ordered プロパティーが乱れる可能性があります。その場合には、removedProperties クラスに sorted パラメーターを含める必要があります。
- コンバーターの入力パケット・タイプと出力パケット・タイプが異なり、これがパケット・タイプ・コンバーターであると考えられる場合には、このコンバーターがパケット・タイプ変換にコントリビュートすることを宣言し、コンバーターが生成する入力パケットおよび出力パケットのタイプを指定します。
- com.ibm.rational.test.lt.testgen.core.conversion.IPacketConverter インターフェースを実装する実装クラスを定義します。
IPacketConverter の実装については以下の点を考慮してください。
- 通常は、基本的な実装が用意されていて、特定のメソッドのオーバーライドのみが必要である com.ibm.rational.test.lt.testgen.core.conversion.BasePacketConverter クラスを拡張します。
- パケット・コンバーターは、別の IPacketReferenceOutputStream インターフェースに書き込みを行う IPacketReferenceOutputStream インターフェースです。
言い換えると、パケット・コンバーターには、処理する入力パケットごとにフレームワークによって呼び出される writePacket() メソッドがあります。パケット・コンバーターは、出力へのパケットの送信が必要になるたびに getContext().getOutputStream().writePacket() メソッドを呼び出す必要があります。
- パケット・コンバーターでは、オプションを使用できます。
オプションは、通常は initialize() メソッドの中で呼び出される getContext().getConfiguration() メソッドを使用して利用することができます。
- パケット・コンバーターは、complete() メソッド内で出力に対して追加のパケットを送信することができます。このメソッドは、使用する入力パケットがなくなった場合に呼び出されます。
- エラー・メッセージなど、テスト・ジェネレーターからユーザーへのメッセージを報告するには、getContext().logMessage() メソッドを使用します。メッセージがリカバリー不能エラーに関するものである場合、フレームワークはテスト生成の処理を停止します。
スケーラビリティーの観点から、コンバーターは IRecorderPacket オブジェクトではなく、IRecorderPacketReference オブジェクトを取り扱います。
パケット・コンバーターのコードを記述するときに最良の結果を得るには、以下の手順に従います。
- IRecorderPacket インターフェースは、IRecorderPacketReference.getRecorderPacket() メソッドを使用する参照から取得できます。
- 受信したパケットと同じパケットをその出力にエコー出力する必要があるコンバーターは、コンバーターが受信した参照インスタンスと同じ参照インスタンスを書き込む必要があります。
- コンバーターは、新規のレコーダー・パケットをインスタンス化する際に、getContext().createPacketReference() メソッドを使用してパケットを新規参照にラップすることができます。そのため、そのパケットは出力として送信できます。
- レコーダーがパケットの添付を生成できるのと同様に、コンバーターもパケットの添付を生成できます。
新規の添付を作成するには、getContext().createPacketAttachment() メソッドを使用します。
- コンバーターは、パケットが出力として送信されるまで長時間パケットを保持する必要がある場合、パケットをアンロードして、パケットの参照のみを保持することができます。
そのためには、パケットの参照に対して unload() メソッドを呼び出します。
- コンバーターには、大量のパケットを効率的に累積し、それらをアトミックに破棄したり、出力にフラッシュしたりするための機能が用意されています。詳しくは、com.ibm.rational.test.lt.testgen.core.store.IPacketReferenceStore クラスを参照してください。
パケット・ストアは、getContext().createPacketStore() メソッドを使用して作成できます。