このセクションでは、カスタム トランスポートの追加方法について説明します。カスタム トランスポートを追加すると、 クライアント ツールがデフォルトではサポートされていないトランスポートを介してメッセージを送信できるようになります。
このセクションの内容:
カスタム トランスポートとは
Parasoft SOAtest は、 SOAtest のビルトイン トランスポートとビルトイン プロトコルを拡張できるフレームワークを含んでおり、ユーザーが扱う任意のトランスポートまたはプロトコルをサポートします。たとえば、DDS、プレーン ソケット または TCP/IP ベースのメッセージング、ファイル ベースのメッセージング、そして独自API に基づくメッセージングをサポートします。拡張機能は Java で実装されます。
SOAP Client ツール、 EDI Client ツール、 Messaging Client ツールをカスタマイズして、グループの特定のニーズに一致するトランスポート実装を表示できます。SOAtest にカスタム トランスポート実装がプラグインされても、SOAP Client ツールや他のメッセージ クライアント ツールの通常の WSDL 、スキーマ、リクエスト メッセージ構成機能は使用できます。必要なプロトコルを介したメッセージの実際の送信や受信は、トランスポート実装によって制御されます。
カスタム トランスポートのために実装するインターフェイス
「拡張機能の追加: 基本手順」に記載のように、環境のセットアップが完了したら、次のインターフェイスを実装します (詳細については、『Extensibility API』ドキュメントを参照してください)。
- com.parasoft.api.transport.ICustomConnection (オプション)
- com.parasoft.api.transport.ICustomTransport
- com.parasoft.api.ICustomMessage<T> (または reuse/extend com.parasoft.api.DefaultCustomMessage<T>)
ICustomTransport の実装
ICustomTransport は必須クラスです。createNewConnection() メソッドは ICustomConnection クラスのインスタンスを返すか、ユーザーのプロトコルがそのインスタンスを必要としない場合は NULL を返します。invoke() メソッドは次の引数を受け取ります。
- Connection オブジェクト。複数の呼び出しで再利用されます。
- ツールの GUI から取得する値でトランスポート実装クラスを提供する構成であり、NULL にはならない構成。
- ICustomMessage を実装し、ツールの GUI で提供されるリクエスト メッセージのコンテンツを含むリクエスト。
- CustomTransportConfiguration クラスのメソッドを呼び出すときに、Configuration オブジェクトの中で他のメソッドに継承されるコンテキスト。エラーをレポートするメソッド、データ ソース列や変数などから値を取得するメソッドも含みます。
一方向 (送信のみ) トランスポートでは invoke() メソッドは NULL を返します。
ICustomConnection の実装
ICustomConnection はオプションのクラスです。つまり、 ICustomTransport.createNewConnection() で NULL を返し、 invoke() メソッドでその NULL を受け取ることができます。しかしながら、多くのプロトコルはセッションまたは接続の概念を持つ傾向にあるため、拡張性フレームワークではこのインターフェイスを用いてそれらを管理できます。
トランスポート構成ツールの GUI で [キープ アライブ接続] オプションがオフの場合 、テストが呼び出されるたびに ICustomConnection オブジェクトの新しいインスタンスが作成されます。 [キープ アライブ接続] オプションがオンの場合、テストが接続をクローズするまで ([テスト実行後に接続をクローズする] オプションが選択されている場合) 、またはすべてのテスト実行が完了するまで、同じインスタンスが再利用されます。
SOAtest は、[接続をキープ アライブ] Keep connection alive オプションが有効な場合でも、ICustomTransport.invoke() メソッドを呼び出す前に、常に connect() メソッドを呼び出します。期待される動作は、SOAtest が接続オブジェクト内でトランスポート接続を確立すること、またはそのプロセスが失敗した場合に例外をスローすることです。close() メソッドは、テストで [接続をキープ アライブ] オプションが有効になっていない限り、テスト実行の最後に呼び出されます。
ICustomConnection はユーザーの接続状態/セッション状態を暗号化します。しかし、 [キープ アライブ接続] がオンでない限り、複数のテストで再利用はされません。
ICustomMessage
このインターフェイスの実装は、 ICustomTransport.invoke() がインスタンスを返すために必要です。あるいは、ユーザーのメッセージ コンテンツの形式が文字列の場合、デフォルト実装の DefaultCustomMessage<T> を使用できます。プロパティまたはヘッダーの文字列に適合させたオブジェクト型にはパラメータライズ タイプが使用できます。getHeaders() が返す文字列は、 Trafic Viewer のヘッダー エリアに表示されるものです。getBodyString() が返す文字列は、 Trafic Viewer のペイロード (ボディ) エリアに表示されるものです。
カスタム トランスポート用に parasoft-extension.xml を定義
必要なクラスを実装した後、次のように parasoft-extension.xml を定義します。
<?xml version="1.0" encoding="UTF-8"?> <extension xmlns="urn:com/parasoft/extensibility-framework/extension" type="transport" name='The name of your transport, appears in the transports menu' description='A more detailed description'> <class>com.mycompany.MyTransport</class> <!-- implements ICustomTransport --> <form xmlns="urn:com/parasoft/extensibility-framework/gui"> <!-- This describes the fields you wish to appear in your transport GUI --> <section label="field group 1"> <field id="key 1" label="field 1"/> <field id="key 2" label="field 2"/> ... <section label="field group 2"> <field id="key 3" label="field 3" /> </section> <section label="field group 2"> <field label="field 1" /> ... </section> ... </form> </extension>
section 要素の下の field label は、CustomTransportConfiguration オブジェクトからさまざまな API メソッドに渡された値を読み出すためのキーとして使われ、ユーザーによって提供された値がユーザーの実装に渡されることを許可します。GUI に表示される field label はこの XML に基づいて構成され、そして保存されるときにユーザーが提供する値が .tst ファイルに保持するために使用されます。このセクション レイアウトはプログラムに影響を及ぼしません。エンドユーザーが使用しやすいように、さまざまな GUI フィールドを セクションまたはカテゴリに整理します。
新しいトランスポートの検証
プロジェクトのビルド後に SOAtest を再起動します。parasoft-extension.xml に指定したトランスポート名が [トランスポート] メニューに表示されるか検証します。
例
カスタム トランスポートの実装例は、GitHub で入手できます。サンプル トランスポートを使用するには、システム設定のクラスパス リストに JAR ファイルを追加します。そして新しい SOAP Client ツールか Messeging Client ツールを作成、または作業中の .tst ファイルを再オープンします。
[トランスポート] メニューの [カスタム拡張] エントリが、実装した名前に変わります。サンプル トランスポートはユーザーのテストで直接使用できます。サンプル トランスポートのソースを SOAtest (または Eclipse) へインポートするには、 [ファイル] メニューの [インポート] > [一般 / 既存のプロジェクトをワークスペースへ] > [アーカイブ・ファイルの選択] よりファイルを選択します。インポート後、プロジェクトをビルドするために、<INSTALL>/plugins/com.parasoft.ptest.libs.web_<VERSION>/root/ ディレクトリにある com.parasoft.api.jar ファイルを、Java プロジェクトのクラスパスに追加します。
ヒント
- 構成されたカスタム トランスポート拡張とともに保存された .tst ファイルは、拡張が有効でない SOAtest でも 開くことができます。しかし SOAtest コンソール ビューにはエラー メッセージが表示され、トランスポート拡張を使用するテストは実行されません。この .tst をトランスポート拡張なしに再保存すると、拡張が有効な SOAtest で再度開いた際にカスタム構成が失われます。これは .tst ファイルの未使用データや無効な構成データの流出を防ぐためです。
- 拡張 GUI で提供される値は、 名前 - 値の文字列マップとして保存されます。結果として、 parasoft-extension.xml の form 要素内のフィールドを再編しても、ユーザー値の保存方法に影響ありません。しかしながら、ID を変更するとこれに影響します。 ID は値の保存やロードに使用されるため、一意である必要があります。 ID を変更すると、その前に保存した構成が以前の値をロードせず、値は空白となります。この場合、Version Updater を使用して、古い ID で保存された古い設定を新しい ID のセットへ移行できます。
- トランスポート拡張 GUI の [接続設定] セクションは、使用の有無に関わらず、常に表示されます。
- カスタム フォーム GUI では、文字列の GUI フィールドだけがサポートされます。ユーザーの拡張が整数やその他のタイプを必要とする場合、拡張の実装で文字列のコンテンツを任意の型に変換できます。
GUI フィールドをパスワード フィールド (入力が隠され、指定したパスワードが安全に保存される) として働かせたい場合、そのフィールド要素に password に設定した type 属性を与えます。たとえば、以下は pwd フィールドをパスワード モードに設定します。
<form xmlns="urn:com/parasoft/extensibility-framework/gui"> <section label="Main Settings"> <field id="usr" label="Username"/> <field id="pwd" label="Password" type="password"/> </section> </form>
- テーブルやリストは、文字列フィールドでカンマ区切りの値として実装できます。
- ${var_name} 構文を使用して、拡張 GUI フィールドでデータソース、Data Bank 値、環境変数、テスト スイートの変数を参照できます。標準の [パラメータライズ] および [スクリプト] GUI コントロールを使用してフィールドをパラメータライズすることもできます。