本主题解释了如何扩展 SOAtest 和 Virtualize 界面 并且默认不支持覆盖报文格式的操作。 本章包含: SOAtest 和 Virtualize 包括允许扩展其内置报文格式的框架。该框架支持您正在使用的任何报文格式。例如,大型机报文格式、二进制报文格式或其他任何类型的私有自定义报文格式。报文格式通过创建本地格式和 XML 之间的转换来定义。该转换允许用户使用可用的富 XML 工具构建和验证报文。这个扩展是使用 Java 完成的。 一旦添加了自定义报文格式,SOAtest 和 Virtualize 将自动生成一个新的客户机或响应程序 可用于配置和发送使用此格式请求或响应的消息。您可以将新客户机/响应程序实例添加到测试场景或响应程序套件。 请查阅自定义客户端 和 自定义消息响应程序 以获得关于如何使用它们的更多详情。新的报文格式也将出现在 XML 转换器工具中,该工具在 XML 转换器中有所描述。 除了定义格式之间的一般转换外,还可以选择性地定义一套指定报文类型,该类型定义该格式中每条报文的确切结构。例如,用户可能将一般 FIX 定义为 XML 转换,然后又定义一套应用程序使用的特定 FIX 报文。每个报文类型结构都由 XML 模式定义,并由 SOAtest 或 Virtualize 扩展提供。 配置环境(请查阅 添加扩展的通用程序 Virtualize 中的指导说明或 SOAtest 添加扩展的通用程序 )之后,请实现以下接口(其在 Extensibility API 文档中进行了描述): 这是一个必须类,用于实现与本机格式和 XML 之间的转换逻辑。这个 toXML() 方法应该以 XML 格式返回报文,其中 toNative() 方法应该以其本机格式返回报文。采取的方法: toXML() 返回 INativeMessage,而 toNative() 返回 IXMLMessage。这些接口的默认实现可以方便地使用(DefaultNativeMessage 和 DefaultXMLMessage)。 对于 toNative ,实现者必须处理 xmlMessage 参数的消息类型为 {@code null} 的情况。如果正在定义的特定转换不知道如何在不传递特定消息类型的情况下将 XML 转换为本机报文,则应该抛出 {@link CustomConversionException}。 对于 toXML ,转换可能选择性地被编写,以便它可以自动检测传入的 nativeMessage 的消息类型。此自动校测用于确定在从文字切换为表单视图或在使用流量向导生成资产时的消息类型。如果转换不支持自动检测,那么需要明确选择消息类型,或者 SOAtest/Virtualize 尝试检测消息类型(这在某些情况下可能不正确)。若要支持自动检测,实现者应该忽略传入的 nativeMessage 的消息类型。相反,它们应该自己确定消息类型,并将其设置为返回的 XML 消息。 实现者必须处理 nativeMessage 参数的消息类型为 {@code null} 的情况,因为这确定了如何支持自动检测。如果正在定义的特定转换不支持自动检测,因此不知道在不传递特定消息类型的情况下如何进行转换,则应该抛出 {@link CustomConversionException}。 转换期间遇到的Errors 有两种处理方式。如果错误为致命错误,则必须终止转换,并且应该抛出一个 CustomConversionException 异常,其中包含适当的错误消息。如果错误不是致命错误(意味着转换可能继续),则会使用 IConversionContext.report(String message) 报告一则消息,并且方法仍然应该返回(可能部分)已转换的消息。如果错误是通过抛出异常或调用 report() 报告的,那么它将在客户机/响应程序 UI 中作为对话框报告,或者在运行客户机/响应程序时作为错误消息报告。 这些转换是在以下情况下由客户机/响应程序和 XML 转换器工具执行的: 在为给定报文格式定义特定的消息类型时,必须为每种消息类型提供 XML 模式。这是可选类,提供一个方法,该方法为给定的特定消息类型提供了 XML 模式。如果没有实现这个类,也不在 parasoft-extension.xml 中引用它,相反,您必须提供对模式文件的引用(查阅下面的 Defining parasoft-extension.xml for a Custom Message Format )。 此接口有一个方法,generateSchema(),它采用: ICustomXMLConverterConfiguration 提供对自定义报文格式客户机/响应程序的转换选项(Conversion Options)选项卡中值的访问。 generateSchema() 返回一个一个对模式文件的引用的 URI。它可以是对动态生成的模式的引用、也可以是对 jar 文件中提供自定义报文格式扩展的模式的引用,还可以是对外部资源的引用。如果在生成模式中出现错误,那么可以返回空 URI;这将导致表单输入视图没有为给定的消息类型适当填充。 实现必要类后,定义 parasoft-extension.xml(在下面有所介绍,在 SOAtest 中添加扩展的通用程序 以及 在 Virtualize 添加扩展的通用程序)使用以下模式: 此处 section 元素下的字段 id 被用于传递到各种 API 方法的 ICustomXMLConverterConfiguration 实例检索值,该对象允许将用户提供的值传递到实现中。它们还可用于在保存值时,将用户提供的值保存到响应器部署描述符文件中。GUI 中出现的字段标签是基于此 XML 构建的。section 布局不存在编程影响;它只是帮助将各种 GUI 字段组织成 sections 或 categories,以便最终用户方便地访问和使用。 实现 ICustomXMLConverter 的类的完全限定类名以及扩展名被用于识别在客户机/响应程序中使用的报文格式。更改保存 .tst 或 .pva 文件后扩展的限定类名或扩展名将阻止已保存的客户机或响应程序解析它们正在使用的报文格式。 该元素对于此扩展类型是唯一的。要导入自定义报文格式,它必须有效且正确。 id - 消息类型的字符串标识符。在给定报文格式中必须是唯一的。也也用于保存客户机/响应程序,因此更改它将导致保存 客户机或响应程序 无法解析正在使用的消息类型。 构建项目(请查阅在 Virtualize 中添加扩展的通用程序 或 在 SOAtest 中添加扩展的通用程序),并且重启SOAtest 或 Virtualize。Virtualize。 新格式也应该在 XML 转换器的下拉菜单中列出。 在 parasoft-extension.xml 文件中定义的 GUI 字段出现在自定义报文格式 client/responder的 Conversion Options 选项卡中。 如果希望 GUI 字段用作密码字段(输入屏蔽和安全保存特定密码),请给该字段元素一个设置为密码类型的属性。例如,以下设置 pwd 字段为密码模式: 假设您有自定义报文格式 SimpleMessage,其由键和值对与空格分隔符组成(例如: 一旦将这个自定义格式添加到 SOAtest 中,SOAtest 将可能在 SimpleMessage 和 XML 之间转换。例如,它可以将 转换为或转换自 该项目定义了两种消息类型。 将该示例自定义格式添加到 SOAtest 有两种方法:从 Java 源项目中,您可以从 Parasoft 应用商店下载,或者从可以从该项目创建的 jar 文件中下载。 若要从 Java 源项目中添加示例格式: 提供 Java 源项目,因此可以查看示例源码。Jar 文件通常是跨团队共享自定义格式的更简单方法。 若要将此示例 Java 项目转换为 jar 文件: 现在,其他团队成员可以从 jar 文件中添加自定义格式(而不是从 Java 项目。如果已经如上所述从 Java 项目中添加了格式,则就不需要完成这些步骤): 一旦示例添加到 SOAtest,那么就可以创建 SimpleMessage 客户机工具也可以使用 XML 转换器工具中的格式。 关于自定义报文格式
实现自定义报文格式的接口
ICustomXMLConverter 实现
ISchemaGenerator 实现
定义自定义报文格式的 parasoft-extension.xml
<?xml version="1.0" encoding="UTF-8"?>
<extension xmlns="urn:ocm/parasoft/extensibility-framework/extension"
type="messageFormat"
name='the name of your message format, appears in menus' description='A more detailed description'>
<class>com.myCompany.MyConverter</class> <!-- implements ICustomXMLConverter -->
<messageFormat xmlns="http://schemas.parasoft.com/extensibility-framework/messageFormat">
<defaultMimeType>text/plain</defaultMimeType>
<messageTypes generatorClass="com.myCompany.SchemaGenerator">
<messageType id='unique ID' name='name' xsd='path to schema in jar'/>
. . .
</messageTypes>
<client icon="myClient.gif" defaultTransport='default transport' />
<responder icon="myResponder.gif" />
</messageFormat>
<version id='your version ID' updaterClass="com.myCompany.myUpdater"/>
<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"/>
</section>
<section label="field group 2">
<field id="key 3" label="field 3"/>
. . .
</section>
. . .
</form>
</extension>
<MessageFormat> Element
验证新的报文格式
提示
<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>
例如
key1=value1 key2=value2 key3=value3 key4=value4
)。key1=value1 key2=value2 key3=value3 key4=value4
<?xml version="1.0" encoding="UTF-8"?>
<message xmlns="">
<body>
<key1>value1</key1>
<key2>value2</key2>
<key3>value3</key3>
<key4>value4</key4>
</body>
</message>
从 Java 源项目中添加格式
创建 Jar 文件
从 Jar 文件中添加格式
在 SOAtest 工具中使用自定义格式
对于 SimpleMessage 客户机,可以使用其中一种消息类型,或者以文字模式输入自己的键值对。
Overview
Content Tools