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

セクションの内容:

カスタム ツールとは

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

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

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

ICustomTool Implementation

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

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 がスローされます。これにより、ツールの実行が中止され、失敗します。また、シナリオの実行も中止されます (シナリオが致命的なエラーで中止するように設定されている場合)。どちらの方法で報告されたエラーも、品質タスク ビューに報告されます。

実装する追加のメソッド:

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> 要素

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

属性:

<form> 要素

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

属性:

ヒント

新しいツールの検証

新しいツールが作成され、他の Parasoft 定義ツールとともにリストされていることを確認します。