このトピックでは、カスタム ツールを使用して SOAtest と Virtualize を拡張する方法について説明します。

セクションの内容:

カスタム ツールとは

 SOAtest と Virtualize には、カスタム ツールを追加するためのフレームワークが含まれています。カスタム ツールは、入力時にカスタム実行を実行するように構成できます。たとえば、カスタム ツールは変数を変更したり、ブラウザーの Cookie を削除したりする場合があります。

カスタム ツールを実装するためのインターフェイス

カスタム拡張機能の環境を設定したら、次のインターフェイスを実装します (Extensibility API ドキュメントで説明しています)。

  • com.parasoft.api.tool.ICustomTool

ICustomTool Implementation

これは、ツール実行ロジックを実装するために使用される必須クラスです。このインターフェイスで実装するメソッドは 3 つあります。 

  • execute()
  • acceptsInput(IToolInput, ICustomToolConfiguration)
  • isValidConfig(ICustomToolConfiguration)

IToolInput と IToolContext を提供する execute() メソッドを使用して、ツールの実行ロジックを実装します。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): ブール値を返します。このメソッドを使用して、ツールが指定された入力を受け入れるかどうかを判断します。true が返された場合は、execute() が呼び出されます。それ以外の場合は、execute() は呼び出されません。
  • isValidConfig(ICustomToolConfiguration): ブール値を返します。このメソッドを使用すると、実行前に UI 構成が適切に設定されているかどうかを判断できます。このメソッドが false を返す場合、ツールは実行できません。

IToolInputs を使用する場合は、ツールに渡される IToolInput の特定のタイプを確認する必要があります。ほとんどの場合、SOAtest または Virtualize は IToolInput のサブインターフェイスのインスタンスを渡します。ただし、入力を IToolInput のより具体的なサブインターフェイスに変換できない場合もあります。そのような場合は、単純な IToolInput がツールに渡されます。IToolInput にはメソッドはありませんが、使用されている内部オブジェクトにアクセスする方法はあります。すべての IToolInputs は、com.parasoft.tool.IToolInputWrapper と呼ばれる内部インターフェイスのインスタンスになります。そのインターフェイスにキャストしてから getToolUsable() メソッドを呼び出して、使用されている内部オブジェクトにアクセスできます。

カスタム ツールの出力に入力を渡すときにも、同様のケースが発生する可能性があります。IToolInput のより具体的なサブインターフェイスのインスタンスではなく、内部 API からオブジェクトを渡す必要がある場合があります。その場合は、com.parasoft.tool.ToolUsable を返す内部インターフェイス com.parasoft.tool.IToolInputWrapper のインスタンスを返します。

カスタム ツール用に 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> 要素

この要素はこの拡張機能タイプに固有であり、カスタム ツールをインポートするには有効かつ正しい必要があります。

属性:

  • icon - オプション属性。メニュー内のツール名の横、およびテストケース エクスプローラー (SOAtest) または仮想アセット エクスプローラー (Virtualize) 内のツールを使用するアセットの横に表示されるカスタムアイコンの名前を指定できます。指定しない場合は、デフォルトのアイコンが使用されます。

  • useInputTab - オプション属性。カスタムツールに入力タブがあるかどうかを指定できます。デフォルトは false です。
  • successIndicator - このツールが親の成功インジケーターとして機能するかどうかを指定できるオプション属性。true の場合、ツールの成功によって親の成功が決まります。false の場合、ツールの合格または不合格は、親ツールの合格または不合格には影響しません。
  • category - Parasoft によって事前定義されたカテゴリにツールを配置するか、カスタム ツールの新しいカテゴリを定義することができるオプション属性。既存のカテゴリは次のとおりです。
    • SOA/メッセージング
    • 仮想化
    • Web
    • 検証
    • データベース
    • スクリプト
    • データ交換
    • Java
    • BPEL
    • WSDL
    • ログ/モニタリング
    • 変換
    • XML セキュリティ
  • supportXmlConversion - 定義された execute() メソッドが呼び出される前に、非 XML 入力を XML に変換するかどうかを指定するオプション属性。デフォルトは false です。
  • showInToolList - ツールの追加ウィザード ダイアログでツールを使用できるかどうかを指定するオプション属性。取りうる値は次のとおりです。
    • common - 新しいツールを追加するときに "共通ツール" フォルダーに表示されます。
    • all - 新しいツールを追加するときに "すべてのツール」 フォルダーに表示されます。
    • no - 使用可能なツールとして表示されません。
  • showInOutputList - 出力の追加ウィザード ダイアログでツールを使用できるかどうかを指定するオプション属性。取りうる値は次のとおりです。
    • common - 出力を追加するときに "共通ツール" フォルダーに表示されます。
    • all - 出力を追加するときに "すべてのツール」 フォルダーに表示されます。
    • no - 出力ツールとして表示されません。
  • <output> - カスタム ツールの出力タイプを定義します。
    • key - 出力タイプの文字列識別子 - これは、カスタム ツールに定義されているすべての出力のキーの中で一意である必要があります。
    • name - 出力タイプの名前を表示するために使用されます。

<form> 要素

この要素はこの拡張機能タイプに固有であり、カスタム ツールをインポートするには有効かつ正しい必要があります。カスタム ツールの入力フィールドを定義します。

属性:

  • <section> - フィールドのカテゴリを定義します。
    • id - フィールドのカテゴリを識別する内部名。
    • label - UI に表示されるカテゴリ名/ラベル。
  • <field> - 構成 UI に表示される特定の入力フィールドを定義します。
    • label - UI に表示されるフィールド名/ラベル。
    • type - フィールドのタイプ。これは、文字列 (通常のフィールド)、xpath (XPath Chooser 機能を提供)、またはパスワード (入力時に値を非表示にし、保存時に値を暗号化) に設定できます。

ヒント

  • 拡張 GUI で提供される値は、名前 - 値の文字列マッピングとして保存されます。結果として、 parasoft-extension.xml の form 要素内のフィールドを再編しても、ユーザー値の保存方法に影響ありません。しかしながら、ID を変更するとこれに影響します。ID は値の保存やロードに使用されるため、一意である必要があります。ID を変更すると、その前に保存した構成が以前の値をロードせず、値は空白となります。この場合、Version Updater を使用して、古い ID で保存された古い設定を新しい ID のセットへ移行できます。
  • フィールドでは type 属性を指定できます。以下に設定できます。
    • string: 通常のフィールド。
    • xpath: XPath Chooser 機能を提供します。
    • 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 選択として実装する場合は、そのフィールドに xpath に設定された type 要素を指定します。たとえば、次のコードは、element フィールドを XPath 選択に設定します。

    <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 定義ツールとともにリストされていることを確認します。

  • No labels