本主题解释了如何使用自定义工具扩展 SOAtest 和 Virtualize。

章节目录:

关于自定义工具

 SOAtest 和 Virtualize 包括添加自定义工具的框架。自定义工具可配置来执行输入上的自定义执行。例如,自定义工具可以修改变量,或删除浏览器 cookie。

为自定义工具实现的接口

设置好自定义扩展的环境后,请实现以下接口(Extensibility API 文档中有作说明):

  • com.parasoft.api.tool.ICustomTool

ICustomTool 实现

这是一个必需的类,将用于实现工具执行逻辑。该接口有三种实现方法: 

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

您将使用 execute() 方法实现工具的执行逻辑,该方法为您提供了一个 IToolInput 和 IToolContext。IToolInput 包含发送到工具的输入消息,例如 XML 或来自请求或响应的通讯报文。上下文提供对 UI 配置和输出管理器的访问。返回 true 表示工具执行成功,而 false 表示工具执行失败。

输出管理器可用于将 IToolInput 发送到连接到自定义工具实例的工具。您可以构建自己的 IToolInput 实现,也可以使用 Parasoft 提供的默认实现。

例如,假设您在 parasoft-extension.xml 中定义了两个输出:

<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) 报告一个或多个错误。如果遇到阻止工具执行完成的致命错误,则应抛出 CustomToolException 异常;这将中止该工具的执行并导致其失败,此外还会中止场景执行(如果场景被设置为在出现致命错误时中止)。以任何一种方式报告的错误都将报告给质量任务视图。

要实现的其他方法:

  • acceptsInput(IToolInput, ICustomToolConfiguration): 返回一个布尔值。您将使用此方法来确定您的工具是否接受给定的输入。如果返回 true,则调用 execute();否则将不会调用 execute()。
  • isValidConfig(ICustomToolConfiguration): 返回一个布尔值。您可以使用此方法来确定 UI 配置是否在运行时之前正确设置。如果该方法返回 false,则该工具将无法运行。

在处理 IToolInput 时,需要检查传递给工具的特定类型的 IToolInput。在大多数情况下, SOAtest or Virtualize 将传递 IToolInput 子接口的实例。但是,在某些情况下,可能无法将输入转换为 IToolInput 更特定的子接口。在这些情况下,一个简单的 IToolInput 将传递给工具。IToolInput 没有方法,但是有一种可以访问正在使用的内部对象的方法。所有 Itoolinput 都是一个名为 com.parasoft.tool.IToolInputWrapper 内部接口的实例。您可以转换到该接口,然后调用 gettoolavailable() 方法来访问正在使用的内部对象。

当将输入传递到自定义工具的输出时,可能会发生类似的情况。您可能需要从内部 API 传递一个对象,而不是从 IToolInput 更具体的子接口的实例中传递。在这种情况下,您将返回内部接口 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> Element

此元素对于此扩展类型是唯一的,并且对于要导入的自定义工具必须是有效且正确的。

属性:

  • icon - 可选属性,允许您提供自定义图标的名称,该图标将显示在菜单中工具名称旁,以及测试用例浏览器(SOAtest)或虚拟资产浏览器(Virtualize)中使用该工具的资产旁。如果没有提供,将使用默认图标。

  • useInputTab - 可选属性,允许指定自定义工具是否具有 input 选项卡。默认为 false。
  • successIndicator - 可选属性,允许指定此工具是否作为其父工具的成功指示器。如果为 true,工具的成功将决定其父工具的成功。如果为 false,则该工具是否通过或失败与其父工具是否通过或失败无关。
  • category - 可选属性,允许将工具放在由 Parasoft 预定义的类别中,或者为自定义工具定义一个新类别。现有的类别有:
    • SOA/消息传递
    • 虚拟化
    • Web
    • 验证
    • 数据库
    • 脚本
    • 数据交换
    • Java
    • BPEL
    • WSDL
    • 录制/监控
    • 转换
    • XML 安全
  • 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> Element

此元素对于此扩展类型是唯一的,并且对于要导入的自定义工具必须是有效且正确的。定义自定义工具的 input 字段。

属性:

  • <section> - 定义字段类别。
    • id - 标识字段类别的内部名称。
    • label - 在 UI 中显示的类别名称/标签。
  • <field> - 定义配置 UI 中显示的特定输入字段。
    • label - 在 UI 中显示的字段名称/标签。
    • type - 字段类别。这可以设置为 string(普通字段)、xpath(提供 XPath Chooser 功能)或 password(在键入时隐藏值,保存时加密值)。

提示

  • 将提供给扩展 GUI 的值保存为名称-值字符串映射。作为结果,重新整理 parasoft-extension.xml 表单元素中的字段不会影响用户值的保存方式;但更改 ID 会对此产生影响。id 用于保存或加载值,因此它们必须是唯一的。如果更改它们,则先前保存的配置将不会加载以前的值,并且将变为空。然而,您可以使用修订更新器将用老 id 保存的老设置迁徙到新 id 集。
  • 字段可以指定 type 属性。这可以设置为:
    • string: 一个普通字段。
    • xpath: 提供 XPath Chooser 功能。
    • password: 在键入时隐藏值,保存时加密值。
  • 仅支持自定义表单 GUI 中带字符串值的 GUI 字段。如果扩展要求 integer 或其他类型,则您可以将字符串内容转换为扩展实现类中的所需类型。
  • 如果希望 GUI 字段用作密码字段(输入屏蔽和安全保存特定密码),请给该字段元素一个 type 属性,并将其设置为 password。例如,下面将 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 字段中的数据源、数据库值、环境变量和测试或响应器套件变量。批准的“参数化”和“脚本化”GUI 控件还可用来参数化字段。

验证新工具

验证是否已经创建新工具,并在其他 Parasoft 定义的工具中列出。

  • No labels