本主题介绍如何在 CTP 中根据 Parasoft 代理捕获的通讯报文创建虚拟资产。有关通过服务定义创建虚拟资产的信息,请参阅根据服务说明创建虚拟资产。章节目录:
概要
您可以在 CTP 的创建虚拟资产界面,根据录制的 HTTP/S、JMS 或 MQ 通讯报文创建参数化虚拟资产。每次通过向导时,CTP 都会创建一个虚拟资产(.pva)文件,其中包含消息响应器,该响应器使用在 Parasoft 数据资源库服务器上创建的资源库中的值自动参数化。然后,可以独立于虚拟资产操作数据值。
虚拟资产创建功能旨在处理 JSON 或 XML 格式的消息。要使用其他消息格式(如 EDI、纯文本等)通过通讯报文文件创建虚拟资产,请参阅 Virtualize 桌面端文档中的从通讯报文中创建参数化的消息响应器部分。
前提条件
从通讯报文中创建虚拟资产需要:
- 一个受支持的通讯报文文件,存储在要创建虚拟资产的 Virtualize 服务器上的 recorded_traffic 文件夹下。可接受格式包括:
- 日志是由 Virtualize 消息代理或录制代理产生的(详情请参阅配置消息代理)。
- 使用网络嗅探工具在网络级别捕获的消息跟踪或日志。
- 通过让应用程序录制其通讯报文获得的 HTTP 日志。
- Parasoft 数据资源库服务器运行并连接到 CTP(详情请参阅测试数据设置)。
注意
消息内容必须格式正确(例如,如果是 XML,则必须格式正确);否则,从通讯报文中自动创建消息响应器可能会失败。SOAP 消息必须只有一个顶层 XML 元素。
不支持混合类型 JSON 数组的参数化。如果 JSON 数组不是混合类型,那么 CTP 将假设数组中的所有元素都与第一个元素的类型相同。
创建虚拟资产
若要从通讯报文中创建虚拟资产,请完成以下内容:
- 在左窗格中,选择要添加新虚拟资产的服务器或文件夹。
- 从页面级操作菜单选择创建虚拟资产。
- (可选)修改新建虚拟资产的名称。
- 设置为通过通讯报文创建。
- (可选)如果要应用保存在模板文件中的设置,请从下拉菜单中选择模板文件。CTP 会检查 Virtualize 服务器上 traffic_templates 文件夹中的模板文件。如果没有可用的模板文件,该选项将会灰显。如果应用模板,则将从设置中预先填充后续向导页面中的设置。可以根据需求在不影响模板的情况下修改设置。还可以在新模板中捕获修改后的设置。
- 在资源库服务器下,选择要存储相关数据的数据资源库服务器。
- 在资源库名称下,选择或输入要存储相关数据的资源库的名称,然后点击下一步。
- 在下一向导页面,检查推荐的分组策略,根据需要调整,然后点击下一步。有关可用分组策略的详细信息,请参阅了解分组策略。以下为相关选项一览:
- HTTP 方法:确定是否处理该消息。
- URL 路径:确定是否处理该消息。
- URL 参数:确定是否处理该消息。
- 请求体:Xpath 用于确定是否处理该消息。
- 在下面的向导页面中,检查消息分组的结果。
- 处理的请求/响应对的总数以及无效对的数量显示在顶部。
- 显示的列类型取决于应用的分组策略。
- 每个表行表示定义一个组的标准。将为每个表行生成一个组。将为每个组生成一个响应器。
如果希望修改自动配置的请求关联和/或指定关联的 WSDL/模式,请展开相关的表行,然后配置关联和/或 WSDL/模式。有关如何配置关联的详情,请参阅自定义数据源关联。
为什么指定 WSDL/模式?
指定 WSDL 或模式可以确保数据定义是根据 WSDL/模式定制的,而不是根据通讯报文推断的。此外,当您 Virtualize 桌面端中使用这个虚拟资产时,还可以获得更丰富的编辑功能和变更指导助手功能。
如果要保存在此向导中使用的设置,请勾选导出可重复使用的模板并指明所需的文件名。默认情况下,通讯报文将被记录在当前服务器的 recorded_traffic 文件夹中名为 %n_%d_%t.traffictemplate 的文件中(如果不存在,则会创建)。指定文件名称时,可以使用类似 %d(当前日期)、%t(当前时间)、%n(名称)和 %u(基于时间的唯一 id)的变量。
点击创建资产。
将创建和配置以下项目:
- 带有参数化元素以及预先配置的响应器关联和数据源关联的消息响应器。
- (对于新数据资源库)具有适用数据集和记录类型的新数据资源库。每个通过分析通讯报文确定的消息“组”将添加一个数据集。
- (对于现有数据资源库)将向现有资源库添加新的数据集和记录类型。
- 将为每个添加的数据集添加资源库数据源,并将消息响应器配置为使用该数据源。
视频教程:通过录制的通讯报文创建虚拟资产
在本教程中,学习如何通过录制的通讯报文创建虚拟资产。
了解分组策略
当从通讯报文创建虚拟资产时,关联的 Virtualize 服务器组按操作/类型将请求/响应对分组。分组方法受 a) Virtualize 对给定通讯报文的分析,以及 b) 选择应用的分组条件影响。系统自动选择推荐的分组策略;这些推荐项可以根据需要进行调整和覆盖。
Virtualize 采用分两个阶段分析通讯报文的方法:首先,它会建议应启用哪些分组策略,然后根据所选的策略将消息分组。创建 PVA 时,将为每个分组生成一个响应器。
根据以下启发式方法选择推荐的分组策略:
- 在以下情况下,将选择基于请求体分组:
- SOAP 通讯报文
- 非 XML 消息格式
- 非 HTTP 通讯报文
- 在其他情况下,将选择基于 HTTP 方法和 URL 路径分组,不过仅在所提供通讯报文中的方法发生变化时才会选择 HTTP 方法。
分组时,Virtualize 会:
- 偏向特定而非一般。Virtualize 生成尽可能特定的表达式,仅匹配该组中的所有消息(不匹配其他组中的消息)。这确保生成的响应器正确地关联到相同的通讯报文。
- 遵循分组顺序(HTTP 方法、URL 路径、URL 参数,然后是请求体内容)。例如,如果 URL 路径足以区分不同的组,Virtualize 就不会为这些分组条件的每个步骤创建请求体关联等。
可采用以下分组策略:
HTTP 方法
根据 HTTP 方法(POST、GET、PUT 等)拆分生成的消息响应器。启用此策略后,每个唯一的 HTTP 方法都会生成一个消息响应器。
例如,如果通讯报文包含 10 条 POST 消息和 15 条 GET 消息(无论顺序如何),Virtualize 将在生成的 PVA 中创建 2 个响应器:一个用于 POST 消息,一个用于 GET 消息(假设在组中进一步的分裂中没有触发其他分组策略)。
由此产生的分组可以自定义,这样一个分组就可以捕获多个 HTTP 方法的消息。例如,如果在一个组中同时启用了 POST 和 PUT,那么使用 POST 方法的消息和使用 PUT 方法的消息将与该组匹配并分配给该组。换句话说,基于该组生成的响应器将与 POST 和 PUT 消息关联(它将接受其中任何一条消息)。
URL 路径
根据 URL 路径的唯一性拆分生成的消息响应器。每个唯一的 HTTP URL 路径都会生成一个消息响应器。按 HTTP URL 路径分组的配置本质上定义了这种唯一性。
当基于此策略首次生成分组时,将分析路径以生成一组最能描述消息类型的路径表达式。这种描述使用了一种本质上主观的路径分析算法。其目的在于考虑 REST 服务中最常见的模式,但是可能需要调整生成的路径条件以获得最佳结果。
例如,如果通讯报文包含以下 HTTP URL 路径(为了简洁起见,省略了 HTTP 方法、URL 参数和其他因素)
/service/order/v1/1/summary
/service/order/v1/2/summary
/service/order/v1/2/summary
/service/customer/v1/a/contact
/service/customer/v1/b/contact
/Foo
/Foo
Virtualize 将在生成的 PVA 中创建三个响应器:
- 响应器 1:用于汇总路径(3 条消息)
- 响应器 2:用于联系路径(2 条消息)
- 响应器 3:用于 Foo 路径(2 条消息)
这些响应器将使用 Ant 样式的通配符生成,其中 * 匹配零个或多个字符,** 匹配零个或多个目录。
配置基于路径的数据源关联
在创建新 PVA 时,Virtualize 会配置 URL 路径段索引,这样每个组(响应器)就可以用不同的 URL 路径值响应相同的请求。它通过提供段索引来配置 URL 路径参数。例如,给定以下 URL
/rest/api/2/version/1234/relatedIssueCounts
/rest/api/2/version/4568/relatedIssueCounts
/rest/api/2/version/4567/relatedIssueCounts
Virtualize 将指定要用数据源参数化的第五个路径段(带有 4 位数字的段)。然后,可以对每个 ID 的响应数据进行数据驱动,而不需要编辑 PVA。
URL 参数
根据 HTTP URL 参数的存在拆分生成的消息响应器。每组一个或多个 URL 参数都会生成一个消息响应器。
例如,如果通讯报文包含以下 URL 参数
?oid=1&category=women
?oid=2&category=women
?oid=1&category=babies
?ssn=1234567890&state=CA&category=silver
?ssn=1234567891&state=CA&category=gold
Virtualize 将根据 oid、ssn 和 state 参数的存在在生成的 PVA 中分割响应器,如下所示(每个响应器具有以下响应器关联条件)
- 响应器 1:存在 URL 参数 oid(3 条消息)
- 响应器 2:存在 URL 参数 ssn 和 state(2 条消息)
请求体
根据对请求内容进行评估的 XPath 表达式列表拆分生成的响应器。每个 Xpath 表达式表示一个组和 XML 消息关联条件。
启用此策略时,SOAP 消息(默认情况下)根据主体下的第一个元素名称分组。对于非 SOAP XML 内容,消息根据根元素名称进行分组。
注意,当使用自定义消息格式(或内置的非 XML 格式)时,XPath 表达式基于请求的转换 XML 格式。
自定义数据源关联性
响应器关联性(如上所述)决定消息响应器工具接受和处理哪些消息。将发送到虚拟资产 URL 的不同消息路由到基于此处设置的特定消息响应器工具(每一个都处理不同的操作)。例如,其中一个消息响应器工具可能响应客户注册消息,另一个可能响应支付消息,而还有一个可能作为默认的“catch all”函数,当其他选项都不匹配时使用该函数。
在处理自动配置的响应器关联之后,将传入消息中的值(按文字匹配或与表达式匹配)与数据源中的值进行比较,响应器使用匹配的行数据来创建响应消息。如果没有找到匹配指定传入消息值的数据源行,则 Virtualize(使用默认的故障转移设置)将继续使用匹配的响应器关联为响应器搜索响应器套件。
Virtualize 自动填充以下数据源关联(如果适用),并允许自定义初始关联:
- 请求体关联性
- 请求 URL 路径关联
- 请求 URL 参数关联
示例
对传入消息中 loanAmount 值和 ApprovalLists 数据源中 Amount 列之间关联性的配置如下:
对于每个传入请求,loanAmount 将匹配到 Amount 列中的一行。然后,将使用来自同一行的其他列的值对响应进行参数化。
如果没有指定模板,页面的初始状态将显示从当前通讯报文文件自动生成的数据源关联。
如果指定了模板,页面的初始状态将显示模板中定义的数据源关联。在这种情况下,数据源关联不会自动从当前通讯报文文件生成。
禁用数据源关联
如果希望处理消息中的所有内容,请勾选禁用数据源关联选项禁用数据源关联。
若要自定义自动配置的数据源关联:
- 清除自动配置框。
- 展开要配置关联的响应器所在行。
- 使用可用控件配置关联。
- 可以使用 XPath 构建器配置请求体关联,如指定 XPath 中所述,也可以在表中输入值
- URL 参数和 URL 路径关联可以通过向适用的表添加行来配置。
- 在配置关联性时,请注意,您可以输入数据源列的名称,或者从与此工具关联的数据源中可用列的列表中进行选择(在配置区域顶部的数据源列中进行选择)。
请求体关联性
Virtualize 将为每个操作/组生成一个基于“name”的 XPath;这将用于设置该操作的响应器关联性。例如,如果 SOAP 主体下的元素名是“SubmitOrder”,那么设置到响应器相关部分的 Xpath 表达式将类似于 local-name(/*/*[local-name(.)="Body"]/*)="SubmitOrder"。
注意,当消息不是 XML 时,XPath 和参数选项将应用于请求消息的 XML 转换版本。
对于属于同一操作的每组消息,将相互比较请求,以确定不同请求之间的参数。Virtualize 的通讯报文自动配置将自动分析请求元素中的差异,然后使用该分析的结果为该操作/组中可用的响应生成 Xpath 表达式。目标是为每个不同的请求元素自动生成响应。如果通讯报文是 SOAP 消息封套,那么只要消息共享相同的操作元素(这是 SOAP 主体下的第一个元素),就允许存在结构差异。如果通讯报文是通用 XML,那么只要消息具有相同的根节点,就允许存在结构差异。
如果希望覆盖向导页面中显示的初始配置,请使用可用控件指定要使用的 Xpath 和列名。有关使用 XPath 选择器的详情,请参阅指定 XPath。
请求 URL 参数关联
对于请求 URL 参数,如果属于消息组的调用中的 URL 参数有任何差异(例如不同数量的参数、不同的参数(名称)或不同的参数值),则 Virtualize 的自动配置将根据这些差异自动配置关联性。
例如,假设特定消息组的调用中有以下参数:
countryCode=US&brandCode=HG
countryCode=Uk&brandCode=HG&channelCode=3
countryCode=US
countryCode=UK
brandCode=HG
根据参数的不同,Virtualize 将自动为这个消息组配置 3 个数据源关联行:countryCode、brandCode 和 channelCode。
如果希望覆盖向导页面中显示的初始配置,请使用可用控件指定要使用的参数和列名。例如,如果希望为 productCode 参数配置数据源关联性,可以使用:
请求 URL 路径关联
对于 URL 路径,如果属于某个组的调用中的 URL 路径存在任何差异,那么 Virtualize 通过通讯报文自动配置的功能将根据这些差异配置关联性。
例如,假设特定消息组的调用中有以下路径:
/customer/123/account/1920384
/customer/203/account/4922434
/customer/302/account/7349463
根据段 1 和段 3 中的差异(使用基于 0 的索引),Virtualize 将为这个消息组添加 2 个数据源关联行:一个用于路径索引 1,一个用于路径索引 3。
如果希望覆盖向导页面中显示的初始配置,请使用可用控件指定要用于关联的路径段。路径段可以与一个或多个数据源列名匹配,然后使用各种数据源列参数化。在打开的对话框中,指定要使用的路径段(可以点击相关的路径段或输入所需的路径索引),然后为数据源列指定一个名称。
例如,如果想使用路径索引 2 并将其匹配到账户数据源列,那么将按照以下方式配置关联性: