本章节描述了如何设置SOAtest、 以访问 IBM MQ。通过配置 Parasoft 工具可以实现对 IBM MQ 的访问。 内容包括: IBM WebSphere MQ Java API 与标准 JMS API 相比 该部分涉及通过 IBM WebSphere MQ Java API 而非标准 JMS API 进行测试的服务。如果要使用 JMS API 发送和接收 IBM WebSphere MQ 的消息,请选择 JMS 传输选项,并参考 JMS。 使用 MQ 选项,必须添加 WebSphere MQ 客户端或服务器安装的 jar 文件。MQ 客户端可以在 http://www.ibm.com/software/integration/wmq/clients/处进行下载。 针对 WebSphere MQ 9,所需 jar 是: 针对 WebSphere MQ 8,所需 jar 是: 针对 WebSphere MQ 7,所需 jar 有: 针对所有版本,这些 jar 文件都可在 若要将这些 jar 文件添加到 SOAtest 或 Virtualize 的类路径下,请完成以下操作: SOAtest 通过 SSL 连接到 WebSphere MQ 需要 IBM JRE。IBM Java 在以下网页可用: https://www.ibm.com/developerworks/java/jdk/ SOAtest 附带 Java 的 Oracle 发行版,默认情况下使用此发行版。必须将 SOAtest 配置为使用 IBM JRE。有关更多详情,请查阅 配置 Java 运行时 。 从合适工具的 Transport 选项卡内的 Transport 下拉菜单选中 WebSphere MQ ,将在左窗格显示以下选项: 指定 MQ 连接设置时,可以在以下模式中进行选择: 如果使用默认模式,请填写以下字段: 选项 说明 选项 说明 如果使用 Bindings 模式,请填写以下字段: 选项 说明 选择 Perform Authentication 复选框,输入 Username 和 Password 以对请求进行身份验证。如果未使用正确的用户名和密码,则不会对请求进行身份验证。 Message Exchange Pattern有以下可用选项: Expect Synchronous Response: 指定 SOAtest 或 Virtualize 是否接收响应。如果选择 Expect Synchronous Response ,SOAtest 或 Virtualize 发送消息并接收响应。如果选择 Expect Synchronous Response ,SOAtest 或 Virtualize 只发送消息不接收响应。 该部分允许配置 MQRFH2 数据头,该数据头用于将消息往返于属于 WebSphere Message Broker 的消息代理传递消息(在 http://www.ibm.com/support/knowledgecenter/SSKM8N_7.0.0/com.ibm.etools.mft.doc/aq06920_.htm中进行了描述)。 在 MQRFH2 Header 区域,可以配置请求消息头的不同部分,然后 SOAtest 或 Virtualize 将基于指定设置创建数据头“文件夹”。 发布/订阅命令:此面板用于配置 <psc> (发布/订阅命令) 文件夹。<psc> 文件夹用于将发布/订阅命令消息传达给代理。NameValueData 字段中只允许一个 psc 文件夹。有关完整信息,请查阅 http://www.ibm.com/support/knowledgecenter/SSKM8N_7.0.0/com.ibm.etools.mft.doc/aq06950_.htm (命令消息) 。 关于 JMS 消息的更多信息,请查阅 http://www.ibm.com/support/knowledgecenter/SSKM8N_7.0.0/com.ibm.etools.mft.doc/ac24863_.htm 。 MQRFH2 Get Messages 选项: 此面板用于控制 Transform MQRFH2 Header to XML format for Get Messages 选项。如果启用此选项,响应信息的 MQRFH2 数据头将转换为可读的 XML 格式。这使您可以应用 XML 输出工具(例如 XML 数据库、XML 转换程序)。如果没有启用此选项,响应信息的 MQRFH2 数据头可能包含不可见的字符。 Put Messages具有以下选项: MQOO_PASS_IDENTITY_CONTEXT: 当消息放入队列时,允许在 PutMsgOpts 参数中指定 MQPMO_PASS_IDENTITY_CONTEXT 选项。这为消息提供了使用 MQOO_SAVE_ALL_CONTEXT 选项打开的输入队列中的身份上下文信息。必须指定 MQOO_OUTPUT 选项。 MQOO_SET_IDENTITY_CONTEXT: 当消息放入队列时,允许在 PutMsgOpts 参数中 MQPMO_SET_IDENTITY_CONTEXT 选项。这为消息提供了在 MQPUT() 或 MQPUT1 调用上指定的 MsgDesc 参数中包含的身份上下文信息。此选项意味着 MQOO_PASS_IDENTITY_CONTEXT,因此无需指定。必须指定 MQOO_OUTPUT 选项。 MQMD.report: 关于其他消息的报告消息。此字段允许 SOAtest & Virtualize 发送原始信息,以指定需要哪些报告或响应消息,并且在报告和信息中是否包含应用程序信息数据,以及该如何设置报告中的消息和关联 ID 或应答。它包含一个或多个 MQC 类常量。 可以从以下各项中选择一种: MQRO_EXCEPTION_WITH_DATA: 这与 MQRO_EXCEPTION 相同,不同之处在于报告消息中包含来自原始消息的应用程序消息数据的前 100 个字节。如果原始消息包含一个或多个 MQ 数据头结构,则除了应用程序数据的 100 字节,它们还包含在报告消息中。 MQRO_EXPIRATION_WITH_DATA: 这与 MQRO_EXCEPTION 相同,不同之处在于报告消息中包含来自原始消息的应用程序消息数据的前 100 个字节。如果原始消息包含一个或多个 MQ 数据头结构,则除了应用程序数据的 100 字节,它们还包含在报告消息中。 MQRO_EXPIRATION_WITH_FULL_DATA: 这与 MQRO_EXCEPTION 相同,不同之处在于报告消息中包含来自原始消息的所有应用程序数据。 GET Messages具有以下可用选项: MQGetMessageOptions.options: 用于控制由 SOAtest & Virtualize 内部调用 MQQueue.get() 操作的选项。 可以指定以下任一值或不指定任何值。 MQGMO_WAIT: SOAtest 或 Virtualize 等到合适的消息到达为止。最大等待时间在 WaitInterval 中指定。 MQGMO_NO_WAIT: SOAtest 或 Virtualize 在没有可用的合适消息时不需等待。这与 MQGMO_WAIT 选项相反,并且已定义为辅助程序文档。 MQGMO_BROWSE_FIRST: 当使用 MQOO_BROWSE 选项打开队列时,将建立浏览游标,该游标在逻辑上位于队列中的第一条消息之前。然后使用 MQGET 调用指定 MQGMO_BROWSE_FIRST、MQGMO_BROWSE_NEXT 或 MQGMO_BROWSE_MSG_UNDER_CURSOR 选项无破坏地从队列中检索信息。浏览光标标记队列上消息的位置,下一个使用 MQGMO_BROWSE_NEXT 的 MQGET 调用从该位置搜索合适的消息。 MQGMO_BROWSE_NEXT: 将浏览光标前进到满足 MQGET 调用中指定的选择标准的队列中的下一条消息。该消息返回到 SOAtest 或 Virtualize,但仍保留在队列中。打开队列进行浏览后,无论它指定了 MQGMO_BROWSE_FIRST 还是 MQGMO_BROWSE_NEXT 选项,使用该句柄的第一个浏览调用都具有相同的效果。 MQGMO_MSG_UNDER_CURSOR: 不管 MQGMO 中的 MatchOptions 字段是否指定了 MQMO)* 选项,都将破坏性地检索浏览光标所指向的消息。消息将从队列中移除。浏览光标所指向的消息是最后使用 MQGMO_BROWSE_FIRST 或 MQGMO_BROWSE_NEXT 选项检索到的消息。 MQGMO_UNLOCK: 解锁消息。要解锁的消息事先已通过使用 MQGMO_LOCK 选项的 MQGET 调用锁定。如果没有为此句柄锁定的消息,则调用以 MQRC_NO_MSG_LOCKED 完成。 MQGMO_CONVERT: 请求转换 SOAtest 或 Virtualize 数据。在将数据复制到消息缓冲区之前,该转换遵循 MQMessage 的 characterSet 和 encoding 属性。 MQOO_BROWSE: 打开浏览消息的队列。将打开该队列,以用于具有其中一项以下选项的后续 MQGET 调用:MQGMO_BROWSE_FIRST, MQGMO_BROWSE_NEXT 和 MQGMO_BROWSE_MSG_UNDER_CURSOR。即使队列当前已为 MQOO_INPUT_EXCLUSIVE 打开,也允许这样做。带有 MQOO_BROWSE 选项的 MQOPEN 调用将建立一个浏览游标,并将其逻辑上放在队列中的第一条消息之前。 MQOO_ALTERNATE_USER_AUTHORITY: ObjDesc 参数中的 AlternateUserId 包含用来验证 MQOPEN 调用的用户识别符。不管是否授权运行 SOAtest 或 Virtualize 的用户标识符,只要授权了 AlternateUserId 使用指定访问选项打开对象,那便可成功调用。 Queue Manager Options具有以下可用选项: MQCNO_FASTPATH_BINDING: 该选项会造成 SOAtest 或 Virtualize 和本地队列管理器代理属于同一执行单元。这与绑定的常规方法相反,SOAtest 或 Virtualize 和本地队列管理器代理在单独的执行单元中运行。 MQCNO_STANDARD_BINDING: 该连接选项会造成 SOAtest 或 Virtualize 以及本地队列管理器代理(管理队列操作的组件)在单独的执行单元中运行(通常,在单独的进程中)。这种安排维护队列管理器的完整性,也就是说,保护队列管理器免受错误程序的影响。 MQCNO_SHARED_BINDING: 该连接选项会造成 SOAtest 或 Virtualize 以及本地队列管理器代理(管理队列操作的组件)在单独的执行单元中运行(通常,在单独的进程中)。这种安排维护队列管理器的完整性。也就是说,它保护队列管理器免受错误程序的影响。然而,一些资源仍在 SOAtest 或 Virtualize 以及本地队列管理器代理之间共享。 MQCNO_ISOLATED_BINDING: 该选项会造成 SOAtest 或 Virtualize 以及本地队列管理器代理(管理队列操作的组件)在单独的执行单元中运行(通常,在单独的进程中)。这种安排维护队列管理器的完整性,也就是说,保护队列管理器免受错误程序的影响。SOAtest 或 Virtualize 进程以及本地队列管理器代理彼此隔离,因为它们不共享资源。 MQ Queue Manager Properties具有以下可用选项: MQC.CCSID_PROPERTY: 该选项配置客户端使用的 CCSID。当以绑定模式直接连接至 WebSphere MQ 时,不会应用此选项。 可以配置以下 SSL 设置: CipherSuite 用于指定 MQ 通道上的 SSL 连接。请参阅 IBM MQ 文档,以确定根据 CipherSpec 选择哪个 CipherSuite。 可以从下拉菜单中指定固定的 CipherSuite 或输入一个 参数化变量以基于流量指定 CipherSuite。 (可选项)指定对等名称验证队列管理器提供的证书是否与对等名称参数指定的条件匹配。服务器验证将此参数与队列管理器提供的证书的 DN(可分辨名称)相匹配。 可以指定固定的对等名称或 输入一个参数化变量以基于流量指定对等名称。 该设置指定用于客户端 SSL(队列管理器对客户端进行身份验证)的密钥存储库的位置。可以在 Parasoft> Preferences 下将工具配置为对所有项目使用密钥存储配置(请查阅 Security Settings)或者,您可以添加套件级全局设置属性,并配置套件中所有工具可用的密钥存储设置。请查阅添加全局测试组件属性以获取其他详细信息。如果 MQ 通道不要求客户端对其进行身份验证,则不需要提供 Key Store 。 指定要用于服务器端 SSL(客户端对队列管理器进行身份验证)的信任存储。可以在 Parasoft> Preferences 下将工具配置为对所有项目使用信任存储配置(请查阅 Security Settings) )或者,您可以添加套件级 全局设置属性,并配置套件中所有工具可用的信任存储设置。请查阅添加全局测试组件属性以获取其他详细信息。 通过指定 CipherSuite 并运行该工具尝试 SSL 连接后,将无法更改信任存储、密钥存储和密钥存储密码。 如果更改了它们,则需要在更改生效之前重新启动 SOAtest 或 Virtualize。 若要使用密匙库,则需下载并安装无限强度的 Java 加密扩展。有关更多详情,请查阅 JCE Prerequisite。 Scripting Hook 选项允许您使用脚本语言(如Jython、Java、Groovy 和 JavaScript)自定义 MQ 属性。 如果需要有关使用脚本实用程序的详细信息,请参阅本教程的脚本部分。关于脚本 API 列表,请选择 Parasoft> Help,然后查询书名 "Parasoft SOAtest Extensibility API"(针对 SOAtest)或 "Parasoft Virtualize Extensibility API"(针对 Virtualize)。 以下是脚本访问密匙: 例如,如果您将 put 消息的有效时间设置为 999: 使用上述脚本运行工具之后,请注意 Traffic 标头中的 Expiry 字段会变成 999。 注意: Add MQ Hook 选项卡中设置的所有选项都可以覆盖并优先于其他选项卡中设置的任何选项。 发生故障时,MQ 返回失败的原因代码。为了方便用户解释故障,SOAtest & Virtualize 错误消息会报告这些相同的原因代码。 有关 MQ 原因代码及其含义的列表信息,请通过链接到 http://www.ibm.com/support/knowledgecenter/SSFKSJ_8.0.0/com.ibm.mq.tro.doc/q040710_.htm查阅 IBM Knowledge Center。 以下是使用客户端工具(例如,SOAP 客户端、REST 客户端、消息客户端等)发送和接收字符数据的最佳实践。 在发送字符数据(如 XML、CSV、固定长度或纯文本)时,格式类型必须设置为 MQFMT_STRING 常量的值,即“MQSTR”。 对于 SOAP 客户端工具,使用工具的 Misc > Outgoing Message Encoding 选项指定用来编码请求的字符集。 其他适用工具(如:REST 客户端、消息客户端)使用产品的 Misc 首选项中配置的字符编码。 适用选项有: 如果指定不同的编码,则 MQ 消息的字符集将默认为 MQCCSI_Q_MGR,它指的是“消息中的字符数据是队列管理器字符集中的消息。" 应该在客户端工具 MQGetMessageOptions (在 Transport 选项卡中)下启用 MQGMO_CONVERT 框。 这将指示队列管理员将消息转换为客户端工具的字符集。如果消息的原始字符集不是客户端(IBM_037、IBM_437 等)支持的功能之一,这该一点很重要。 将用来执行转换的字符集配置为与 put 消息(如上所述)相同。将必要的 jar 文件添加到类路径
com.ibm.mq.allclient.jar
com.ibm.mq.allclient.jar
com.ibm.mq.jar
com.ibm.mq.jmqi.jar
com.ibm.mq.headers.jar
com.ibm.mq.pcf.jar
com.ibm.mq.commonservices.jar
connector.jar
针对 WebSphere MQ 6及其更早版本,所需 jar 有:
com.ibm.mq.jar
connector.jar
[WebSphere MQ Installation directory]/java/lib
中找到。Java 运行时
配置 MQ 选项
MQ 地址
Host 指定运行 IBM MQ 的主机名。 Port 指定运行 IBM MQ 的端口(默认为 1414)。 Channel 指定服务端定义的通道的名称。 Queue manager 指定队列管理器的名称。 Put queue 指定发送消息的队列。 Get queue 指定接收消息的队列。
如果使用 CCDT 模式,请填写以下字段:CCDT file 指定 CCDT 文件的位置(扩展名为 .tab)。 Queue manager 指定队列管理器的名称。 Put queue 指定发送消息的队列。 Get queue 指定接收消息的队列。 Queue manager 指定队列管理器的名称。 Put queue 指定发送消息的队列。 Get queue 指定接收消息的队列。 身份验证
消息切换模式
MQRFH2 数据头
输入通讯报文
MQQueue.put()
的行为。可以指定以下任一值或不指定任何值。
可以指定如何为报告或应答消息生成消息 ID:
可以指定其中一项以下选项来控制如何设置报告或应答消息的关联性 ID:
可以指定其中一项以下选项来控制当原始消息无法传递到目标队列时,控制其处理:获取通讯报文
队列管理器选项
MQ 队列管理器属性
更改此值会影响连接到 WebSphere MQ 标头中转换信息的队列管理器的方式。除了 MQMessage.applicationIdData 和 MQMessage.putApplicationName 字段中的数据,WebSphere MQ 标头中的所有数据都来自 ASCII 代码集的不变量部分,
如果避免使用这两个字段 ASCII 代码集的变量部分的字符,则可以将 CCSID 从 819 更改为任何其他 ASCII 代码集。 如果将其更改为与正在连接的队列管理器的客户端 CCSID 相同,则您在队列管理器上获得性能优势,因为它不会尝试转换消息标头。如果 CCSID 字段中没有提供值,则 SOAtest 或 Virtualize 将提供默认值 1208(UTF-8)。SSL
CipherSuite
Peer Name
Key Store
Trust Store
Scripting Hook
from com.ibm.mq import *
def changeExpiry(context):
putMessage = context.get("mqPutMessage")
putMessage.expiry = 999
解释 WebSphere MQ 错误消息
发送和接收数据 - 最佳实践
输入通讯报文
获取通讯报文
Overview
Content Tools