本主题介绍 SOAtest 和 Virtualize 中的 XML 断言器工具。该工具强制确保 XML 消息中数据的正确性。
章节目录:
了解 XML 断言器
该工具通常连接到 SOAP 客户端或消息传送客户端,以便验证服务返回的数据。XML 断言器提供了对复杂消息验证需求的支持,而不需要脚本,并且允许您轻松地在 XML 消息上创建和维护验证断言。
在验证来自服务的结果时,您可能希望应用符合业务需求的特定规则。仅仅验证是否发生了更改可能还不够;您可能还想定义复杂的规则,规定什么是可接受的 XML 消息。
XML 断言器目的在于提供一系列断言,这些断言可以为消息有效性实施更符合逻辑和业务的规则。
这个工具通常是从 XML 消息的创建/更新回归控制对话框中添加的(通过选择创建值断言选项)。有关以这种形式添加 XML 断言器的详情,请参阅对单个响应元素的值进行验证。
它还可通过添加输出向导添加,如添加测试输出中所述。
配置 XML 断言器
XML 断言器主要包含三个选项卡:
- 总结:此选项卡包含一个表,显示已配置的 XML 断言的详细信息。
- 配置:此选项卡用于创建和配置 XML 断言。
- 预期的 XML:指定预期的 XML 响应,创建可以从中选择元素的模板。如果此工具接收一个有效的 XML 消息(比如,该消息来自通讯报文或者在附加的客户端工具中定义),则此面板将自动被填充。或者,可以将示例消息复制到纯文本或树状选项卡中。注意,默认情况下不会保存预期 XML;如果要对它进行保存,请启用保存预期的 XML 选项。
若要配置 XML 断言器:
- 点击 XML 断言器配置选项卡中的添加按钮。
将显示选择断言向导。 - 选择一个断言类型。下面是对可用断言类型的简要总结。
- 值断言:可以使用以下值断言:
- 值断言:强制执行特定元素的值。
- 值出现断言:强制具有给定值的元素出现一定数量(例如,Xpath 选择器和所指定值字符串上的文档必须 n 个匹配项)。
- 数字断言:强制元素的数值。
- 字符串比较断言:执行给定元素的文本内容的值。
- 正则表达式断言:强制元素匹配正则表达式(有关支持的正则表达式语法的更多信息,请点击此处)。
- 表达式断言:执行由元素组成的表达式的值。
- 自定义断言:通过编写自定义逻辑脚本来强制执行元素的值。
- 结构断言:可以使用以下结构断言:
- 出现断言:强制元素出现的次数。
- 有内容断言:强制元素具有文本内容(即,文本长度> 0)。
- 有子断言:强制一个元素有一个或多个子元素。
- 复合断言:可以使用以下复合断言:
- 与断言: 将所有必须成功的多个断言分组。
- 或断言:在至少一个断言必须成功的地方对多个断言进行分组。
- 条件断言:只有在满足条件时才强制执行断言(条件是以前定义的断言的组合)。
- 差异断言:可以使用以下差异断言:
- 数字差异断言:对特定元素的值强制执行数值差异。断言元素的数值与用户指定的基值之间存在用户指定值的差异。例如,为了断言华氏度的值低于冰点 3 度,可以将基本值设置为 32,差值设置为 -3。
- 日期差异断言:对特定元素的值强制执行日期差异。
- 日期时间差异断言:对特定元素的值强制执行日期时间差异。
- 范围断言:可以使用以下差异断言:
- 数字范围断言:强制元素的数值位于数值范围的包含范围内。
- 日期范围断言:对特定元素的值强制使用日期范围
- 日期时间范围断言:对特定元素的值强制设置日期时间范围
- 值断言:可以使用以下值断言:
- 点击下一步按钮。将显示一个树视图。
选择要检查此断言的元素,然后点击完成按钮。注意,您可以在 XML 断言器工具的预期的 XML 选项卡中编辑此树的结构。
您可以通过点击配置选项卡中的添加按钮,添加附加的断言来应用于消息(例如要对 price 元素强制执行的数字断言)。
如果稍后想修改断言引用的元素,请点击配置右下角的修改元素。这将打开一个对话框,允许您图形化或手动编辑给定的元素。您可以点击评估 XPath 按钮,查看对预期 XML 应用 Xpath 表达式的结果。
注意,在将提取的字符串与预期文本进行比较之前,修剪内容选项将删除提取字符串的开始和结束部分的任何空格。例如,如果提取了“bar”(忽略所有示例中的引号;它们被用来显示空格),它会变成“bar”;如果没有启用修剪内容选项,这将匹配“bar”(并且无法匹配“bar”)。
如果您有如下 XML
<foo> bar </foo>
如果“bar”值前后的新行字符无趣,而且主要是格式化问题,那么您可能希望启用此选项,这样在创建提取时就不必考虑 XML 的格式。
参数化 XPath
可以参数化 Xpath 以引用测试或响应器套件变量、环境变量和数据源值。 引用变量的语法为 ${myVariableName}。引用 XML 数据库值和数据源值的语法为:${myColumnName}.
例如,如果 ${XPath Key} 是数据源列名,则可以使用
/*[local-name(.)="bookstore" and namespace-uri(.)=""]/*[local-name(.)="book" 和
namespace-uri(.)=""][child::node()[local-name(.)="title" and text()="${XPath Key}"]]
视频教程
在本视频中,您将学习如何在 XML 响应中为值添加目标断言。
相关教程
以下教程演示如何使用此工具: