このセクションでは、カスタム ツールで SOAtest/Virtualize を拡張する方法について説明します。
このセクションの内容:
カスタム ツールとは
SOAtest/Virtualize にはカスタム ツールを追加できるフレームワークがあります。カスタム ツールを構成して、入力に対してカスタム拡張を実行できます。たとえば、カスタム ツールで変数を変更したり、ブラウザーの cookie を削除したりすることができます。
カスタム ツール用に実装するインターフェイス
「拡張機能の追加: 基本手順」に記載のように環境設定をしたら、次のインターフェイスを実装します (インターフェイスの詳細については、Extensibility API ドキュメントに記載されています)。
- com.parasoft.api.tool.ICustomTool
ICustomTool の実装
このクラスは必須であり、ツール拡張ロジックを実装するために使用されます。このインターフェイスには、実装するメソッドが 3 個あります。
- execute()
- acceptsInput(IToolInput, ICustomToolConfiguration)
- isValidConfig(ICustomToolConfiguration)
execute() メソッドにツールの実行ロジックを実装します。execute() メソッドには、IToolInput および IToolContext があります。IToolInput には、リクエストまたはレスポンスの XML またはトラフィックなど、ツールに送信された入力メッセージが格納されます。コンテキストを使用すると、UI 構成および出力マネージャーにアクセスできます。メソッドから true を返すと、ツールの実行が成功したことを意味し、false を返すと、ツールの実行が失敗したことを意味します。
出力マネージャーを使用すると、カスタム ツールのインスタンスに連結されたツールに IToolInput を送信できます。IToolInput の独自の実装を構築するか、Parasoft が提供するデフォルトの実装を使用できます。
たとえば、次のように parasoft-extension.xml に 2 つの出力が定義されているとします。
<output key="output_1" name="traffic header"/> <output key="output_2" name="traffic body"/>
SOAtest/Virtualize でカスタム ツールを選択して [テストまたは出力の追加] ボタン (SOAtest) または [レスポンダーまたは出力の追加] ボタン (Virtualize) をクリックし、出力を選択してツールに追加することができます。次のコードは、入力を構築して連結された出力ツールに渡すサンプルです。
public boolean execute(IToolInput input, IToolContext context) throws CustomToolException { String charset ="UTF-8"; String mimeType ="text/plain"; String header =""; String message =""; . . . DefaultTextInput headerOutput = new DefaultTextInput(header, charset, mimeType); context.getOutputManager().runOutput("output_1", headerOutput, context); . . . DefaultTextInput msgOutput = new DefaultTextInput(message, charaset, mimeType); context.getOutputManager().runOutput("output_2", msgOutput, context); . . . return true; }
ツールの実行中にエラーが発生した場合、IToolContext.report(String) を使用して 1 つ以上のエラーをレポートする必要があります。ツールの実行を完了できないような致命的なエラーが発生した場合、CustomToolException をスローします。これによって、ツールの実行が途中終了し、ツールが失敗するほか、シナリオの実行が中断します (致命的なエラーが発生した場合にシナリオが終了するよう設定されている場合)。どちらの方法でレポートされたエラーも、品質タスク ビューに表示されます。
その他に実装するメソッド
- acceptsInput(IToolInput, ICustomToolConfiguration): boolean を返します。このメソッドを使用して、ツールが与えられた入力を受け入れるかどうかを確認します。true を返すと、execute() が呼び出されます。false を返すと、execute() は呼び出されません。
- isValidConfig(ICustomToolConfiguration): boolean を返します。このメソッドを使用して、実行する前に UI の構成が適切に設定されているかどうかを確認します。このメソッドが false を返した場合、ツールは実行できません。
IToolInputs を処理する際、ツールに渡された IToolInputs の型をチェックする必要があります。多くの場合、SOAtest/Virtualize は IToolInputs のサブインターフェイスのインスタンスを渡します。しかしときには、入力を IToolInputs のより具体的なサブインターフェイスに変換できない場合があります。そのような場合、ツールに IToolInputs が渡されます。IToolInputs にはメソッドがありませんが、使用される内部的なオブジェクトにアクセスする方法があります。すべての IToolInputs は、内部的なインターフェイス com.parasoft.tool.IToolInputWrapper のインスタンスです。インターフェイスをキャストして getToolUsable() を呼び出すと、使用される内部的なオブジェクトにアクセスすることができます。
入力をカスタム ツールの出力に渡す場合にも、同様のケースが発生します。IToolInput のサブインターフェイスのインスタンスではなく、内部的な API のオブジェクトを渡す必要がある場合があります。その場合、内部インターフェイス com.parasoft.tool.IToolInputWrapper のインスタンスを返すと、com.parasoft.tool.ToolUsable が返されます。
カスタム ツール用に parasoft-extension.xml を定義
必要なクラスを実装した後、次のように parasoft-extension.xml を定義します。
<?xml version="1.0" encoding="UTF-8"?> <extension xmlns="urn:ocm/parasoft/extensibility-framework/v1/extension" type="tool" name='the name of your tool, appears in menus' description='A more detailed description'> <class>com.myCompany.MyTool</class> <!-- implements ICustomTool --> <version id='your version ID' updaterClass="com.myCompany.myUpdater"/> <tool xmlns="http://schemas.parasoft.com/extensibility-framework/v1/tool" icon="myIcon.gif" useInputTab="true" successIndicator="true" category="myCategory" supportXmlConversion="true" showInToolList="common" showInOutputList="common"> <outputs> <output key="key" name="output name"/> ... </outputs> </tool> <form xmlns="urn:com/parasoft/extensibility-framework/gui"> <section label="field group 1"> <field id="key 1" label="field 1"/> <field id="key 2" label="field 2"/> <field id="element" label="Select an element" type="xpath"/> </section> <section label="field group 2"> <field id="key 3" label="field 1"/> <field id="usr" label="Username"/> <field id="pwd" label="Password" type="password"/> . . . </section> . . . </form> </extension>
<tool> 要素
この要素は、カスタム ツール タイプの拡張に固有の要素です。カスタム ツールを SOAtestにインポートするには、この要素が有効で正しくなければなりません。
属性:
icon - 任意属性です。この属性を使用すると、メニューのツール名の隣や、テスト ケース エクスプローラー (SOAtest) または仮想アセット エクスプローラー (Virtualize) でツールを使用するアセットの隣に表示されるカスタム アイコンの名前を指定できます。この属性が指定されていない場合、デフォルトのアイコンが使用されます。
- useInputTab - 任意属性です。この属性を使用すると、カスタム ツールに入力タブがあるかどうかを指定できます。デフォルト値は false です。
- successIndicator - 任意属性です。この属性を使用すると、このツールが親ツールの成功インジケーターとして機能するかどうかを指定できます。true の場合、このツールが作成すると、親が成功します。false の場合、ツールが成功するか失敗するかは、親ツールの成功または失敗に影響を与えません。
- category - 任意属性です。この属性を使用すると、Parasoft の定義済みのカテゴリにツールを入れたり、カスタム ツールのために新しいカテゴリを定義できます。既存のカテゴリは以下のとおりです。
- SOA/Messaging
- Virtualization
- Web
- Validation
- Database
- Scripting
- Data Exchange
- Java
- BPEL
- WSDL
- Logging/Monitoring
- Transformation
- XML Security
- supportXmlConversion - 任意属性です。execute() メソッドを呼び出す前に、非 XML 入力を XML に変換するかどうかを指定します。デフォルト値は false です。
- showInToolList - 任意属性です。ツールの追加ウィザードでこのツールを使用できるかどうかを指定します。選択可能な値は次のとおりです。
- common - 新規ツールを追加するとき、「Common Tools」フォルダーに表示されます。
- all - 新規ツールを追加するとき、「All Tools」フォルダーに表示されます。
- no - 利用可能なツールとして表示されません。
- showInOutputList - 出力の追加ウィザードでこのツールを使用できるかどうかを指定します。選択可能な値は次のとおりです。
- common - 出力を追加するとき、「Common Tools」フォルダーに表示されます。
- all - 出力を追加するとき、「All Tools」フォルダーに表示されます。
- no - 出力ツールとして表示されません。
- <output> - カスタム ツールの出力タイプを定義します。
- key - 出力タイプの文字列識別子です。カスタム ツールに対して定義されたすべての出力で一意でなければなりません。
- name - 出力タイプの名前を表示するのに使用します。
<form> 要素
この要素は、カスタム ツール タイプの拡張に固有の要素です。カスタム ツールを SOAtestにインポートするには、この要素が有効で正しくなければなりません。カスタム ツールの入力フィールドを定義します。
属性:
- <section> - フィールドのカテゴリを定義します。
- id - フィールドのカテゴリを識別する内部的な名前です。
- label - UI に表示されるカテゴリ名/ラベルです。
- <field> - 構成 UI に表示される特定の入力フィールドを定義します。
- label - UI に表示されるフィールド名/ラベルです。
- type - フィールドの種類です。string (通常のフィールド)、xpath (XPath セレクターを表示)、password (入力された値をマスクし、値を保存する際に暗号化) を指定できます。
ヒント
- 拡張 GUI で提供される値は、 名前 - 値の文字列マップとして保存されます。結果として、 parasoft-extension.xml の form 要素内のフィールドを再編しても、ユーザー値の保存方法に影響ありません。しかしながら、ID を変更するとこれに影響します。ID は値の保存やロードに使用されるため、一意である必要があります。ID を変更すると、その前に保存した構成が以前の値をロードせず、値は空白となります。この場合、Version Updater を使用して、古い ID で保存された古い設定を新しい ID のセットへ移行できます。
- フィールドには type 属性を指定できます。次の値を設定できます:
string
: 通常のフィールドです。xpath
: XPath セレクター機能を提供します。password
: 入力された値をマスクし、値を保存する際に暗号化します。
- カスタム フォーム 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>
GUI フィールドを XPath chooser として実装するには、フィールドに
type
属性を追加し、値に xpath を設定します。次の例では、element
フィールドを XPath chooser として設定しています。<form xmlns="urn:com/parasoft/extensibility-framework/gui"> <section label="Main Settings"> <field id="element" label="Select an element" type="xpath"/> </section> </form>
- 定義された execute() メソッドを呼び出す前に、非 XML 入力を XML に変換するには、parasoft-extension.xml で
supportXmlConversion
オプションを有効にします。ツールのユーザーは、ツールの構成パネルでメッセージ形式を選択できるようになります。さらに、XPath セレクターが実装されている場合 (前の項目を参照)、ツリー ビューには、選択されたメッセージ タイプに合わせたフォーマットでメッセージが表示されます (メッセージ形式は、ツールの構成パネルの [メッセージ形式] セクションで設定されます)。
- テーブルやリストは、文字列フィールドでカンマ区切りの値として実装できます。
${var_name} 構文を使用して、拡張 GUI フィールドでデータソース、Data Bank 値、環境変数、テスト スイート/レスポンダー スイートの変数を参照できます。標準の [パラメータライズ] および [スクリプト] GUI コントロールを使用してフィールドをパラメータライズすることもできます。
新しいツールの検証
新しいツールが作成され、Parasoft 定義のツールとともに表示されることを確認します。