本主题解释了如何使用 JMS 传输和 SOAtest, 以及 在 Virtualize 中支持工具和提供操作工具。 其包括以下部分: 如果要使用 SOAtest 或 Virtualize 工具作为 JMS 客户机,我们建议 SOAtest 或 Virtualize 咨询 JNDI 提供程序来连接 JMS 中间件。为了使其连接成功,需要设置 JNDI 提供程序,并且所有必需 jar 文件都需要添加到 SOAtest 或 Virtualize 类路径。(关于如何将 jars 添加到类路径的更多消息,请查阅 System Properties Settings)。还需要提供 JNDI 提供程序将查阅的连接工厂、目的地和应答队列的名称。 如果 JMS 配置没有 SOAtest 或 Virtualize 可以查询 ConnectionFactory 实例的 JNDI 提供程序,请遵循 JMS Messaging without JNDI 中的指导说明。或者,您可以设置简单的文件系统 JNDI 提供程序。 此类提供程序的 .jars 和文档可从 Oracle Java 站点获得。设置文件系统提供程序非常简单,下载部分包含了文档。 一旦提供程序准备就绪,请如 Configuration for Popular JMS Providers 中所描述使用简单的 Java 代码块来创建 ConnectionFactory 实例,以便使用主机和端口作为参数连接到 JMS 服务器。对于本产品使用的 Topics and Queues 也应该这样做。 从合适工具的 Transport 选项卡内的传输(Transport)下拉菜单选中 JMS ,将在左窗格显示以下选项: Connection Settings 包括 JNDI 初始上下文 的 Settings 和 Properties 选项卡。 Properties 选项卡是可选项,它允许执行传递给 JNDI javax.naming.InitalContext 构造器的其他属性(除了在设置选项卡中指定的提供程序 URL 和初始上下文工厂属性)。属性值可以通过单击 Add 并完成 Add JMS 属性对话框以进行添加,也可以设置为固定值、参数化值、脚本化值或唯一值(一个自动生成的随机唯一值,没有两个工具调用将使用同一个值)。 Settings 选项卡包含以下内容: 除了 Settings 选项卡,Connection Settings 还包括: Queue/Topic 设置包括以下选项: Messaging Model 选项指定如何在应用程序之间发送消息。选择 Point to Point 或 Publish and Subscribe。 Messaging Expiration 选项指定消息有效期时间(以毫秒为单位)。 Message Exchange Pattern 选项指定是 SOAtest 接收响应还是 Virtualize 接收响应。如果选择 Get Response ,SOAtest 或 Virtualize 发送消息并接收响应。如果选择 Get Response ,SOAtest 或 Virtualize 只发送消息不接收响应。 如果选择 Get Response ,则还可以启用 Create message consumer on the JMSReplyTo destination before sending the message。如果希望响应很快便可在 JMSRepltTo 主题上可用,则应启用此选项确保响应消息发布之前,SOAtest 或 Virtualize 订阅给应答主题。 此选项不可与 Match response JMSCorrelationID with the request JMSMEssageID 混合使用,因为 JMS 规范要求供应商在消息发送后生成 JMSMessageID。因此,没有办法使用该关联(选择器)在响应目的地上创建使用者,直到消息设置好并且 JMSMessageID 可用之后。 Message Type 选项允许从下拉菜单中选择消息类型。JMS 消息是一个 Java 对象,它包含在 JMS 客户机之间传输的数据。可使用以下消息类型: Request Message Properties 是可选项,它允许要设置到 javax.jms.Message 对象的任何其他属性值,然后将其发送到队列或发布到主题。这些包括预定义属性,这些属性被设置为使用一个与 javax.jms.Message 或自定义属性(例如,使用 setStringProperty、setBooleanProperty、setByteProperty 设置的属性)中相对应的“set”方法。 属性值可以通过单击 Add 并完成 Add JMS 属性对话框以进行添加,也可以设置为固定值、参数化值、脚本化值或唯一值(一个自动生成的随机唯一值,没有两个工具调用将使用同一个值)。确保为每个添加值指定类型。 响应信息关联设置包括以下选项: 可以添加消息对象输出给使用 JMS 传输的消息传递客户机。还可以将传入的 JMS 消息输出添加到使用 JMS 传输的回调工具中。可以链接扩展工具,例如,使用 JMS 的消息传递客户机,以便访问响应 JMS 消息。在 ObjectMessage 用例中,可以使用 要做到这一点,请完成以下步骤: 请查阅 JMS 提供程序配置 若要响应在 JMSReplyTo 字段中设置临时队列的 JMS 消息: 该键在 SOAPUtil.JMS_MSG_KEY 下的 SOAtest Extensibility API 中定义。若要访问 SOAtest Extensibility API,请选择 Parasoft> Help,然后查找名为 "Parasoft SOAtest Extensibility API” 的图书。 然后,SOAtest 将使用接收消息的临时队列作为目的地,而不是输入关键字作为目的地。 在各种工具中,可以指定一个值作为消息过滤器。这指定在标记为 Message Selector 或 Additional Selector Expression Terms 的字段中。 例如,通过输入 这是用来处理消息选择器过滤器的一些提示: 可以根据变量、环境变量和数据源值参数化其他选择器表达术语值。引用变量和环境变量的语法为 ${myVariableName}。引用 XML 数据库值和数据源值的语法为:${myColumnName}.例如,可以使用 JMSCorrelationID ='${myColumnName}。 表达式语法是 SQL92 的子集。例如,如果表达式为 从体系结构的角度强烈建议使用 JNDI 来获取 JMS 连接工厂和目标实例。在测试或阶段环境中,JMS 系统偶尔仍未配置 JNDI,或者 JNDI 仍然没有包括所需连接工厂。此外,在测试期间绕过 JNDI,以便调试问题或隔离具有和不具有 JNDI 的系统性能特征,这一点可能很有帮助。 有了这些原因,只要 JMS 提供程序允许,SOAtest 或 Virtualize 支持 JMS 的工具将允许直接使用供应商连接工厂发送并接收 JMS 消息,而不需通过 JNDI。 该性能支持某些 JMS 实现,该实现指定来允许首先在没有 JNDI 的情况下建立 JMS 连接,并为连接工厂类提供以单个字符串参数作为连接 URL 的构造函数。 由于这种对没有 JNDI 的 JMS 消息传递的支持并不基于标准 JMS API,因此不能保证它可以跨不同的 JMS 实现移植。 该功能已经通过 Sonic 和 TIBCO JMS 进行了测试。它还支持 WebSphere MQ,其配置如 IBM WebSphere MQ (MQ Series) 中所述。 编写时,SOAtest 或 Virtualize 不支持为 Oracle/BEA WebLogic、JBoss 或 WebSphere 默认 JMS 提供程序直接创建连接工厂,并且在大多数情况下,这些供应商不提供文档说明,也不鼓励这样做。 若要在 SOAtest 或 Virtualize 中配置一个 JMS 消息传递工具以发送/接收没有 JNDI 的消息: 空的 Initial Context 字段被解释为在没有 JDNI 的情况下直接实例化连接工厂对象的信号。它将尝试使用带单个字符串参数的构造函数来实现这一点,该参数传递在 Provider URL 字段中指定的连接 URL。连接身份验证设置仍然像往常一样使用。如果在提供程序的连接工厂 API 中没有存在这样的构造函数,则需要 JNDI,以便实例化连接工厂类。 例如,在 Sonic JMS 的案例中,提供的 Connection Factory 类名将是 如果存在 JNDI 并且目录中存在该名称,则不管如何配置 JNDI 设置,SOAtest 和 Virtualize 将总是尝试从 JNDI 解析目标名称(队列或主题)。如果无法通过 JNDI 找到它,则它将尝试从 JMS 会话实例直接创建目标,假设用户提供的名称是物理目标名称,而不是 JNDI 名称。 注意,也可以使用 Sun 的 JNDI 实例。关于更多详情,请查阅 Sun JMS 。 队列浏览器允许查看在 Websphere MQ, Websphere Application Server, Tibco EMS, Sonic MQ, ActiveMQ 和任何其他 JMS 提供程序上部署的队列内容。请查阅 Browsing Queues in SOAtest and Browsing Queues in Virtualize 以获得更多详情)。JMS 前提条件
配置 JMS 选项
Connection Settings
Queue/Topic
Messaging Model
Messaging Expiration
Message Exchange Pattern
Message Type
Request Message Properties
Response Message Correlation
username==John
,只有包含 "John” 作为用户名的消息才会被发送。如果该字段保留为空,则可以从队列接收任何消息。
将该表达式传递给在点到点消息传递中 javax.jms.QueueSession 类的 createReceiver() 方法,或者在发布并订阅消息传递中 javax.jms.TopicSession 类的 createSubscriber() 方法。关于指定选择器的提示,请查阅 Using Message Selector Filters。使用 JMS 为客户端输出消息对象
getter
和 equals()
方法来验证响应,从而创建回归控制。此外,您还可以将 Diff 工具链接到响应流量,如果响应是一个 ObjectMessage,则 SOAtest 将会把插入的可序列化对象转换为 XML 格式并执行 XML 差异比较。这样做,您可以使用数据库值,忽略 Xpath 差异,等。配置以用于流行的 JMS 提供程序
响应给临时的 JMSReplyTo 队列
from soaptest.api import *
def getJMSReplyTo(input, context):
context.put(SOAPUtil.JMS_MSG_KEY, input)
使用消息选择器过滤器
username==John
,只有包含 "John” 作为用户名的消息才会被发送。如果字段保留为空,则可以接收任何消息。fruit = 'apple'
或 JMSCorrelationID = '123456
',
则只有具有属性 fruit
值定义为 apple
或 JMS 数据头 JMSCorrelationID 值设置为 123456
才会被获取。没有 JNDI 的 JMS 消息传递
支持的 JMS 实现
配置
progress.message.jclient.ConnectionFactory
。对于 TIBCO JMS,其类名将是 com.tibco.tibjms.TibjmsConnectionFactory
。另一方面,JBoss 和 OpenJMS 没有带单个连接 URL 参数的连接工厂。在这些情况下,必须要有 JNDI,以便使用 SOAtest 或 Virtualize 与这些系统交换 JMS 消息。浏览队列内容
Overview
Content Tools