本主题介绍如何配置不同的消息响应器,发送与传入的请求消息相关的响应消息。消息响应器可以从通讯报文文件创建,该文件捕获了实际行为,或从 WSDL、OpenAPI/Swagger/RAML 定义和 XML 模式类似的定义生成。也可以手动添加/定义。
章节目录:
前言
术语“消息响应器”引用所有通过 HTTP、MQ、JMS 或其他/自定义协议发送响应的工具。自定义消息响应器支持您正在使用的任何消息格式,例如,大型机消息格式、二进制消息格式或其他任何类型的私有自定义消息。
消息响应器可以通过其中一个支持的虚拟资产协议或 API 部署选项(即,HTTP、JMS、WebSphere MQ 或通过自定义扩展处理的协议或 API)接收并响应。(请参阅使用自定义传输、报文格式和工具)。使用自定义消息响应器选项,您可以自定义虚拟资产的行为(使用手动指定的不同的请求、响应用例,或者是通过数据源、错误条件、延迟时间等)。
SQL 响应器不同于消息响应器
消息响应器发送与传入请求相关的响应消息,而 SQL 响应器发送与 SQL 查询相关的结果集。
定位和存储消息响应器
消息响应器被创建并保存在 .pva 文件中。
默认并推荐 .pva 文件的位置为 VirtualAssets 项目。任何添加到该项目的 .pva 文件都将自动部署在本地 Virtualize 服务器。如果 .pva 不在此项目中,则无法部署。
该项目包含一个 VirtualAssets.xml 文件,该文件为每个虚拟资产存储部署配置,包括每个虚拟资产 .pva 文件的位置、名称、HTTP 端点路径、全局报告设置、JMS 和 WebSphere MQ 传输设置。当修改虚拟资产部署设置时将自动更新此文件。
为可应用的消息格式配置响应器
使用通用的消息响应器框架创建并配置不同消息格式的消息响应器。只要可行,所有类型的消息框架都可以共享配置选项。此外,如果适用,某些消息格式可以使用特殊的配置选项(例如,它们可能是您团队开发的自定义大型机或二进制格式扩展的自定义转换选项)。因此,不同格式的消息响应器有时会提供不同的配置选项。
可以将消息响应器配置为接收一种格式的消息并响应另一种格式的消息(例如,接收 EDI 消息,使用 Fixed Length 消息进行响应)。这可以通过Request Handling选项来配置。
如果您想更改消息响应器使用的消息格式(例如,如果您希望将定长更改为纯文本),则只需修改所选定的格式。
配置选项
基本配置
在工具顶部提供以下基本选项:
- 数据源:指定用于提供工具值要使用的数据源。此菜单仅在数据源被添加到项目时才可用(如使用数据源值、变量和提取值的参数化工具中所述)。
XML 转换选项
这些选项仅适用于转换为 XML 或从 XML 转换的格式。
- 格式:选择用于响应负载的格式。
- 在表单输入或表单 XML 模式中,使用 XML 而不是 [native format] 进行响应:如果禁用(默认),Virtualize 会在发送消息之前自动将 XML 模型转换为本机格式。 换句话说,Virtualize 会向服务器发送本机格式,这就是您在通讯报文查看器中所看到的。
- 如果启用该选项,Virtualize 将发送您在 UI 中为响应配置的消息。 您可以通过使用字面量或脚本视图以本机格式创建消息负载。 如果禁用该选项并在 UI(例如,使用表单输入视图)中创建 XML,则 Virtualize 将发送未更改的 XML。对于当前支持的格式,通常不希望这样做,但是 Virtualize 使此选项可用。
使用表单输入对请求有效负载建模的模式
这些选项仅适用于转换为 XML 或从 XML 转换的格式。
消息类型:
- 消息类型:指定要使用的消息类型。这允许 Virtualize 填充表单输入视图。
- Schema URL:说明可访问该服务的 Schema URL。可以输入值或点击浏览按钮。如果没有 schema,则可以将该字段保留为空。
- 约束到 Schema:确定某些工具参数包含的值是否来自 Schema 而非手动输入。 如果启用该选项,则禁用掉某些参数并从 Schema 中获取它们的值。如果禁用该选项,则刷新模式按钮也将被禁用。
定义选项卡
此选项卡专门设计用于 JSON、SOAP 和纯 XML 消息响应器
在定义选项卡中指定选项后,Virtualize 会在响应选项卡中填充内容,让您可以更轻松地指定响应消息。您可以指定与 WSDL 或 schema 相关的以下设置,定义预期的请求和传出响应:
- 服务定义:指定响应器是否与服务定义(RAML、OpenAPI/Swagger、WSDL 或 Schema)相关联。对于纯 XML,请选择无。当指定了服务定义,并且该工具受到了 WSDL 或 schema 的约束,则将自动向可应用的表单视图中填充合适的字段值和控件(例如,布尔值的单选按钮、数字与整数的不同控件,枚举的下拉列表)。它也防止输入无效的消息(例如,消息缺失必要值、不正确类型的值、schema 中未指定的方法/资源/响应代码等等)。编辑将受到限制,以确保消息符合相关的模式(例如,将无法对树节点进行插入、删除、重命名、复制或粘贴操作)。
- 针对 RAML 服务定义模式
- RAML URL:特定的 RAML URL,或引用 RAML URL 的变量。
- 针对 OpenAPI/Swagger 服务定义模式
- OpenAPI/Swagger URL:特定的 OpenAPI/Swagger URL,或引用 OpenAPI/Swagger URL 的变量。
- 针对 WSDL 服务定义模式
- WSDL URL:说明可访问该服务的 WSDL URL。可以输入值或点击浏览按钮。如果没有 WSDL,则可以将该字段保留为空。
- 限定到 WSDL 确定某些工具参数包含的值是否来自 WSDL 而非手动输入。 如果启用该选项,则禁用掉某些参数(例如,路由器端点、SOAP 操作、SOAP 主体和头参数)并从 WSDL 中获取它们的值。如果禁用该选项,则刷新 WSDL 按钮也将被禁用。
- WSDL 文档:(如果可用,自动完成):说明给定 WSDL URI 的服务。
- 针对 Schema 服务定义模式
- Schema URL:说明可访问该服务的 Schema URL。可以输入值或点击浏览按钮。如果没有 schema,则可以将该字段保留为空。
- 约束到 Schema:确定某些工具参数包含的值是否来自 Schema 而非手动输入。 如果启用该选项,则禁用掉某些参数并从 Schema 中获取它们的值。如果禁用该选项,则刷新 Schema 按钮也将被禁用。
- XML 消息类型:确定响应选项卡的表单输入控件是针对 SOAP 消息还是纯 XML 消息。如果选择纯 XML,则表单输入模式将直接表示消息。如果选择 SOAP,则表单输入中配置的 XML 将用 SOAP 消息封套包装起来,并且视图将提供 SOAP 头部分,允许在需要时配置 SOAP 头。
响应选项卡
响应选项卡允许您配置希望响应器在接收相关请求时要传送的响应值。
可用选项因输入模式或视图菜单中选择的选项而异。
输入模式和视图
这些视图在多个 Parasoft 工具中是相似的;在以下区域对它们进行了说明:
注意
- 基于表单的视图允许您从数据源中构建响应和参数化值。
- 如果在表单输入或表单 JSON 视图中启用操作选择器,则可以使用它为响应选择操作。当选择一个操作时,表单输入视图和表单 JSON 视图用合适的值和 UI 控件(例如,布尔值的单选按钮、数字和整数的不同控件等)进行填充。
- 在表单输入模式中,操作选择器将显示关联服务定义 1)将响应定义为 XML 2)指定 XML 模式的所有操作。
- 在表单 JSON 模式中,操作选择器将显示关联服务定义 1)将响应定义为 JSON 2)指定 JSON 模式的所有操作。
- 在多响应模式中,每个可能的响应都与传入请求、静态响应消息和性能(时间)选项有自己的关联。
传输消息头选项卡
传输消息头选项卡允许指定将与响应消息一起返回的 HTTP、JMS 或 MQ 消息头。您可以使用表单视图或字面量视图。
对于 HTTP,这些头文件值将被附加到响应中生成的标准 HTTP 头中。对于 JMS,它们将作为 String 消息属性被设置到传出响应消息中。或者,如果所提供的头名称匹配其中一个现有消息属性名称,则它将被重写(例如:JMSCorrelationID)。对于 WebSphere MQ,还有一个 RFH2 头的部分也允许配置这些。
对于 JMS,您可以定义任何要设置到 javax.jms.Message 对象的其他属性值,然后将其发送到队列或发布到主题。例如,您可以定义 JMSPriority、JMSDeliveryMode、JMSExpiration 以及如下的其他属性:
响应器关联性选项卡
响应器关联性选项卡允许您指定此消息响应器工具接收并处理哪些消息。将发送到虚拟资产 URL 的不同消息路由到基于此处设置的特定的消息响应器工具(每一个都处理不同的操作)。例如,其中一个消息响应器工具可能响应到客户注册消息,另一个可能响应到支付消息,而还有一个可能作为默认的“catch all”函数,当其他选项都不匹配时使用该函数。
您可以通过在以下响应器关联性选项卡区域指定消息响应器接收的消息:
- 传输:允许您在消息中指定 HTTP 头、JSM 消息属性或 MQ 消息字段,这些字段将确定消息是否由此特定响应器处理。详情请参阅Transport Correlation。
- 请求主体:允许您在消息中指定 XPath,这将确定是否处理该消息。详情请参阅请求体关联性。
- HTTP URL 参数(用于 RESTful 服务):允许指定 URL 参数,这将确定是否处理该消息。您可以配置相关性以匹配包含特定参数(无论它们被设置为什么值)的所有消息,或者,仅匹配设置为特定值的特定参数的消息)。URL 参数可以重复(可以将同一参数设为不同值)。详情请参阅URL Parameter Correlation。
- HTTP URL 路径:允许您指定 URL 路径,这将确定是否处理该消息。详情请参阅URL Path Correlation。
- HTTP 方法:允许您指定 URL 方法,这将确定是否处理该消息。详情请参阅HTTP Method Correlation。
- 自定义:允许您指定自定义响应器关联性,其基于使用 Java 或脚本语言编写的自定义方法的返回值。详情请参阅Custom Correlation。
您可以配置关联性的其中一个类型、多类型,或者配置为没有关联性。如果配置为没有关联性,则将处理消息中的所有内容。
传输关联性
配置传输关联性:
- 请选择启用关联性复选框。
- 点击添加按钮。将显示一个新的条目行。
- 输入报文头的名称。
- 请执行以下任一操作:
- 如果想匹配此头文件设置特定值的消息:在报文头的值下输入其值。
- 如果想匹配包含此头部(不管值被设置为什么)的所有消息:选择当命名的头部存在时进行关联而不考虑具体的值。
请求主体关联性
配置请求体关联性:
- 请选择启用关联性复选框。
- 点击编辑按钮。将显示一个编辑 Xpath 函数对话框。
- 从元素树选择元素,从函数下拉菜单选择函数,然后点击 OK。
- 请执行以下任一操作:
- 如果显示传入请求消息的树表示形式,则选从树中选择元素并从函数下拉菜单中选择函数。
- 如果没有可用的请求树表示形式,或者如果树形式没有完全显示提取和评估感兴趣的元素或属性,则手动提供一个 XPath 表达式。为了实现关联性,Virtualize 支持的 XPath 表达式基于 W3C 的标准 Xpath 1.0 标准。
- 如果希望制定任何额外的 XPath,则以相同方式添加。
URL 参数关联
URL 参数关联应用于将通过 HTTP/HTTPS 访问的虚拟资产。
若要配置 URL 参数关联性:
- 选择启用关联性复选框。
- 如果希望只在请求具有该表中指定的确切 URL 参数时才应用关联性——不多也不少——请选择只有当参数的列表完全匹配时进行关联。否则,任何包含列出的参数和其他参数的请求都将相互关联。无论启用还是禁用该选项,只要缺乏其中一条指定参数的消息都无法匹配。
- 点击添加按钮。将显示一个新的条目行。
- 输入参数名称。
- 请执行以下任一操作:
- 如果想匹配设置此参数的特定值的消息:在值下输入其值。
- 如果想匹配包含此参数(不管它被设置为什么值)的所有消息:选择当参数名称存在时进行关联 (不考虑具体值)。
- 如果想匹配设置此参数的特定值的消息:在值下输入其值。
例如,假定资产已在路径 http://myvirtserver:9080/MyAsset/MyPath
下部署,并且已在响应器中指定以下 URL 参数:
参数名称 | 值 |
---|---|
param1 | value1 |
param2 | value2 |
以下请求 URL 将匹配此关联标准:
- http://myvirtserver:9080/MyAsset/MyPath?param1=value1&m2=value2
- http://myvirtserver:9080/MyAsset/MyPath?param1=value1&m2=value2&m3=value3
- http://myvirtserver:9080/MyAsset/MyPath?param2=value2&m1=value1&m3=value3
以下 URL 将不会映射到此响应器:
- http://myvirtserver:9080/MyAsset/MyPath?param1=value1¶m2=someothervalue¶m3=value3
- http://myvirtserver:9080/MyAsset/MyPath?param1=value1&m3=value3
URL 路径关联性
URL 路径关联性应用于将通过 HTTP/HTTPs 访问的虚拟资产。注意,从 Virtualize 9.7 版本开始,将更改匹配策略;现有的虚拟资产将自动重新配置以在修改时使用当前范式。
若要配置 URL 路径关联性:
- 选择启用关联性复选框。
- 指定要用于关联的路径。
例如,假定资产已在路径 http://myvirtserver:9080/MyAsset/MyPath
下部署,并且已在响应器关联中指定 /segment1/segment2/**
路径。
以下 URL 将匹配此关联标准:
- http://myvirtserver:9080/MyAsset/MyPath/segment1/segment2
- http://myvirtserver:9080/MyAsset/MyPath/segment1/segment2/
- http://myvirtserver:9080/MyAsset/MyPath/segment1/segment2/segment3?param1=value1&m2=value2
以下 URL 将不匹配:
- http://myvirtserver:9080/MyAsset/MyPath/segment1/
- http://myvirtserver:9080/MyAsset/MyPath/segment3/segment1/segment2
在 * 匹配 0 或更多字符以及 ** 匹配 0 或更多路径的地方可使用任何风格的通配符。使用此格式:
/**/abc
匹配/abc
或/this/that/abc
/abc/**
匹配/abc
或/abc/this/that/theother
/ab**
不匹配/abc/d
(它被解释为您使用了单个星号/ab*
);不匹配/absolutely
/**bc
不匹配/0/abc
(它被解释为您使用了单个星号/*bc
);不匹配/abc
示例 1:**/service/*
匹配 | 不匹配 |
---|---|
service/Repository | org/web/service/foo/bar/Entries |
示例 2:org/parasoft/virtualize/**
匹配 | 不匹配 |
---|---|
org/parasoft/virtualize/tools/service | org/parasoft/somethingelse |
示例 3:org/parasoft/**/EM/*
匹配 | 不匹配 |
---|---|
org/parasoft/EM/Entries | org/parasoft/EM/foo/bar/Entries |
HTTP 方法关联性
URL 方法关联性应用于将通过 HTTP/HTTPs 访问的虚拟资产。
若要配置 URL 方法关联性:
- 请选择启用关联性复选框。
- 指定要用于关联的 HTTP 方法。
例如,如果选择 GET、POST 和 PUT,则响应器将匹配具有方法 GET、POST 或 PUT 的 HTTP 请求。 具有 CONNECT、DELETE、HEAD 等的 HTTP 请求将不匹配。
自定义关联性
自定义响应器关联性基于使用 Java 或脚本语言编写的自定义方法的返回值。
您会发现:
- 方法必须携带 0 或 1 个参数。
- 可选参数的类型是
com.parasoft.api.ScriptingContext
。 - 方法可以使用 ScriptingContext 对象访问传输头文件、URL 参数和传入消息的消息内容。
更多信息,可通过 Parasoft> 帮助> Extensibility API> CorrelationScriptingHookConstants 获取。
正则表达式
例如,如果想使用基于正则表达式的纯文本消息,您可以使用:
from com.parasoft.api import CorrelationScriptingHookConstants from java.lang import * def match(context): strMessage = context.get(CorrelationScriptingHookConstants.MESSAGE_STR) return String(strMessage).matches("myRegularExpression")
XML 元素
如果想使用 XML 消息中的元素,您可以使用:
from com.parasoft.api import CorrelationScriptingHookConstants from org.w3c.dom import * from javax.xml.parsers import * from javax.xml.xpath import * from java.io import * from java.lang import * def match(context): xmlDocument = context.get(CorrelationScriptingHookConstants.MESSAGE_DOM) if xmlDocument != None: xPathFactory = XPathFactory.newInstance(); xpath = xPathFactory.newXPath() expression = xpath.compile("//*[local-name(.)='someElement' and namespace-uri(.)='someNamespace'][1]/text()") elementValue = expression.evaluate(xmlDocument) return String(elementValue).matches("myRegularExpression") return 0
HTTP 方法
如果想在 HTTP 方法上进行关联,您可以使用:
from com.parasoft.api import * def correlateHTTPMethod(context): method = context.get(CorrelationScriptingHookConstants.REQUEST_METHOD) return "GET" == method
附件内容
若要访问自定义响应器关联中的附件,请使用键 CorrelationScriptingHookConstants.ATTACHMENTS
以获取所有附件的列表。返回的附件接口只有一个 getContents
方法,它返回一个基于附件 mime 类型的对象:
- 对于文本/纯文本,返回一个字符串。
- 对于文本/xml,返回 javax.xml.transform.stream.StreamSource.StreamSource。
- 对于所有其他类型,返回 java.io.InputStream。
例如,如果想要在附件(在这里,是一个带单词“Attachment”的字符串)上进行关联,则可以使用:
from com.parasoft.api import CorrelationScriptingHookConstants from org.python.core.util import FileUtil from org.python.core.util import StringUtil def correlateOperation(context): # List<com.parasoft.api.ICorrelationAttachment> attachments = context.get(CorrelationScriptingHookConstants.ATTACHMENTS) # java.io.InputStream instream = attachments.get(0).getContents() bytes = FileUtil.readBytes(instream) return "Attachment" == StringUtil.fromBytes(bytes)
数据源关联性选项卡
数据源关联性选项卡允许您指定要在虚拟资产响应中使用的数据源行值。当传入消息与响应器关联性设置相匹配时,Virtualize 会根据数据源关联性设置在数据源中执行数据查找来找到数据行。然后,该行将使用数据源中的参数化值填充响应(在响应选项卡中定义)。
例如,以下对介于传入消息中的 loanAmount 值和 ApprovalLists 数据源中的 Amount 列之间进行关联配置:
对于每个传入请求,loanAmount 将匹配到 Amount 列中的一行。然后,将使用来自同一行的其他列的值对响应进行参数化。
响应选项卡中有了以下设置,将使用 Decision 数据源列中对应的值对认可值进行参数化。
并且,将使用 Message 数据源列中对应的值对消息值进行参数化。
区分大小写
默认情况下,数据源关联性标准中使用的值区分大小写,但您可以在忽略不同方面的数据源关联性的大小写敏感设置的模式下启动 Virtualize。从命令行启动 Virtualize,并包含以下一个或所有系统属性:
parasoft.correlation.value.case.insensitive | 该属性可更改数据资源库数据集键值的大小写敏感设置。它只影响从通讯报文中新建资产的值。 可接受的值:
示例:
|
parasoft.correlation.field.name.case.insensitive | 此属性可更改响应器关联性和数据源关联性请求体字段名的大小写敏感设置。 可接受的值:
示例:
|
parasoft.correlation.url.path.case.insensitive | 此属性可更改请求 URL 路径的大小写敏感设置。此属性会影响资产部署路径、代理监听路径和响应器 URL 路径关联性。 可接受的值:
示例:
|
优点
使用多响应配置虚拟资产的一个方法是手动配置消息响应器工具的多响应模式,根据传入的消息发送不同的响应消息。
使用所需消息动态响应配置虚拟资产的另一个方法是使用数据源。 您可以轻松地填充数据源表(Excel 等),其中每行包含想要虚拟资产响应的传入消息(通常只需叶节点值)中的值,然后,另一列指定当满足指定条件时,您希望虚拟资产如何响应(详情请参阅Using Existing Data Sources or Rapidly Creating Data Sources for Responses)。在那之后,您可以配置请求响应消息值之间的映射以及数据源中的列。
这样就可以在一个易于编辑的表(数据源)中轻松配置请求/响应用例,并在此对它们进行管理,以便随着消息数量的增加而进一步扩展,而且还能为响应消息提供更大的灵活性(因为表单输入允许您将某些值固定化,将其他值参数化,将某些值自动或甚至脚本化)。
这个数据源关联非常灵活。您可以配置虚拟资产,以超出精确的匹配/关联的规则和逻辑响应传入的请求值。例如,您可以配置虚拟资产对信用卡号的最后 4 位数、小于或大于给定值的数值或其他模式和表达式进行计算。
值匹配支持通配符 *
和 ?。*
匹配 0 或多个字符; ?
匹配单个字符。
例如,如果想要命名为“title keyword”的传入值匹配来只要包含单词 Linux 的某一行,则可以使用数据源值 "[like *Linux]"
配置步骤
若要参数化来自数据源的虚拟资产响应:
- 确保在 Virtualize 中配置了数据源,并可用于消息响应器。
- 在数据源关联性选项卡中相应位置点击添加按钮,提供 XPath、URL 参数、URL 路径和/或标准表达式,然后选择合适的列名。在执行部署的虚拟资产时,Virtualize 将从请求中提取特定值,然后在指定列中搜索与提取值对应的匹配项。如果找到匹配项,将使用相应数据源行中的数据填充响应
- 如果多次指定相同的列名(例如,在 URL 参数和 URL 路径中),则将会设置一个值;前面的值将被重写。
- 如果提供 WSDL,则可使用编辑按钮生成 XPath。该对话框实时验证 XPath 表达式和列名。
- 如果您选择自定义 XPath 表达式而不是使用可视化编辑选项,Virtualize 会在您键入/编辑这些 XPath 表达式时验证 XPath 语法。
- 可以在数据源列中使用通配符。
- 可根据用于与消息响应器匹配值的条件表达式中的说明使用表达式(例如,
[> "55"]、[like "alpha?beta*"], [like "*b*" or like "*a*" and like "*z*"]
)。 - 有关可用配置选项的详情,请参阅下面的Data Source Correlation Options。
- 通过引用同一数据源中的其他数据源列(例如,表单输入、表单 XML 等),对消息响应器的响应区域进行参数化。您可以向列名映射中添加多个 XPath 或 URL 参数。
数据源关联性选项
数据源关联性可使用以下配置选项。
故障切换选项
在启用数据源关联性时,Virtualize 使用此选项卡中指定的标准,尝试将传入消息中的值与数据源值进行匹配。如果没有匹配特定传入消息值的数据源,则将其视为数据源关联故障。
在启用在数据源关联失败时继续寻找一个匹配的响应器(默认设置)并且此响应器的数据源关联失败时,Virtualize 将使用匹配的响应器关联继续为响应器搜索响应器套件。只有在下列情况下才会报错:
- 没有响应器满足响应器关联性标准,或者
- 响应器套件中的另一个响应器匹配响应器关联性,但其数据源关联性出现故障,且其数据源关联性容错选项被禁用。
如果禁用在数据源关联失败时继续寻找一个匹配的响应器并且此响应器的数据源关联失败,将立即报告一个错误,并且 Virtualize 将停止继续搜索匹配的响应器。
在错误返回到请求器时,错误时间也将被记录到事件详情视图中(如果按照获得对服务器事件的可见性中的说明启用对虚拟资产的监控)。
请求体
此区域允许您指定一个或多个 Xpath 来运行传入消息,以便提取一个或多个值。提取到的值将与映射的数据源列匹配。
请求 HTTP URL 参数
此区域适用于通过 HTTP/HTTPS 访问的资产。指定要在请求 URL 中查询的一个或多个 URL 参数。参数值将与映射的数据源列匹配。
如果使用多个列进行关联,则必须对每个列行的值进行解码或编码。如果所有值都进行了编码,则它们必须是以同一种方式进行的,即用额外标记或“%20”代表空格,但并非两者同时使用。
例如,允许以下项:
Borrower 1 | Borrower 2 |
---|---|
John Smith | Jane Doe |
John+Smith | Jane+Doe |
John%20Smith | Jane%20Doe |
在这样的情况下,Virtualize 可能会将传入请求与查询字符串 Borrower1=John+Smith&Borrower2=Jane+Doe 或以 URL 编码的任何其他变量进行关联。
不允许以下项:
Borrower 1 | Borrower 2 |
---|---|
John Smith | Jane+Doe |
John+Smith | Jane%20Doe |
John%20Smith | Jane Doe |
在不存在/空字段和参数上进行匹配
数据源关联会在请求中不存在的字段上进行匹配。例如,假设您有一个响应器,它根据请求体中 XML 元素的文本值配置了数据源关联性,但该元素是可选的。 当字段缺失时,您可以使用相同的数据源,用参数化值填充响应。为此,您需要将数据源行中相应字段的值设置为空字符串。由于 XPath 函数的特性,空字符串将匹配 XML 元素不存在和 XML 元素为空的情况。对于 URL 路径的数据源关联性来说,情况也是如此:若要匹配请求中不存在的字段,您可以使用空字符串作为数据源行中相对应的字段的值。
URL 参数数据关联的工作方式有些不同(以便处理参数值为空字符串的情况和参数完全不存在的情况):
- 若要匹配 URL 参数存在而其值为空字符串的情况,则使用空字符串作为数据源行中相对应字段的值。
- 若要匹配请求 URL 中的参数不存在的情况,则右键点击数据源行中相对应的字段(在数据资源库编辑器中)并选择设置字段为排除。
请求 URL 路径
此区域适用于通过 HTTP/HTTPS 访问的资产。可以根据路径段索引配置数据源值映射。
例如,假定:
- 资产部署在路径
http://myvirtserver:9080/MyAsset/MyPath
上 - 传入请求具有
http://myvirtserver:9080/MyAsset/MyPath/[somedynamicvalue]/B/C
模式
如果希望在 [somedynamicvalue]
段下获取值,并将其与数据源列进行匹配,则指定 2 作为 URL 路径索引。计数包含资产部署中使用的路径段,并从 0 开始。
如果希望匹配来自 URL http://myvirtserver:9080/MyAsset/MyPath/A/[somedynamicvalue]/C
的动态值,则使用索引值 3。
若要自动输入合适的路径索引,则在对话框顶部选择合适的超链接。
如果使用多个列进行关联,则必须对每个列行的值进行解码或编码。如果所有值都进行了编码,则它们必须是以同一种方式进行的,即用额外标记或“%20
”代表空格,但并非两者同时使用。
例如,允许以下项:
Borrower 1 | Borrower 2 |
---|---|
John Smith | Jane Doe |
John+Smith | Jane+Doe |
John%20Smith | Jane%20Doe |
在这样的情况下,Virtualize 可能会将传入请求与查询字符串 Borrower1=John+Smith&Borrower2=Jane+Doe 或以 URL 编码的任何其他变量进行关联。
不允许以下项:
Borrower 1 | Borrower 2 |
---|---|
John Smith | Jane+Doe |
John+Smith | Jane%20Doe |
John%20Smith | Jane Doe |
请求头
为要提取并匹配的请求值提供头部,然后将其一一映射到数据源列中。提取到的值将与映射的数据源列匹配。
处理详情
在消息响应器活跃时,传入消息通过这些标准进行评估。然后根据相应的数据源值匹配这些值(每个都有其各自的列)来找到匹配该值的行。
如果响应器的数据源关联列表中指定的所有值都匹配在该行中,则数据源行被视为是匹配的。
如果找到匹配的行,则该行将用于消息响应器的响应消息中的任何参数化值。通过这种方式,虚拟资产可以根据传入消息中的值响应所需的消息值。
有关处理的详情,请参阅用于与消息响应器匹配值的条件表达式。
附件选项卡
附件选项卡允许向响应消息发送二进制或 XML HTTP 附件。
在使用 MTOM 时,不需要向附件选项卡添加任何内容。MTOM 选项将造成其使用优化(未编码)的 SOAP 消息封套 xsd:base64Binary 内容自动创建 MIME_boundaries。附件选项卡仅适用于 MIME/DIME 选项。
若要发送附件,请执行附件选项卡中的以下操作:
- 点击添加按钮。将在附件表中显示一个 XML 附件条目。
- 双击 XML 附件条目。将显示一个编辑附件对话框。
- 在编辑附件对话框中,从模式下拉菜单中选择 XML 或二进制。
- 配置附件。
- XML 模式有以下选项:
- 视图:从下拉菜单中选择所需视图并相应地进行配置。
- 二进制模式有以下选项:
- Base 64 编码:启用 Base 64 编码,对二进制值进行编码。
- 数据源列:选择发送来自数据源列的值。
- 文件:选择发送来自文件的值。通过点击浏览按钮选择所需的文件。如果要将该文件的路径作为当前配置文件的相对路径来保存,则选择保留为相对路径选项。
- 文本:选择发送文本值。
- 内容类型:指定内容类型。如果想对附件头信息进行添加/更改或删除操作,请点击编辑消息头按钮。
- XML 模式有以下选项:
“选项”选项卡
选项选项卡允许您配置如何处理消息。可选择以下选项:
请求模板
请求日期
请求日期模板用于当没有出现匹配时,在生成内联表达式过程中计算日期的偏移量,例如当请求消息模板或请求 URL 模板中没有日期时。要使用当前日期/时间,请从下拉菜单中选择[当前日期/时间]。如需指定日期时间,请在字段中输入。如果留空,则不计算偏移量。
用于辅助参数选择的请求 URL
允许您输入 URL,该 URL 是被测应用程序将提供(并且响应器应该模拟)的 URL 的典型代表。如果响应器通过参数化通讯报文向导(如从通讯报文中创建参数化的消息响应器中所述)创建,则此字段将填充一个 URL,该 URL 来自与此响应器相对应的通讯报文中的一个请求。
在这里指定的值将用来配置响应器关联和数据源关联选项卡中的 URL 路径和 URL 参数关联设置。
用于辅助 XPath 创建的请求消息
允许指定 XML 格式的模板,该模板将用于在 XPath 参数时自动填充预期的 XML 响应(例如,数据源关联性和响应器关联性的消息请求 XPath 对话框中,或多响应 XPath 对话框中)。
- 在从通讯报文日志中创建消息响应器时,将自动生成请求消息模板。为了实现此目的,将使用通讯报文日志中已识别的最大请求消息。
- 在未从通讯报文日志中创建消息响应器时,模板将为空。在这种情况下,可以通过树或字面量视图(如,复制与您配置的响应消息关联的示例请求消息)手动更改请求消息模板。
- 完整的请求消息模板用来填充消息响应器中可用的编辑 Xpath 函数对话框中的树/字面量/元素视图。如果模板作为请求输出附加到消息响应器,那么 XML 数据库和 XML 转换器输出也将使用此模板。
消息交换模式
选择只征求响应或通知。
- 寻求响应是默认选项。它表示返回的是响应消息体。
- 仅通知表示仅确认请求消息。对于 HTTP,响应只是一个没有实体内容的 HTTP 头。对于 JMS 或 WebSphere MQ,将从请求队列中获取传入的请求消息,但不会将响应消息生成为响应。
返回状态(仅适用于 HTTP)
允许指定如何返回消息。例如,模拟工作或有故障的服务。若要使用默认值 200 OK,则选择使用默认的返回状态复选框。如果未选择此选项,则可使用以下选项:
- 返回状态:输入自定义返回状态值。如果数据源可用,则可参数化该值。
- 返回消息:输入自定义返回消息。如果数据源可用,则可参数化该值。
- 跳过消息代理故障转移:启用后,内部路由错误消息会绕过消息代理的故障转移设置(在 HTTP 反向代理或 HTTP 正向代理中设置),并允许发送在响应器中配置的自定义返回状态和有效负载。
请求处理
这些选项允许您确定传入的消息是否在关联被处理前经过了更改(以及如何更改)。
如果要在数据源或多响应相关标准执行该消息之前,链接一个更改请求消息的工具,则选择在应用数据源或多个响应的关联性之前允许传入请求的工具来修改消息。然而,如果您正在链接一个可能更改请求的工具(但不希望这样的更改影响到传递给数据源的消息和多响应相关标准),则不要选择该选项。在 XML 必须更改为让其适用于关联性(或消息不完全是 XML,并要求虚拟资产发送请求的合适响应给原始调用者之前需要进行一些转换)时,这一点很重要。
如果想在传入消息未成功关联到数据源列的情况下,防止执行链接的请求工具,则选择如果数据源关联失败跳过输入请求工具。
XML 转换选项还可用于转换为 XML 的消息格式:
在应用响应器关联性之前将传入请求转换为 XML确保在运行关联之前进行 XML 转换。如果启用此选项,关联将基于转换的 XML。
消息建模的影响
启用在应用响应器关联性之前将传入请求转换为 XML 选项,您可以将示例本机格式的通讯报文粘贴到字面量选项卡(在请求消息模板以及响应器关联性和数据源关联性控件的 XPath 区域中),并且树/元素选项卡将以消息格式指定的结构呈现该消息。例如,如果将 JSON 消息粘贴到 JSON 响应器中的字面量选项卡,然后打开树选项卡,则以表单 JSON 结构对消息进行呈现。
如果想要粘贴与响应不同格式的消息,请确保启用使用不同于响应的消息格式将传入请求转换为 XML 选项,并且指定消息格式。
- 使用不同于响应的消息格式将传入请求转换为 XML 允许将消息响应器配置为与不同于配置为响应的格式接收消息。例如,如果想接收 EDI 消息和使用定长消息进行响应,则需要创建一个定长的消息响应器,并将其配置作为 EDI 转换传入请求。
性能
允许设置与消息响应器执行时间关联的以下选项:
- 性能组:如果正在使用性能配置文件,则可以使用该控件设置或更改此响应器的性能组。有关性能配置文件的详情,请参阅使用性能配置文件。
- 思考时间:输入想要消息延迟模拟(如,模拟慢速服务)的时间(以毫秒为单位)。这个时间将被添加到 a)执行时间,即从服务器完成接收请求到响应开始发送请求的时间,以及 b)性能配置文件指定的额外时间,如使用性能配置文件中所述。如果数据源可用,则可参数化该值。
样式/使用
这些选项允许选择消息的 Body 格式和编码:
- Body 格式:启用 document 或 rpc。
- 使用:启用 encoded 或 literal。
- 编码格式 URI:(如果可用,自动完成)列出用来发送请求的编码格式 URI。
- 目标对象 URI:指定目标对象 URI。
附件封装格式
指定是否使用默认或定制封装格式。默认选项指定在首选项面板中选择的附件封装格式。自定义选项允许选择 MIME、DIME、MTOM Always 或 MTOM Optional。详情请参阅使用附件。
SOAP 版本
指定使用 SOAP 1.1 还是 SOAP 1.2。
输出消息编码
这些选项允许指定输出消息的字符编码,它不同于请求消息编码。
启用根据请求使用不同的编码选项,激活编码选项。在编码选项活跃时,您可以从下拉菜单选择自定义,并从下拉菜单选择编码选项。还可以选择默认以使用响应器套件中的编码设置。
“转换选项”选项卡
选项选项卡允许您配置如何处理消息。这些选项仅适用于转换为 XML 的消息格式,并且可用选项随格式的变化而变化。有关指定工具转换选项的详情,请参阅相关主题:
使用现有数据源或快速创建响应的数据源
在数据源中指定响应值是添加大量请求/响应对非常有效的一种方式。
使用现有数据源
如果已经拥有为请求参数和需要的相应参数指定值的数据源,则可以按如下方式使用这些值:
- 添加数据源(请参阅了解 Virtualize 如何使用数据源)。
- 使用合适的请求列配置消息响应器的数据源映射(如Data Source Correlation Tab中所述)。
自动生成响应 XML 的数据源
如果没有这样的数据源,但又想要一个快速方法来指定多个请求/响应集:
- 根据生成用于填充消息元素的数据源模板中所描述的步骤,从消息响应器工具的表单输入视图创建 CSV 文件。数据源将被生成并添加到响应器套件。这个生成的数据源将包含响应的列。消息响应器工具的表单输入视图将自动参数化。
- 为每个应该用于确定响应的请求参数添加新的数据源列(如,使用 Excel、OpenOffice 或相似的工作表应用程序)。可使用通配符。
- 使用添加的新请求列配置消息响应器的数据源映射。详情请参阅Data Source Correlation Tab。
- 向数据源中(如,使用 Excel、OpenOffice 或相似的工作表应用程序)添加新的行,以便为请求参数和需要的相应的响应参数指定值。
基于传入请求编写脚本值
可以根据传入请求编写响应值的脚本。这允许对虚拟资产使用更复杂的逻辑。此外,消息响应器允许通过脚本访问数据源值。访问这些值类似于通过扩展工具对它们进行访问。
若要在消息响应器工具中使用脚本逻辑:
- 在消息响应器工具的 WSDL URL 字段中输入 WSDL。
- 右键点击消息响应器节点,然后选择添加输出。将显示添加输出向导。
- 在添加输出向导中,从左窗格选择传入请求,右窗格选择 XML 数据库,然后点击完成。
- 双击消息响应器节点下的传入请求> XML 数据库节点。XML 数据库配置面板将显示在右侧 GUI 面板中。
- 在右侧 GUI 面板中,添加想要在脚本中访问的值的 XPath。
- 双击消息响应器节点。消息响应器配置面板将显示在右侧 GUI 面板中。
- 在响应选项卡中,请选择脚本化视图。
指定逻辑。以下是访问数据源和数据库值的基本模板:
def customLogic(context): # Retrieve the data source value. "Data Source Name" should be replaced # with the name of your data source and "Column Name" should be the column # that your value is coming from. You can access many columns from the same # data source within this script. For Data Bank values, the table is always # named "Generated Data Source" so you only need to replace "Data Bank Column Name" dataSourceValue = context.getValue("Data Source Name", "Column Name") dataBankValue = context.getValue("Generated Data Source", "Data Bank Column Name") # add custom logic that uses value from data source # The following method tells what data source you will be using in this script. # "Data Source Name" should be replaced with the name of your data source def addDataSources(context): return "Data Source Name"
- 从方法组合框中选择合适的方法。您选择的方法应该是您的入口点。在上述示例中,方法是 customLogic()。
向消息响应器添加附件处理程序
如果需要,可以向消息响应器添加附件处理程序,以管理接收到的所有 MIME 附件。向消息响应器添加附件处理程序:
- 选择消息响应器节点并点击添加响应器或输出按钮。将显示添加输出向导。
- 在添加输出向导中,从左窗格选择传入附件,右窗格选择附件处理程序,然后点击完成。
- 双击附件处理程序节点,在工具配置面板汇总对工具进行配置。
- (可选项)选消息响应器节点下的附件处理程序节点,然后点击添加响应器或输出按钮。将显示添加输出向导,您可以从中添加一个写入文件工具,将附件作为二进制文件输出。
将消息转发给另一端点
可以将消息转发工具附加到消息响应器工具上,以便将消息转发给另一个端点(例如,实际资源)。从端点返回的响应将用作消息响应器返回的响应。
详情请参阅消息转发。
更新虚拟数据库值
SQL 响应器操作工具允许您使用消息响应器更新由 .CSV 驱动的 SQL 响应器表示虚拟数据库中的值。
详情请参阅SQL 响应程序操作。
将工具链接到响应器传入请求或传出响应
可以按照以下的操作将工具链接到消息响应器的传入请求或传出响应:
- 右键点击要将此工具添加到其中的虚拟资产浏览器节点。
- 选择添加输出。
- 在左侧选择需要的输出类型,右侧选择需要的工具。
有效负载转换为 XML 选项
如果正在使用自定义响应器或 EDI/CSV 定长响应器,您可以选择一个附加工具,将有效负载转换为 XML(传入请求)或将有效负载建模为 XML(传出响应)。这是标准有效负载选项的补充,它以其本机格式向有效负载添加工具。
执行顺序
链接工具将按照以下顺序执行:
- 传入请求
- 传输头
- 有效负载
- 有效负载转换为 XML
- 附件
- 传出响应
- 传输头
- 有效负载建模为 XML
- 有效负载
- 两者 > 通讯报文对象
- 转发 > 通讯报文
示例
例如,您可能想要链接工具来实现以下目的:
目的... | 操作.... |
---|---|
响应器触发数据库更新操作 例如:将行更新/远程/添加到关系数据库或运行一个 SELECT 查询请求 | 将 DB 工具链接到消息响应器的传入请求。 您还可以将 XML 数据库链接到 DB 工具的 XML 输出,并将这些数据库值引用到响应器输出中,以便使用从关系数据库中获得的值填充响应。 |
数据库数据手动构造响应消息 例如:遍历返回的记录以生成所需的 XML 响应格式 | 将 DB 工具链接到消息响应器的传出响应中,并在其上附加 XML 转换器、XSTL 工具或扩展工具。这些工具的输出将代替消息响应器编辑器的响应选项卡中配置的内容。这为手动构造消息提供了灵活性。 如果只想从数据库使用某个 select 值,则将 DB 工具链接到传入请求,如上所述。 |
响应器调用另一个服务 | 将 SOAP 客户端或消息传送客户端链接到消息响应器的传入请求。不支持将 SOAP 客户端或消息传送客户端链接到消息响应器的传出响应。 |
响应器调用另一个服务并使用它的一些输出来填充响应参数 | 将 SOAP/消息传送客户端链接到消息响应器的传入请求,并将数据库附加到客户端的响应中。这些数据库值可在消息响应器表单输入或表单 XML 视图中引用,以构造动态的响应消息。 如果您需要使用从响应器接收到的请求中所提取到的参数调用该服务,则将 XML 数据库链接到响应器的传入请求中,然后将 SOAP/消息传送客户端链接到响应器的传入请求,并使用您从请求中提取到的数据库值参数化其请求。注意,此处的顺序很重要:需要在客户端前建立数据库,以便客户端可以使用其值。 |
MQ 字符集处理
Virtualize 将输出(响应)MQ 消息 characterSet 字段设置为与传入(请求)MQ 消息具有相同的值。
在发送带有字符数据(如 XML、CSV、定长或纯文本,即“格式”)响应时,MQ 头类型必须设置为 MQFMT_STRING 常量的值,即“MQSTR”。此格式头应该在消息响应器的传输消息头选项卡中配置(在 MQ 头表中,添加一个 format
设置为 MQSTR
的条目)。
该响应消息将根据 MQ“characterSet”头字段进行编码。 默认情况下,Virtualize 自动将输出(响应)MQ 消息上的 characterSet 字段设置为与传入(请求)MQ 消息具有相同的值。然而,也可以通过在消息响应器的传输头选项卡中添加“characterSet”头显式配置该字符集。
该值可以是所支持的编码字符集(CCSID)值之一:
- 850 - ASCII
- 819 - ISO standard ASCII
- 37 - American EBCDIC
- 1200 - Unicode
- 1208 - UTF-8