本主题解释了在默认情况下,如何添加自定义传输,使客户机工具能够通过不支持的传输发送消息。

本章包含:

添加自定义传输

Parasoft SOAtest 包括允许您扩展 SOAtest 的内置传输和协议。它现在支持您是用的任何传输或协议 — 例如:DDS、纯 socket 或基于 TCP/IP 的消息传递、基于文件的消息传递以及基于专有 API 的消息传递。这个扩展是使用 Java 完成的。 

可以自定义 SOAP 客户机、EDI 客户机和消息传递客户机工具,以显示满足组特定需求的传输实现。一旦自定义传输实现被插入到 SOAtest 中,您仍可使用 SOAP 客户机和其他消息传递工具常用的 WSDL、schema 以及请求消息构造功能。通过必要协议的消息的实际交付和接收由传输实现处理。 

为自定义传输实现的接口

添加扩展的通用程序中所述将环境设置好后,实现以下接口(Extensibility API 文档中有作说明):

ICustomTransport Implementation

这是一个必须类。createNewConnection() 方法应返回一个 ICustomConnection 的类实例,或如果协议不需要时返回 null。invoke() 方法采用:

单向(仅发送)传输会有一个返回 null 值的 invoke() 方法。

ICustomConnection Implementation

这是一个可选类。这意味着您可以在 ICustomTransport.createNewConnection() 中返回 null,并期望在 invoke() 方法中得到 null。然而,很多协议都有会话或连接的概念,因此扩展性框架允许通过此接口来管理。 

如果选中传输配置工具 GUI(在连接管理部分)中的 Keep connection alive 选项,您可以期望为测试的每次调用创建的 ICustomConnection 对象的新实例。否则,当测试执行使用相同的传输从一个测试流到另一个测试时,将重用相同的实例...直到测试关闭连接(如果选择 Close connection after test execution 选项),或者是直到所有执行完成。

SOAtest 在调用 invoke() 之前将会调用 connect() 方法。期望它将在 connection 对象中建立传输连接,或在该进程失败时抛出异常。close() 在测试执行最后调用,除非选中测试中的 “Keep connection alive” 选项。

期望 ICustomConnection 封装并携带您的连接和会话状态,但是除非选择 Keep connection alive,否则它不会在多个测试中重用。

ICustomMessage

需要实现该接口,以便它可以通过 ICustomTransport.invoke() 实现类返回一个实例。作为一种选择,如果您的消息内容格式是用字符串的最好代表,您可以使用默认实现类 DefaultCustomMessage<T>。参数化类型可用于用字符串键控的属性(或头文件)对象类型。getHeaders() 返回的字符串是 SOAtest 在流量视图器头文件区中显示的字符串。getBodyString() 返回的字符串是 SOAtest 在流量视图器有效负荷(Body)区中显示的字符串。

为自定义传输定义 parasoft-extension.xml

实现必要类后,如下定义 parasoft-extension.xml:

<?xml version="1.0" encoding="UTF-8"?>
<extension xmlns="urn:com/parasoft/extensibility-framework/extension"
	type="transport" 
	name='The name of your transport, appears in the transports menu' description='A more detailed description'>
  <class>com.mycompany.MyTransport</class> <!-- implements ICustomTransport -->
  <form xmlns="urn:com/parasoft/extensibility-framework/gui">
	<!-- This describes the fields you wish to appear in your transport GUI --> 
	<section label="field group 1">
		<field id="key 1" label="field 1"/> 
		<field id="key 2" label="field 2"/> 
		...
		<section label="field group 2">
		<field id="key 3" label="field 3" />
	</section>
	<section label="field group 2">
		<field label="field 1" /> 
		...
	</section>
	...
  </form>
</extension>

section 元素下的字段标签被用作钥键,用于传递到各种 API 方法的 CustomTransportConfiguration 对象检索值,这对象允许将用户提供的值传递到实现类中。在 GUI 中显示的字段标签是基于该 XML 构造的,他们还用于保存时将用户提供的值保存到 .tst 文件中。部分输出没有编程影响;它只是帮助将各种 GUI 字段组织成节或类别,以便最终用户方便地访问和使用。

验证新传输

构建项目后重启 SOAtest。验证在传输菜单中显示的传输名称(如 parasoft-extension.xml 中指定)。

示例

可在 Parasoft 应用市场获得自定义传输实例(可以访问 marketplace.parasoft.com 或您团队的环境管理器)。若要使用任何这些传输,请将 jar 添加到系统首选项类路径列表,然后创建一个新的 SOAP 客户机或其他消息传递客户机工具或重新打开一个您正在使用的 .tst 文件。 

传输菜单中的“自定义扩展”项将重新命名,以反映实现类名称。您可以在测试中立即使用该传输。可以使用 File> Import> General/Existing Projects into Workspace> Select archive file,将示例传输源导入到 SOAtest(或 Eclipse)。导入后,将 [SOAtest install dir]/plugins/com.parasoft.xtest.libs.web_[version]/root/com.parasoft.api.jar 添加到 Java 项目类路径,以便构建项目。

提示