Robot Framework 新版教程 - 后处理输出
(Robot Framework 7.x 教程, Part 15)
后处理输出
在测试执行过程中生成的 XML 输出文件可以在之后由 Rebot 工具进行后处理,Rebot 是 Robot Framework 的一个组成部分。在测试执行期间生成测试报告和日志时会自动使用它,单独使用它则可以创建自定义的报告和日志,以及合并结果。
使用 Rebot
命令行语法
rebot [options] outputs
python -m robot.rebot [options] outputs
python path/to/robot/rebot.py [options] outputs
使用 Rebot 最常见的方式是使用 rebot 命令。也可以使用选定的 Python 解释器执行已安装的 robot.rebot 模块或 robot/rebot.py 文件。
指定选项和参数
使用 Rebot 的基本语法与启动测试执行时完全相同,大多数命令行选项也是一样的。主要区别在于 Rebot 的参数是 XML 输出文件,而不是测试数据文件或目录。
Rebot 的返回码
Rebot 的返回码与运行测试时完全相同。
控制执行模式
Rebot 会识别运行的是测试还是任务,并默认保留执行模式。该模式会影响日志和报告,在前一种情况下使用 test 术语(如 Test Log 和 Test Statistics),在后一种情况下使用 task 术语(如 Task Log 和 Task Statistics)。
Rebot 也支持使用 --rpa 或 --norpa 选项来显式设置执行模式。当处理多个输出文件且它们的模式存在冲突时,这是必要的。
创建报告、日志和输出文件
可以使用 Rebot 创建与测试执行期间自动创建的相同的报告和日志。当然,创建完全相同的文件并没有意义,但是,例如,拥有一个包含所有测试用例的报告和另一个仅包含部分测试子集的报告可能很有用:
rebot output.xml
rebot path/to/output_file.xml
rebot --include smoke --name Smoke_Tests c:\results\output.xml
另一种常见用法是在运行测试时仅创建输出文件(可以使用 --log NONE --report NONE 禁用日志和报告生成),然后再生成日志和报告。例如,可以在不同环境中执行测试,将输出文件收集到一个集中位置,然后在那里创建报告和日志。
Rebot 默认不创建 XML 输出文件,但可以通过使用 --output (-o) 选项来创建。日志和报告默认会被创建,但如果不需要,可以使用值 NONE(不区分大小写)来禁用它们:
rebot --include smoke --output smoke.xml --log none --report none original.xml
合并输出
Rebot 的一个重要功能是能够合并来自不同测试执行轮次的输出。此功能允许,例如,在不同环境中运行相同的测试用例,然后从所有输出生成一个总体报告。合并输出非常简单,只需要将多个输出文件作为参数传入即可:
rebot output1.xml output2.xml
rebot outputs/*.xml
当输出被合并时,会创建一个新的顶层测试套件(test suite),给定输出文件中的测试套件成为其子套件。这与同时执行多个测试数据文件或目录的工作方式相同,在这种情况下,顶层测试套件的名称也是通过用 & 符号和空格连接子套件名称来创建的。这些自动生成的名称不够好,通常最好使用 --name 来给出一个更有意义的名称:
rebot --name Browser_Compatibility firefox.xml opera.xml safari.xml ie.xml
rebot --include smoke --name Smoke_Tests c:\results\*.xml
合并输出(merge)
如果重新执行相同的测试,或者将一个测试套件分段执行,像上面讨论的那样合并结果会创建一个不必要的顶层测试套件。在这些情况下,通常更好的做法是合并(merge)结果。合并通过使用 --merge (-R) 选项完成,它改变了 Rebot 组合两个或多个输出文件的方式。该选项本身不接受参数,所有其他命令行选项都可以正常与它一起使用:
rebot --merge original.xml merged.xml
rebot --merge --name Example first.xml second.xml third.xml
当套件被合并时,文档、suite setup 和 suite teardown 取自最后一个被合并的套件。所有被合并套件的套件元数据都会保留,后面的套件中的值具有优先权。
合并测试的工作方式将在以下章节中解释,讨论两个主要的合并用例。
从合并的套件中获取套件文档和元数据是 Robot Framework 6.0 中的新功能。
合并重新执行的测试
通常需要重新执行一部分测试,例如,在修复被测系统或测试本身的 bug 之后。这可以通过按名称(--test 和 --suite 选项)、tag(--include 和 --exclude)或之前的状态(--rerunfailed 或 --rerunfailedsuites)来选择测试用例来实现。
使用默认的合并输出方式将重新执行的结果与原始结果合并效果不太好。主要问题是会得到单独的测试套件,并且可能已经修复的失败也会显示出来。在这种情况下,最好使用 --merge (-R) 选项告诉 Rebot 合并结果。实际上这意味着后续测试运行中的测试会替换原始结果中的测试。一个例外是后续运行中被跳过(skipped)的测试会被忽略,保留原始测试。
以下是一个使用 --rerunfailed 和 --merge 的实际示例:
robot --output original.xml tests # 首先执行所有测试
robot --rerunfailed original.xml --output rerun.xml tests # 然后重新执行失败的测试
rebot --merge original.xml rerun.xml # 最后合并结果
合并后的测试消息中包含一条说明,指出结果已被替换。消息还会显示测试的旧状态和旧消息。
合并的结果必须始终具有相同的顶层测试套件。合并输出中存在但原始输出中找不到的测试和套件将被添加到结果输出中。这在实践中如何工作将在下一节讨论。
忽略后续运行中被跳过的测试是 Robot Framework 4.1 中的新功能。
合并分段执行的套件
--merge 选项的另一个重要用例是合并使用 --include 和 --exclude 等选项分段运行测试套件所得到的结果:
robot --include smoke --output smoke.xml tests # 首先运行部分测试
robot --exclude smoke --output others.xml tests # 然后运行其他测试
rebot --merge smoke.xml others.xml # 最后合并结果
以这种方式合并输出时,生成的输出包含所有给定输出文件中找到的所有测试和套件。如果某个测试在多个输出中找到,最新的结果会替换较早的结果,如上一节所述。这种合并策略也要求所有输出中的顶层测试套件相同。
JSON 输出文件
Rebot 也可以创建和处理 JSON 格式的输出文件。创建 JSON 输出文件使用普通的 --output 选项,只需指定的文件具有 .json 扩展名:
rebot --output output.json output.xml
读取输出文件时,JSON 文件会通过扩展名自动识别:
rebot output.json
rebot output1.json output2.json
在合并结果时,可以混合使用 JSON 和 XML 输出文件:
rebot output1.xml output2.json
rebot --merge original.xml rerun.json
JSON 输出文件的结构记录在 result.json schema 文件中。
JSON 输出文件的支持是 Robot Framework 7.0 中的新功能。在 Robot Framework 7.2 之前,JSON 输出文件仅包含已执行套件的信息,但现在它们包含与 XML 输出文件相同的结果数据。