本主题涵盖了 Diff 工具,它在 SOAtest 和 Virtualize 中将传入的数据和报告差异与保存的数据进行对比。此工具要求有效的许可证。
本章包含:
了解 Diff
Diff 工具将编辑器中的数据与从另一个工具输出中(或从指定的另一个输入中)接收到的数据进行比较,并发现差异时报告失败。
Diff 项目配置面板划分为两个主要部分:上一部分包含常规选项。下面部分包含 Regression Control、 Ignored Differences和 Options 选项卡,可以在其中配置选项用于比较文本、二进制、JSON 和 XML 格式的数据。
和其他工具一样,如果向项目中添加源,则可以为该工具指定数据源。用于 Diff 工具的数据源指定用于提供控制值的数据源。
二进制 Diff 模式
从 Diff Mode 下拉菜单中选择 Binary 。查看二进制文件的差异。
回归控制
此设置确定将什么数据源值、文件或文本用作 "control” 值(用于比较所有后续结果的值)。选择其中一项以下选项:
Editor: 从下拉菜单中选择此选项,并在相关字段中输入用作回归控制的文本内容。
File: 从下拉菜单中选择此选项,并指定用作回归控制的文件。如果要保证该文件路径始终相对于项目文件,则启用 Persist as Relative Path 选项。
Data Source Column: 从下拉菜单中选择此选项,并指定特定数据源列中的值作为回归控制。该选项仅适用于包含数据源的项目。
文本 Diff 模式
从 Diff Mode 下拉菜单中选择 Text ,以访问该模式的以下配置。
回归控制
确定将什么数据源值、文件或文本用作 "control” 值(用于比较所有后续结果的值)。选择其中一项以下选项:
Editor: 从下拉菜单中选择此选项,并在相关字段中输入用作回归控制的文本内容。
File: 从下拉菜单中选择此选项,并指定用作回归控制的文件。如果要保证该文件路径始终相对于项目文件,则启用 Persist as Relative Path 选项。
Data Source Column: 从下拉菜单中选择此选项,并指定特定数据源列中的值作为回归控制。该选项仅适用于包含数据源的项目。
忽略的差异
在 Text 模式 Diff 工具的 Ignored Differences 选项卡中,可以通过单击 Delete 按钮删除任何已忽略的文本差异。
选项
在 Text 模式 Diff 工具的 Options 选项卡中有以下选项可用:
- 正则表达式:确定是否将预期值被解析为正则表达式。如果未选择该框,则控制值将不会被解析为正则表达式。如果选择了该框,则控制值将被解析为正则表达式
例如,可能输入以下正则表达式:Java[a-zA-Z ]+\Q(\E[4-9]+th Edition\Q)\E
其中实际提取的字符串可能为以下内容:如何使用 Java 编程(第四版)
正则表达式将解析上面的字符串,检查“Java”是否作为第一个子字符串出现,后面紧跟一个或多个匹配项(在开括号和闭括号后面用 + 运算符表示),而匹配项仅限于 a-z 和 A-Z 以及空格之间的字母。注意,通过添加 \Q 和 \E 来进行转义。之所以需要这样做,是因为开括号和闭括号可以是正则表达式的一部分,因此如果它们表示为子字符串,则需要转义它们。我们还有一个数字出现在第一个开括号后面,它由 [4-9]+ 表示。这指定介于 4 和 9 之间的数字至少出现一个匹配项,并后面紧跟着“th Edition”。最后使用 \Q\E 转义闭括号。 - Ignore Whitespace: 确定是否忽略输入行和差异控件行中开始和结尾出现的空白行和空白字符。如果未选择该框,空白行和前导/后置空白将造成回归测试失败。如果选择了该框,将忽略空白行和前导/后置空白。
空白字符为任何一项以下情况:水平制表、新行、表格回馈、回车、空格。空白行是包含一个或多个空白字符的行。 - Output results as UNIX-style diff:确定差异输出格式。如果未选择该框,则输出将以表格式进行显示。如果选择了该框,则输出将以 UNIX 格式进行显示。
XML Diff 模式
从 Diff Mode 下拉菜单中选择 XML 差异器选项,以访问 XML 格式的选项。XML 模式解析 XML 文件,并按元素和属性对它们进行比较。(忽略 “ignorable” 空白字符)。比较结果表现为 XML 文档。如果希望使用该模式,请确保两个输入都是格式良好的 XML 文档,且它们具有相同类型的文档元素。
回归控制
确定将什么数据源值、文件或文本用作 "control” 值(用于比较所有后续结果的值)。回归控制设置包含两个配置 XML 消息的图形表现形式。
文字 XML 回归控制
在 Literal XML 模式 Diff 工具的 Regression Control 卡中有以下选项可用:
Editor: 从下拉菜单中选择此选项,并在相关字段中输入用作回归控制的文本内容。
File: 从下拉菜单中选择此选项,并指定用作回归控制的文件。如果要保证该文件路径始终相对于项目文件,则启用 Persist as Relative Path 选项。
Data Source Column: 从下拉菜单中选择此选项,并指定特定数据源列中的值作为回归控制。该选项仅适用于包含数据源的项目。
- Set From WSDL:使用基于 WSDL 的预期响应初始化表单 XML 内容。该按钮仅在特定 SOAP 客户机存在 WSDL 文档时可用。
表单 XML 回归控制
将表单 XML 选择作为回归控制模式时,回归控制选项卡中的选项被划分为 XML 视图树和 XML 配置选项卡。
XML 树将文字 XML 显示为树,每个树节点表示一个元素。Diff 面板中树的选项可以使用与 SOAP 客户机工具的 Form XML SOAP Envelope 选项相同的风格进行配置。 有关更多详情,请查阅 Manipulating the XML View Tree。
XML 配置选项卡云溪对 XML 组件进行添加、删除和重命名操作。用于 XML 配置选项卡的选项可以使用与 SOAP 客户机工具的 Form XML SOAP Envelope 选项相同的风格进行配置。有关更多详情,请查阅 Manipulating the XML Configuration Tabs。
XML 忽略的差异
在 XML 模式 Diff 工具的 Ignored Differences 选项卡中,可以通过单击合适按钮对 Xpath 设置进行 Add 和 Modify 操作。有关配置已忽略差异的更多详情,请查阅 Understanding XPaths。
XML 选项
在 XML 模式 Diff 工具的 Options 选项卡中有以下选项可用:
- Diff engine: 从下拉菜单中选择一个差异引擎。XMLUnit 为默认引擎。该引擎支持大量的消息、生成大量差异的比较,以及忽略元素顺序变化的能力。如果需要,可以切换到 VMTools 或 ExamXML MDCXML。
- Ignore element order: 配置该工具以忽略每个处理过的文档的所有区域中的元素顺序。注意,如果更希望忽略文档特定部分的顺序,那么在将文档传递给 Diff 工具之前,请使用 XML 排序工具对该部分进行排序。有关更多详情,请查阅 XML Sort 。
- SOAP mode: 如果选择了该框,则启用以下操作:
- SOAP 多引用在进行差异比较之前被解析,不会被报告为错误。例如,某些服务(如 Axis)在使用 SOAP 多引用(如,为引用提供不同的 id 号)时以不可预知的行为重新排列 XML 响应。当这些响应在文本模式中不同时,即使 SOAP 消息在逻辑上等价(但它们的引用不同),也会发生失败。
- 忽略 type 和 arrayType 属性中命名空间的前缀更改。当自动从 WSDL 中生成控件时,需要这一点,因为前缀不能提前确定
- 数值用数字来比较。例如,1 和 1.0 之间的差异不会作为错误来报告。
- 忽略注释中的差异:禁用该选项,以包含 XML 注释中的更改。默认是启用的。
使用 ExamXML MDCXML
ExamXML 是 A7Soft 独立购买且授权的第三方工具。如果选择 ExamXML MDCXML,请确保指定可执行文件和选项文件的位置。
注意:
- 使用此集成测试的版本包括 4.74 和 4.38。
- MDCXML.exe 选项文件包括 mdcxml 的各种设置,其中包括忽略的元素列表。在 A7Soft Web 网站 http://www.a7soft.com/mdcxml.html中提供了一个选项文件的示例。
该选项文件需要包含以下最小设置(使用不支持以下参数的不同值):
- ValidationErrorAsFatal=0
- InsertPI=1
- InsertTags=0
- InsertComments=0
- 为了使用 ExamXML 模式,Diff 工具的控制台内容必须在文件中提供。
使用 VMTools
VMTools 内建到产品中。不需要额外的许可证。如果选择 VMTools,那么可以指定以下内容:
Output results as XML: 确定差异输出格式。如果未选择该框,则输出将以表格式进行显示。如果选择了该框,则输出将以 XML 格式进行显示。只有当另一个工具链接到 Diff 工具的消息输出时,才会反映出差异。
- SOAP mode: 如果选择了该框,则启用以下操作:
- SOAP 多引用在进行差异比较之前被解析,不会被报告为错误。例如,某些服务(如 Axis)在使用 SOAP 多引用(如,为引用提供不同的 id 号)时以不可预知的行为重新排列 XML 响应。当这些响应在文本模式中不同时,即使 SOAP 消息在逻辑上等价(但它们的引用不同),也会发生失败。
- 忽略 type 和 arrayType 属性中命名空间的前缀更改。当自动从 WSDL 中生成控件时,需要这一点,因为前缀不能提前确定
- 数值用数字来比较。例如,1 和 1.0 之间的差异不会作为错误来报告。
在特定条件下,VMTools 将回调基于文本的差异。如果 XML 非常复杂,并且产生了过多的差异,或者需要花费过多的时间来完成,就会发生这种情况。
如果发生这种情况,其中一项以下消息将被打印到控制台视图中,以解释发生了什么。
没有运行 XML Diff,差别太大了。相反地,指定文本模式进行差异比较。
没有运行 XML Diff,没有在 30.0 秒内完成。相反地,指定文本模式进行差异比较。
切换为文本模式之前执行 XML diff 允许的最大时间为首选项面板的 Misc 选项卡中(Connection Settings> Default timeout)指定的默认超时值,但不超过 120 秒。
JSON Diff 模式选项
从 Diff 工具的 Diff Mode 下拉菜单中选择 JSON 后,可以使用回归控制和已忽略差异选项。
回归控制
JSON 模式 Diff 工具的 Regression Control 卡中有以下选项可用:
- Name: 指定 Diff 工具名。
Regression Control Source: 确定将什么数据源值、文件或文本用作 "control” 值(用于比较所有后续结果的值)。
Editor: 从下拉菜单中选择此选项,并在相关字段中输入用作回归控制的文本内容。
File: 从下拉菜单中选择此选项,并指定用作回归控制的文件。如果要保证该文件路径始终相对于项目文件,则启用 Persist as Relative Path 选项。
Data Source Column: 从下拉菜单中选择此选项,并指定特定数据源列中的值作为回归控制。该选项仅适用于包含数据源的项目。
忽略的差异
在 JSON 模式 Diff 工具的 Ignored Differences 选项卡中,可以通过单击合适按钮对 XPath 设置进行 Add 和 Delete 操作。
了解 XPaths
当以 XML 模式配置 Diff 工具时,在实际值和预期值之间发现的任何差异都用 XPath 表示。XPaths 表示 XML 元素的位置,指定发生差异的位置、发生的差异类型,以及此差异是因为更改、插入还是因为删除引起的。
可以确定在运行 Diff 工具时忽略哪些 XPath。可以选择是忽略完整路径,还是忽略特定 Xpath 操作,如 Content:
Insert
操作。
对于忽略通常会导致回归测试失败的瞬态值,忽略 Xpaths 是非常有用的。例如,实际输出可能包含一个不断变化的时间戳值。由于该值是不一样的,它将更不可能匹配 Diff 工具中配置的值,该值正好造成测试失败。因此,可以指定忽略此值的 XPath,这样测试就不会失败。
将 Xpaths 设置为忽略有三种不同的方法:
- Ignore XPaths from the Quality Tasks view: 这是配置 Diff 工具忽略 Xpaths 最简单的方式。回归测试失败后,只需右键单击质量任务视图节点,选择要忽略的 XPath 即可。
- Manually entering an XPath in the Diff GUI: 可以通过单击 Diff GUI 中的 Configure Ignored Differences 按钮手动输入 XPath。
- Ignore XPaths from the Form XML tree: 可以右键单击表单 XML 树中的元素节点,并根据所选元素将 XPath 配置为忽略。
手动输入要忽略的 XPath
也可以将要忽略的 XPath 手动键入或粘贴到 Diff 工具配置面板中。
若要手动输入 XPath:
- 则可在 Diff 工具的 Text、 XML或 JSON 模式中选择 Ignored Differences 选项卡。
- 单击 Add 按钮。将在已忽略的 XPaths 列表的 XPath 列中显示一个空字段。默认, Settings 列填充指定的所有 XPath 操作,它意味着您添加的整个 Xpath 将被忽略。若要指定要忽略的单个 XPath 操作,请查阅 Ignoring XPaths from the Form XML Tree。
- 要么在空的 XPath 字段中输入 XPath 位置。
- 若要添加额外的 Xpath,请重复步骤 1 到步骤 3。
- 单击 OK 按钮。
在以后运行修改的回归测试中,所有添加的 Xpath 将都被忽略。有关修改被忽略的 Xpath 的更多详情,请查阅 Modifying XPath Settings。
忽略表单 XML 树中的 XPath:
通过完成以下内容,也可以直接忽略表单 XML 选项卡中表单 XML 树中的 XPath:
- 右键单击树中的元素节点,然后从快捷菜单选择 Setup Ignored XPaths 。
- 如果从表单 XML 树中选择的元素不是重复元素,则将显示一个 Ignored XPaths Settings 对话框,并自动输入所选定 XPath。
- 如果从表单 XML 树中选择的元素是具有相同本地名称的兄弟元素的重复元素,则会显示一个 Repeated XPath Settings 对话框。
您可以选择 Ignore All 的重复元素,或者选择 Ignore Selected Element Only。选择并单击 OK后,将显示一个 Ignored XPaths Settings 对话框,并自动输入所选定的 XPath。
- 如果从表单 XML 树中选择的元素不是重复元素,则将显示一个 Ignored XPaths Settings 对话框,并自动输入所选定 XPath。
- 选择要忽略的 XPath 操作的合适多选框。可使用以下选项:
- XPath: 指定所选定的 XPath 位置。
- Recursive: 选择将已忽略的 Xpath 设置应用于子元素。
- Text Content (Modify/Insert/Delete): 选择要忽略的内容操作。
- Element/Subtree (Insert/Delete): 选择要忽略的元素或子树操作。
Attribute (Modify/Insert/Delete): 选择要忽略的属性操作。如果选择了该字段,则只会忽略 Xpath 中指定的属性名。若要忽略指定的属性,请在紧靠 Attribute 多选框的字段中输入属性名。如果希望忽略元素 Xpath 位置上的多个属性,请保留属性名为空或使用通配符 * (例如,myAttribute*)。
- Element Name and Namespace (Modify/Insert/Delete): 选择要忽略的元素名操作。
- 单击 Ok。选中的元素节点现在以灰色的形式显示在。
选中的元素节点现在以灰色的形式显示在表单 XML 树中。在以后运行修改的回归测试时,指定的所有 Xpath 操作都将被忽略。
若要重新配置并不再忽略 Xpath 时,那么右键单击 Ignored Xpath 节点并从快捷菜单中选择 Remove Ignored XPath 。然后节点将以黑色显示并不再被忽略。
创建被忽略的 Xpath 的共享列表
Diff 工具可以有自己的本地、排他的忽略 Xpath 设置,也可以引用其他 Diff 工具可以使用的 Xpath 列表。 若要创建被忽略的 Xpath 的共享列表,请查阅 Global Ignored XPath Properties。
修改 Xpath 设置
默认情况下,当向 Ignored Differences 选项卡添加 Xpath 时,该 Xpath 的所有可能操作都将显示在 Settings 列。由于 Xpath 的所有可能操作都是默认指定的,所以在下一次运行回归测试时将忽略所有这些操作。然而,可以通过修改 Xpath 设置指定哪些操作被忽略,而不是让所有操作都忽略。
若要修改 Xpath 设置:
- 在 Ignored Differences 选项卡中,选择希望修改的 XPath,然后单击 Modify 按钮。将显示一个 Ignored XPaths Settings 对话框。
- 选择要忽略的 XPath 操作的合适多选框。可使用以下选项:
- Recursive: 选择将已忽略的 Xpath 设置应用于子元素。
- XPath: 指定所选定的 XPath 位置。
- Text Content (Modify/Insert/Delete): 选择要忽略的内容操作。
- Element/Subtree (Insert/Delete): 选择要忽略的元素或子树操作。
Attribute (Modify/Insert/Delete): 选择要忽略的属性操作。如果选择了该字段,则只会忽略 Xpath 中指定的属性名。若要忽略指定的属性,请在紧靠 Attribute 多选框的字段中输入属性名。如果希望忽略元素 Xpath 位置上的多个属性,请保留属性名为空或使用通配符 * (例如,myAttribute*)。
- Element Name and Namespace (Modify/Insert/Delete): 选择要忽略的元素名操作。
- 然后单击 OK。
在以后运行修改的回归测试中,所有指定的 Xpath 操作将都被忽略。
视频教程
在此视频中,您将了解如何生成和更新回归控制。