本主题解释了在默认情况下,如何添加自定义传输,使客户机工具能够通过不支持的传输发送消息。
本章包含:
Parasoft SOAtest 包括允许您扩展 SOAtest 的内置传输和协议。它现在支持您是用的任何传输或协议 — 例如:DDS、纯 socket 或基于 TCP/IP 的消息传递、基于文件的消息传递以及基于专有 API 的消息传递。这个扩展是使用 Java 完成的。
可以自定义 SOAP 客户机、EDI 客户机和消息传递客户机工具,以显示满足组特定需求的传输实现。一旦自定义传输实现被插入到 SOAtest 中,您仍可使用 SOAP 客户机和其他消息传递工具常用的 WSDL、schema 以及请求消息构造功能。通过必要协议的消息的实际交付和接收由传输实现处理。
如 添加扩展的通用程序中所述将环境设置好后,实现以下接口(Extensibility API 文档中有作说明):
这是一个必须类。createNewConnection() 方法应返回一个 ICustomConnection 的类实例,或如果协议不需要时返回 null。invoke() 方法采用:
单向(仅发送)传输会有一个返回 null 值的 invoke() 方法。
这是一个可选类。这意味着您可以在 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,否则它不会在多个测试中重用。
需要实现该接口,以便它可以通过 ICustomTransport.invoke() 实现类返回一个实例。作为一种选择,如果您的消息内容格式是用字符串的最好代表,您可以使用默认实现类 DefaultCustomMessage<T>。参数化类型可用于用字符串键控的属性(或头文件)对象类型。getHeaders() 返回的字符串是 SOAtest 在流量视图器头文件区中显示的字符串。getBodyString() 返回的字符串是 SOAtest 在流量视图器有效负荷(Body)区中显示的字符串。
实现必要类后,如下定义 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 项目类路径,以便构建项目。
如果希望 GUI 字段用作密码字段(输入屏蔽和安全保存特定密码),请给该字段元素一个设置为密码类型的属性。例如,以下设置 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> |