本主题解释如何配置不同的消息响应程序,发送与传入的请求消息相关的响应消息。消息响应程序可以从流量文件创建,该文件捕获了实际行为,或从 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 选项来配置的。
如果你想更改消息响应程序使用的消息格式(例如,如果你希望将固定长度更改为纯文本),则只需修改所选定的格式。
配置选项
基本配置
在工具顶部提供以下基本选项:
- 数据源:指定用于提供工具值要使用的数据源。此菜单仅在数据源被添加到项目时才可用(如 Parameterizing Tools with Data Source Values, Variables, and Extracted Values中所述)。
XML 转换选项
这些选项仅适用于转换为 XML 或从 XML 转换的格式。
- 格式:选择用于响应负载的格式。
- 在表单输入或表单 XML 模式中,使用 XML 而不是 [native format] 进行响应:如果禁用(默认),Virtualize 会在发送消息之前自动将 XML 模型转换为本机格式。 换句话说,Virtualize 会向服务器发送本机格式,这就是你在流量视图器中所看到的。
- 如果启用该选项,Virtualize 将发送你在 UI 中为响应配置的消息。 你可以通过使用文字或脚本视图以本机格式创建消息负载。 如果禁用该选项并在 UI(例如,使用表单输入视图)中创建 XML,则 Virtualize 将发送未更改的 XML。对于当前支持的格式,通常不希望这样做,但是 Virtualize 使此选项可用。
使用表单输入对请求有效负载建模的模式
这些选项仅适用于转换为 XML 或从 XML 转换的格式。
消息类型:
- 消息类型:指定要使用的消息类型。这允许 Virtualize 填充表单输入视图。
- 模式 URL:说明可访问该服务的模式 URL。可以输入值或单击 Browse 按钮。如果没有模式,则可以将该字段保留为空。
- 对模式的约束:确定某些工具参数包含的值是否来自模式而非手动输入。 如果启用该选项,则禁用掉某些参数并从模式 中获取它们的值。如果禁用该选项,则 Refresh Schema 按钮也将被禁用。
定义选项卡
此选项卡专门设计用于 JSON、SOAP 和纯 XML 消息响应程序。
在 Definition 选项卡中指定选项允许 Virtualize 使用让你更易指定响应消息的项填充 Response 选项卡。你可以指定与 WSDL 或 schema 相关的以下设置,定义预期的请求和输出响应:
- 服务定义:指定响应程序是否与服务定义(RAML、OpenAPI/Swagger、WSDL 或 Schema)相关联。对于纯 XML,请选择 None。当指定了服务定义,并且该工具受到了 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。你可以输入值或单击 Browse 按钮。如果没有 WSDL,则可以将该字段保留为空。
- Constrain to WSDL 确定某些工具参数包含的值是否来自 Schema 而非手动输入。 如果启用该选项,则禁用掉某些参数(例如,路由器端点、SOAP 操作、SOAP 主体和头参数)并从 WSDL 中获取它们的值。如果禁用该选项,则 Refresh WSDL 按钮也将被禁用。
- WSDL 文档:(如果可用,自动完成):说明给定 WSDL URI 的服务。
- 针对 Schema 服务定义模式
- Schema URL:说明可访问该服务的 Schema URL。你可以输入值或单击 Browse 按钮。如果没有 schema,则可以将该字段保留为空。
- 对 Schema 的约束:确定某些工具参数包含的值是否来自 Schema 而非手动输入。 如果启用该选项,则禁用掉某些参数并从 schema 中获取它们的值。如果禁用该选项,则 Refresh Schema 按钮也将被禁用。
- XML 消息类型:确定响应选项卡的表单输入控件是针对 SOAP 消息还是纯 XML 消息。如果选择纯 XML,则表单输入模式将直接表示消息。如果选择 SOAP,则表单输入中配置的 XML 将用 SOAP 信封包装起来,并且视图将提供 SOAP 头部分,允许在需要时配置 SOAP 头。
响应选项卡
Response 选项卡允许你配置希望响应程序在接收相关请求时要传送的响应值。
该选项是否可用取决于视图菜单中选择的是什么选项。
表单输入、表单 XML 、文字、多响应、脚本化和表单 JSON 视图
这些视图在多个 Parasoft 工具中是相似的;在以下区域对它们进行了说明:
注意
- 基于表单的视图允许你从数据源中构建响应和参数化值。
- 如果在表单输入或表单 JSON 视图中启用操作选择器,则可以使用它为响应选择操作。当选择一个操作时,表单输入视图和表单 JSON 视图用合适的值和 UI 控件(例如,布尔值的单选按钮、数字和整数的不同控件等)进行填充。
- 在表单输入模式中,操作选择器将显示关联服务定义 1)将响应定义为 XML 2)指定 XML 模式的所有操作。
- 在表单 JSON 模式中,操作选择器将显示关联服务定义 1)将响应定义为 JSON 2)指定 JSON 模式的所有操作。
- 在多响应模式中,每个可能的响应都与传入请求、静态响应消息和性能(时间)选项有自己的关联。
传输头选项卡
Transport Header 选项卡允许指定将与响应消息一起返回的 HTTP、JMS 或 MQ 消息头。你可以使用表单视图或文字视图。
对于 HTTP,这些头文件值将被附加到响应中生成的标准 HTTP 头中。对于 JMS,它们将作为 String 消息属性被设置到输出响应消息中。或者,如果所提供的头名称匹配其中一个现有消息属性名称,则它将被重写(例如:JMSCorrelationID)。对于 WebSphere MQ,还有一个 RFH2 头的部分也允许配置这些。
对于 JMS,你可以定义任何要设置到 javax.jms.Message 对象的其他属性值,然后将其发送到队列或发布到主题。例如,你可以定义 JMSPriority、JMSDeliveryMode、JMSExpiration 以及如下的其他属性:
响应程序关联选项卡
Responder Correlation 选项卡允许你指定此消息响应程序工具接收并处理哪些消息。将发送到虚拟资产 URL 的不同消息路由到基于此处设置的特定的消息响应程序工具(每一个都处理不同的操作)。例如,其中一个消息响应程序工具可能响应到客户注册消息,另一个可能响应到支付消息,而还有一个可能作为默认的“catch all”函数,当其他选项都不匹配时使用该函数。
你可以通过在以下 Responder Correlation 选项卡区域指定消息响应程序接收的消息:
- 传输:允许你在消息中指定 HTTP 头、JSM 消息属性或 MQ 消息字段,这些字段将确定消息是否由此特定响应程序处理。有关更多详情,请查阅 Transport Correlation 。
- 请求体:允许你在消息中指定 XPath,这将确定是否处理该消息。有关更多详情,请查阅 Request Body Correlation 。
- URL 参数(用于 RESTful 服务):允许你指定 URL 参数,这将确定是否处理该消息。你可以配置相关性以匹配包含特定参数(无论它们被设置为什么)的所有信息,或者,仅匹配设置为特定值的特定参数的消息)。URL 参数可以是重复的(你可以拥有设置为不同值的相同参数)。有关更多详情,请查阅 URL Parameter Correlation 。
- URL 路径:允许你指定 URL 路径,这将确定是否处理该消息。有关更多详情,请查阅 URL Path Correlation 。
- HTTP 方法:允许你指定 URL 方法,这将确定是否处理该消息。有关更多详情,请查阅 HTTP Method Correlation 。
- 自定义:允许你指定自定义响应程序关联性,其基于使用 Java 或脚本语言编写的自定义方法的返回值。有关更多详情,请查阅 Custom Correlation 。
- ISO 8583 关联性:允许你为 ISO 8583 消息指定关联性。有关更多详情,请查阅 使用 ISO 8583 。这些选项专门设计用于 SOAP、纯 XML 和文字消息响应程序。
你可以配置关联性的其中一个类型、多类型,或者配置为没有关联性。如果配置为没有关联系,则将处理消息中的所有内容。
传输关联性
若要配置传输关联性:
- 选择 Enable correlation 多选框。
- 单击 Add 按钮。将显示一个新的条目行。
- 输入 Header Name。
- 请进行下列其中一项操作:
- 如果想匹配此头文件设置特定值的消息:在 Value of Header下输入其值。
- 如果想匹配包含此头文件(不管值被设置为什么)的所有消息:选择 Correlate whenever the named header is present regardless of value。
请求体关联性
若要配置请求体关联性:
- 选择 Enable correlation 多选框。
- 点击 编辑 按钮。将显示一个编辑 XPath 函数对话框。
- 从 Element 树选择元素,从 Function 下拉菜单选择函数,然后单击 OK。
- 请进行下列其中一项操作:
- 如果显示传入请求消息的树表示形式,则选从树中选择元素并从 Function 下拉菜单中选择函数。
- 如果没有可用的请求树表示形式,或者如果树形式没有完全显示提取和评估感兴趣的元素或属性,则手动提供一个 XPath 表达式。为了实现关联性,Virtualize 支持的 XPath 表达式基于 W3C 的标准 Xpath 1.0 标准。
- 如果希望制定任何额外的 XPath,则以相同的方式添加它们。
URL 参数关联
URL 参数关联应用于将通过 HTTP/HTTPs 访问的虚拟资产。
若要配置 URL 参数关联性:
- 选择 Enable correlation 多选框。
- 如果希望关联性仅(不多不少)应用请求拥有此表中指定的 exact URL 参数的时候,则勾住 Correlate only when the list of parameters matches exactly。否则,任何包含列出的参数和其他参数的请求都将相互关联。无论该选项是启用的还是禁用的,缺乏其中一条指定参数的消息都将不匹配。
- 单击 Add 按钮。将显示一个新的条目行。
- 输入 参数名称。
- 请进行下列其中一项操作:
- 如果想匹配设置此参数的特定值的消息:在 Value下输入其值。
- 如果想匹配包含此参数(不管它被设置为什么值)的所有消息:选择 Correlate whenever the parameter name is present regardlessof value。
- 如果想匹配设置此参数的特定值的消息:在 Value下输入其值。
例如,假定资产已在路径 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 路径关联性:
- 选择 Enable correlation 多选框。
- 指定要用于关联的路径。
例如,假定资产已在路径 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 方法关联性:
- 选择 Enable correlation 多选框。
- 指定要用于关联的 HTTP 方法。
例如,如果选择 GET、POST 和 PUT,则响应程序将匹配具有方法 GET、POST 或 PUT 的 HTTP 请求。 具有 CONNECT、DELETE、HEAD 等的 HTTP 请求将不匹配。
自定义关联性
自定义响应程序关联性基于使用 Java 或脚本语言编写的自定义方法的返回值。
注意:
- 方法必须携带 0 或 1 个参数。
- 可选参数的类型是
com.parasoft.api.ScriptingContext
。 - 方法可以使用 ScriptingContext 对象访问传输头文件、URL 参数和传入消息的消息内容。
更多信息,可通过 Parasoft> Help> 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)
数据源关联性选项卡
Data Source Correlation 选项卡允许你指定要在虚拟资产响应中使用的数据源行值。此处基于设置,Virtualize 在数据源中执行数据查询以找到数据行。然后,将此行用来使用来自数据源的参数化值填充响应(如响应选项卡中所定义)。
例如,以下对介于传入消息中的 loanAmount 值和 ApprovalLists 数据源中的 Amount 列之间进行关联配置:
对于每个传入请求,loanAmount 将匹配到 Amount 列中的一行。然后,将使用来自同一行的其他列的值对响应进行参数化。
响应选项卡中有了以下设置,将使用决策(Decision)数据源列中对应的值对认可值进行参数化。
并且,将使用消息(Message)数据源列中对应的值对消息值进行参数化。
优点
使用多响应配置虚拟资产的一个方法是手动配置消息响应程序工具的 Multiple Responses 模式,根据传入的消息发送不同的响应消息。
使用所需消息动态响应配置虚拟资产的另一个方法是使用数据源。 你可以轻松地填充数据源表(Excel 等),其中每行包含想要虚拟资产响应的传入消息(通常只需叶节点值)中的值,然后,另一列指定当满足指定条件时,你希望虚拟资产如何响应(有关更多详情,请查阅 Using Existing Data Sources or Rapidly Creating Data Sources for Responses )。在那之后,你可以配置请求响应消息值之间的映射以及数据源中的列。
这允许在一个易于编辑的表(数据源)中轻松配置请求/响应用例,它允许在那里对它们进行管理,以便随着越来越多的消息进一步扩展,同时它还为响应消息提供了更大地灵活性(因为表单输入允许你固定一些值,参数化一些值,自动化一些值或脚本化一些值。)
这个数据源关联非常灵活。你可以配置虚拟资产,以超出精确的匹配/关联的规则和逻辑响应传入的请求值。例如,你可以配置虚拟资产对信用卡号的最后 4 位数、小于或大于给定值的数值或其他模式和表达式进行计算。
值匹配支持通配符 *
和 ?。
*
匹配 0 或多个字符; ?
匹配单个字符。
例如,如果想要命名为“title keyword”的传入值匹配来只要包含单词 Linux 的某一行,则可以使用数据源值 "[like *Linux]"
配置步骤
若要参数化来自数据源的虚拟资产响应:
- 确保在 Virtualize 中配置了数据源,并可用于消息响应程序。
- 在 Data Source Correlation 选项卡中合适的地方单击 添加 按钮,提供 XPath、URL 参数、URL 路径和/或标准表达式,然后选择合适的列名。在执行部署的虚拟资产时,Virtualize 将从请求中提取特定值,然后在指定列中搜索与与提取值对应的匹配项。如果找到匹配项,将使用相应数据源行中的数据填充响应
- 如果多次指定相同的列名(例如,在 URL 参数和 URL 路径中),则将会设置一个值;前面的值将被重写。
- 如果提供 WSDL,则可使用 编辑 按钮生成 XPath。该对话框实时验证 XPath 表达式和列名。
- 如果你选择自定义它们而不是使用可视的 编辑 选项,则 Virtualize 在键入或编写 XPath 表达式的时候对 XPath 语法进行验证。
- 可以在数据源列中使用通配符。
- 表达式(例如,
[> "55"], [like "alpha?beta*"], [like "*b*" 或类似 "*a*" 和类似 "*z*"]
) can be used as described in Criteria Expressions for Matching Values with the Message Responder. - 有关可用配置选项的更多详情,请查阅以下 Data Source Correlation Options 。
- 通过引用同一数据源中的其他数据源列(例如,表单输入、表单 XML 等),对消息响应程序的响应区域进行参数化。你可以向列名映射中添加多个 XPath 或 URL 参数。
数据源关联性选项卡
数据源关联性可使用以下配置选项。
容错选项
在启用数据源关联性时,Virtualize 使用此选项卡中指定的标准,尝试将传入消息中的值与数据源值进行匹配。如果没有匹配特定传入消息值的数据源,则将其视为 数据源关联故障。
在启用 Continue searching for a matching responder if data source correlation fails (默认设置)并且此响应程序的数据源关联失败时,Virutalize 将使用匹配的响应程序关联继续为响应程序搜索响应程序套件。只有在下列情况下才会报错:
- 没有响应程序满足响应程序关联性标准,或者
- 响应程序套件中的另一个响应程序匹配响应程序相关性,但其数据源相关性出现故障,且其数据源相关性容错选项被禁用。
如果禁用 Continue searching for a matching responder if data source correlation fails ,并且此响应程序的数据源关联出现故障,则将立即报告一个错误,并且 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 路径和 ISO 8583 消息的数据源关联来说,情况也是如此:若要匹配请求中不存在的字段,你可以使用空字符串作为数据源行中相对应的字段的值。
URL 参数数据关联的工作方式有些不同(以便处理参数值为空字符串的情况和参数完全不存在的情况):
- 若要匹配 URL 参数存在而其值为空字符串的情况,则使用空字符串作为数据源行中相对应字段的值。
- 若要匹配请求 URL 中的参数不存在的情况,则右键单击数据源行中相对应的字段(在数据资源库编辑器中)并选择 Set field to exclude。
请求 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 |
请求头
为要提取并匹配的请求值提供头信息,然后将其一一映射到数据源列中。提取到的值将与映射的数据源列匹配。
请求 ISO 8583 消息
此区域仅适用于 ISO 8583 消息匹配的值。为要提取并匹配的值提供字段 ID,然后将其一一映射到数据源列中。只有包含这些 ISO 8583 字段并拥有匹配值的消息才将进行关联。
这些选项专门设计用于 SOAP、纯 XML 和文字消息响应程序。
详情处理
在消息响应程序活跃时,传入消息通过这些标准进行评估。然后根据相应的数据源值匹配这些值(每个都有其各自的列)来找到匹配该值的行。
如果响应程序的数据源关联列表中指定的所有值都匹配在该行中,则数据源行被视为是匹配的。
如果找到匹配的行,则该行将用于消息响应程序的响应信息中的任何参数化值。通过这种方式,虚拟资产可以根据传入消息中的值响应所需的消息值。
有关更多详情,请查阅 Criteria Expressions for Matching Values with the Message Responder。
附件选项卡
Attachment 选项卡允许向响应消息发送二进制或 XML HTTP 附件。
在使用 MTOM 时,不需要向 Attachment 选项卡添加任何内容。MTOM 选项将造成其使用优化(未编码)的 SOAP 信封 xsd:base64Binary 内容自动创建 MIME_boundaries。Attachment 选项卡仅适用于 MIME/DIME 选项。
若要发送附件,请执行 Attachment 选项卡中的以下操作:
- 单击 Add 按钮。将在附件表中显示一个 XML Attachment 条目。
- 双击 XML Attachment 条目。将显示一个 Edit Attachments 对话框。
- 在编辑附件对话框中,从 Mode 下拉菜单中选择 XML 或 Binary 。
- 配置附件
- XML 模式有以下选项:
- 查看:从下拉菜单中选择所需视图并相应地进行配置。
- Binary 模式有以下选项:
- Base 64 编码: 启用 Base 64 编码,对二进制值进行编码。
- 数据源列:选择发送来自数据源列的值。
- 文件:选择发送来自文件的值。通过单击 Browse 按钮选择所需的文件。如果要将该文件的路径作为当前配置文件的相对路径来保存,则选择 作为相对路径保存 选项。
- 文本:选择发送文本值。
- 内容类型:指定内容类型。如果想对附件头信息进行添加/更改或删除操作,请单击 Edit Headers 按钮。
- XML 模式有以下选项:
Options 选项卡
Options 选项卡允许你配置如何处理消息。可使用以下选项:
请求模板
用于辅助参数选择的请求 URL 模板
允许你输入 URL,该 URL 是正在测试的应用程序将提供(并且响应器应该模拟)的 URL 的典型代表。如果响应程序是通过参数化流量向导(如 Creating Parameterized Message Responders from Traffic中所述)创建的,则此字段将填充一个 URL,该 URL 来自与此响应程序相对应的流量中的一个请求。
在这里指定的值将用来配置响应程序关联和数据源关联选项卡中的 URL 路径和 URL 参数关联设置。
用于辅助 XPath 创建的请求消息模板
允许指定 XML 格式的模板,该模板将用于在 XPath 参数时自动填充预期的 XML 响应(例如,数据源关联和响应程序关联的消息请求 XPath 对话框中,或多响应 XPath 对话框中)。
- 在从流量日志中创建消息响应程序时,将自动生成请求消息模板。为了实现此目的,将使用流量日志中已识别的最大请求消息。
- 在未从流量日志中创建消息响应程序时,模板将为空。在这种情况下,可以通过树或文字视图(如,复制与你配置的响应消息关联的示例请求消息)手动更改请求消息模板。
- 完整的请求消息模板用来填充消息响应程序中可用的编辑 Xpath 函数对话框中的 Tree/Literal/Element 视图。如果模板作为请求输出附加到消息响应器,那么 XML 数据库和 XML 转换器输出也将使用此模板。
消息切换模式
选择只征求响应或通知。
- Solicit Response 是默认选项。它表示返回的是响应消息体。
- Notification Only 表示仅确认请求消息。对于 HTTP,响应只是一个没有实体内容的 HTTP 头信息。对于 JMS 或 WebSphere MQ,将从请求队列中获取传入的请求消息,但不会将响应消息生成为响应。
返回状态(仅适用于 HTTP)
允许指定如何返回消息。例如,模拟工作或有故障的服务。若要使用默认值 200 OK,则选择 Use Default Return Status 多选框。如果未选择此选项,则可使用以下选项:
- 返回状态:输入自定义返回状态值。如果数据源可用,则可参数化该值。
- 返回消息:输入自定义返回消息。如果数据源可用,则可参数化该值。
请求处理
这些选项允许你确定传入的消息是否在关联被处理前经过了更改(以及如何更改)。
如果要在数据源或多响应相关标准执行该消息之前,链接一个更改请求消息的工具,则选择 Allow incoming request tools to modify the message before applying data source or multiple response correlations 。然而,如果你正在链接一个可能更改请求的工具(但不希望这样的更改影响到传递给数据源的消息和多响应相关标准),则不要选择该选项。在 XML 必须更改为让其适用于相关性(或消息不完全是 XML,并要求虚拟资产发送请求的合适响应给原始调用者之前需要进行一些转换)时,这一点很重要。
如果想在传入消息未成功关联到数据源列的情况下,防止执行链接的请求工具,则选择 Skip incoming request tools if data sources correlations fail 。
XML Conversion 选项还可用于转换为 XML 的消息格式:
Convert incoming request to XML before applying responder correlation 确保在运行关联之前进行 XML 转换。如果启用此选项,关联将基于转换的 XML。
消息建模的影响
启动 Convert incoming request to XML before applying responder correlation 选项,你可以将示例本机格式的流量粘贴到文字选项卡(在请求消息模板以及响应程序关联和数据源关联控件的 XPath 区域中), 并且 Tree/Element 选项卡将以消息格式指定的结构呈现该消息。例如,如果将 JSON 消息粘贴到 JSON 响应程序中的文字(Literal)选项卡,然后打开树(Tree)选项卡,则以表单 JSON 结构对消息进行呈现。
如果想要粘贴与响应不同格式的消息,请确保启用 Convert incoming request to XML using different message format than response 选项,并且指定消息格式。
- Convert incoming request to XML using different message format than response 允许将消息响应程序配置为与不同于配置为响应的格式接收消息。例如,如果想接收 EDI 消息和使用固定长度消息进行响应,则需要创建一个固定长度的消息响应程序,并将其配置作为 EDI 转换传入请求。
性能
允许设置与消息响应程序执行时间关联的以下选项:
- 性能组:如果正在使用性能配置文件,则可以使用该控件设置或更改此响应程序的性能组。有关性能配置文件的更多详情,请查阅 Working with Performance Profiles。
- 判断时间:输入想要消息延迟模拟(如,模拟慢速服务)的时间(以毫秒为单位)。这个时间将被添加到 a)执行时间,即从服务器完成接收请求到响应开始发送请求的时间 b)性能配置文件指定的任何额外时间,如 Working with Performance Profiles中所述。如果数据源可用,则可参数化该值。
风格/使用
这些选项允许你选择消息的正文风格和编码:
- 正文风格:启用 document 或 rpc。
- 使用:启用 encoded 或 literal。
- 编码风格 URI:(如果可用,自动完成)列出用来发送请求的编码风格 URI。
- 目标对象 URI:指定目标对象 URI
附件封装格式
指定是否使用 Default 或 Custom 封装格式。Default 选项指定选择什么作为首选项面板中的附件封装格式。Custom 选项允许选择 MIME、 DIME、 MTOM Always或 MTOM Optional。有关更多详情,请查阅 使用附件。
SOAP 版本
指定使用 SOAP 1.1 还是 SOAP 1.2。
ISO 8583 包装器
允许配置 ISO 8583 的包装器文件。有关更多详情,请查阅 Configure an ISO 8583 Message Packager 。此选项专门设计用于 SOAP 和纯 XML 消息响应程序。
输出消息编码
这些选项允许指定输出消息的字符编码,它不同于请求消息编码。
启用 Use different encoding from request 选项,激活编码选项。在编码选项活跃时,你可以从下拉菜单选择 Custom ,并从下拉菜单选择编码选项。还可以选择 Default 以使用响应程序套件中的编码设置。
转换选项选项卡
Options 选项卡允许你配置如何处理消息。这些选项仅适用于转换为 XML 的消息格式,并且可用选项随格式的变化而变化。有关指定工具转换选项的更多详情,请查阅相关主题:
使用现有数据源或快速创建响应的数据源
在数据源中指定响应值是添加大量请求/响应对非常有效的一种方式。
使用现有数据源
如果已经拥有为请求参数和需要的相应相应参数指定值的数据源,则你可以如下使用这些值:
- 添加数据源(请查阅 了解 Virtualize 如何使用数据源)。
- 使用合适的请求列配置消息响应程序的数据源映射(如 Data Source Correlation Tab中所述)。
自动生成响应 XML 的数据源
如果没有这样的数据源,但又想要一个快速方法来指定多个请求/响应集。
- 根据 生成用于填充消息元素的数据源模板 中所描述的步骤,从消息响应程序工具的表单输入视图创建 CSV 文件。数据源将被生成并添加到响应程序套件。这个生成的数据源将包含响应的列。消息响应程序工具的表单输入视图将自动参数化。
- 为每个应该用于确定响应的请求参数添加新的数据源列(如,使用 Excel、OpenOffice 或相似的工作表应用程序)。可使用通配符。
- 使用添加的新请求列配置消息响应程序的数据源映射。有关更多详情,请查阅 Data Source Correlation Tab 。
- 向数据源中(如,使用 Excel、OpenOffice 或相似的工作表应用程序)添加新的行,以便为请求参数和需要的相应的响应参数指定值。
基于传入请求编写脚本值
可以根据传入请求编写响应值的脚本。这允许对虚拟资产使用更复杂的逻辑。此外,消息响应程序允许通过脚本访问数据源值。访问这些值类似于通过扩展工具对它们进行访问。
若要在消息响应程序工具中使用脚本逻辑:
- 在消息响应程序工具的 WSDL URL 字段中输入 WSDL。
- 右键单击 消息响应程序 节点,然后选择 添加输出。将显示 添加输出 向导。
- 在添加输出向导中,从左窗格选择 传入请求 ,右窗格选择 XML 数据库 ,然后单击 完成。
- 双击 Message Responder 节点下的 Incoming Request> XML Data Bank 节点。XML 数据库配置面板将显示在右侧 GUI 面板中。
- 在右侧 GUI 面板中,添加想要在脚本中访问的值的 XPath。
- 双击 Message Responder 节点。消息响应程序配置面板将显示在右侧 GUI 面板中。
- 在 Response 选项卡中,请选择 Scripted 视图。
指定逻辑。以下是访问数据源和数据库值的基本模板:
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"
- 从 Method 组合框中选择合适的方法。你选择的方法应该是你的入口点。在上述示例中,方法是 customLogic()。
向消息响应程序添加附件处理器
如果需要,可以向消息响应程序添加附件处理器,以管理接收到的所有 MIME 附件。若要向消息响应程序添加附件处理器:
- 选择 Message Responder 节点并单击 添加响应程序或输出 按钮。将显示 添加输出 向导。
- 在添加输出向导中,从左窗格选择 传入附件 ,右窗格选择 附件处理器 ,然后单击 完成。
- 双击 AttachmentHandler 节点,然后在工具配置面板汇总对工具进行配置。
- (可选项)选择 Message Responder 节点下的 Attachment Handler 节点,然后单击 Add Responder or Output 按钮。将显示 Add Output 向导,你可以从中添加一个编写文件工具,将附件作为二进制文件输出。
将消息转发给另一端点
可以将消息转发工具附加到消息响应程序工具上,以便将消息转发给另一个端点(例如,实际资源)。从端点返回的响应将用作消息响应程序返回的响应。
有关更多详情,请查阅 消息转发。
更新虚拟数据库值
SQL 响应程序操作工具允许你使用消息响应程序更新由 .CSV 驱动的 SQL 响应程序表示虚拟数据库中的值。
有关更多详情,请查阅 SQL 响应程序操作。
将工具链接到响应程序传入请求或输出响应
可以按照以下的操作将工具链接到消息响应程序的传入请求或输出响应:
- 右键单击要将此工具添加到其中 Virtual Asset Explorer 节点。
- 选择 Add Output。
- 在左侧选择需要的输出类型,右侧选择需要的工具。
有效负载转换为 XML 选项
如果正在使用自定义响应程序或 EDI/CSV 固定长度响应程序,你可以选择一个附加工具,将有效负载转换为 XML(传入请求)或将有效负载建模为 XML(输出响应)。这是标准有效负载选项的补充,它以其本机格式向有效负载添加工具。
执行顺序
链接工具将按照以下顺序执行:
- 传入请求
- 传输头信息
- 有效负载
- 有效负载转换为 XML
- 附件
- 输出响应
- 传输头信息
- 有效负载建模为 XML
- 有效负载
- Both > Traffic Object
- Forward > Traffic
示例
示例
为实现这一目标... | 要做到这一点... |
---|---|
响应程序触发数据库更新操作 例如:将行更新/远程/添加到关系数据库或运行一个 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”。此格式头信息应该在消息响应程序的 Transport Header 选项卡中配置(在 MQ 头信息表中,添加一个 format
设置为 MQSTR
的条目)。
该响应消息将根据 MQ“characterSet”头字段进行编码。 默认情况下,Virtualize 自动将输出(响应)MQ 消息上的 characterSet 字段设置为与传入(请求)MQ 消息具有相同的值。然而,也可以通过在消息响应程序的 Transport Header 选项卡中添加“characterSet”头信息显式配置该字符集。
该值可以是其中一个所支持的编码字符集(CCSID)值:
- 850 - ASCII
- 819 - ISO standard ASCII
- 37 - American EBCDIC
- 1200 - Unicode
- 1208 - UTF-8