测试输出的处理

测试执行过程中生成的 XML output files 可以使用Rebot工具来处理, 该工具集成到了Robot Framework中. 它在测试执行时自动调用生成测试报告和日志文件, 也可以单独使用, 生成自定义的报告和日志, 或者用来将测试结果组合合并在一起.

使用Rebot

概要

rebot [options] robot_outputs
python|jython|ipy -m robot.rebot [options] robot_outputs
python|jython|ipy path/to/robot/rebot.py [options] robot_outputs
java -jar robotframework.jar rebot [options] robot_outputs

如上所列, 使用Rebot最常见的用法是调用 执行脚本: rebot. 同时可以使用Python解释器直接调用模块 robot.rebot modulerobot/rebot.py 文件. 最后还可以通过Java调用 独立的JAR包安装.

注解

Robot Framework 3.0 版本之前, 安装的 rebot 脚本只用于Python解释器, Jython和IronPython对应的脚本分别是 jyrebotipyrebot. 目前这两个脚本也还是会安装, 不过未来的计划是逐渐淘汰并最终删除.

指定选项和参数

使用Rebot的基础语法完全等同于 执行测试, 并且大部分的命令行选项也都相同. 主要的区别就是Rebot的执行参数是 XML output files 而不是测试文件或目录.

返回码

Rebot的返回码和 执行测试的返回码 一样.

创建不同的报告和日志

可以调用Rebot生成和测试结束后自动生成的一样的报告和日志, 显然这样做意义不大. 但是如果想要有选择性的生成报告, 例如, 一份全部用例的报告和一份用例子集的报告, 这时就很有用:

rebot output.xml
rebot path/to/output_file.xml
rebot --include smoke --name Smoke_Tests c:\results\output.xml

另一个常见用途是在运行测试时只生成output文件(使用选项 --log NONE --report NONE), 把生成日志和报告文件放在后面再执行. 例如, 测试可以在不同的环境执行, 最终把output文件集中汇总到一个地方, 然后在那里创建报告和日志. 如果使用Jython运行测试生成报告和日志耗时较长也可以这样做. 总之, 在执行时禁止日志和报告生成, 改为事后生成, 可以节省很多时间, 同时也占用更少内存.

联合输出

Rebot的一个重要的特性功能是能够将不同的测试轮次的输出联合(combine)起来. 例如, 同样的测试用例在不同的环境下运行多次, 最终联合所有的output文件汇总输出一份报告.

联合输出非常简单, 只要将需要联合在一起的多个output文件一起作为参数传递即可:

rebot output1.xml output2.xml
rebot outputs/*.xml

当联合输出时, 将自动创建一个新的顶层测试套件, 把要联合的套件都作为子套件包含在内. 这和 一次执行多个测试文件或目录 是一样的, 也会使用 & 和空格来连接各子套件的名字, 生成这个新顶层套件的名字. 可以想象这个自动生成的名字通常不会很好看, 所以最好还是通过选项 --name 指定一个更有意义的名字:

rebot --name Browser_Compatibility firefox.xml opera.xml safari.xml ie.xml
rebot --include smoke --name Smoke_Tests c:\results\*.xml

合并输出

如果同样的测试再次执行(re-execute), 或者某一个套件分开执行(executed in pieces), 使用上述的联合输出结果创建顶层测试套件是没必要的. 这种情况下, 更好的做法是将所有结果合并(merge)到一起.

使用 --merge 选项来告诉Rebot将多个output文件合并来, 该选项不带参数, 其它参数的使用则和正常情况下一样:

rebot --merge --name Example --critical regression original.xml merged.xml

在实践中合并是如何使用的两个主要场景将在下面章节中讨论.

合并重新执行的用例

有时候需要重新执行测试用例的一个子集, 例如, 当bug(可能是待测系统的, 也可能是测试本身的bug)修复后的再次执行. 这时可以 选择性的执行用例, 通过名字(--test--suite 选项), 或通过标签(--include--exclude), 或通过前次执行状态(--rerunfailed).

使用默认的 联合输出 报告的做法在这种情况下有些不妥, 主要问题是组合结果是分开的套件, 并且可能已经修复的失败仍然列在其中. 这种情况使用 --merge (-R) 更合适.

这样merge的结果是, 同一个用例, 后面的执行结果将替代前面的. 使用个实际的例子更容易解释清楚, 下面同时用到了 --rerunfailed--merge:

robot --output original.xml tests                          # first execute all tests
robot --rerunfailed original.xml --output rerun.xml tests  # then re-execute failing
rebot --merge original.xml rerun.xml                       # finally merge results

合并后的测试结果消息将包含一个标注, 提示结果被替代了. 同时该消息还将展示该测试旧的状态和消息.

合并结果必须有相同的顶层测试套件. 那些要合并的用例和套件, 如果在原始output中没找到, 则会追加到结果中. 实际情况在下面章节中讨论.

注解

合并重新执行的结果是Robot Framework 2.8.4新特性功能. 在Robot Framework 2.8.6之前, 合并使用的是已被废弃的选项 --rerunmerge 实现, 同时新的测试和套件在合并输出中会被略过.

合并零碎执行的测试套件

合并选项 --merge 的另一个重要用途是将一个零碎执行的测试套件的结果合并起来. 例如, 一个套件分使用 --include--exclude 执行:

robot --include smoke --output smoke.xml tests   # first run some tests
robot --exclude smoke --output others.xml tests  # then run others
rebot --merge smoke.xml others.xml               # finally merge results

合并后, 最终的output文件将包含所有测试用例和测试套件的结果. 如果某些用例多次出现, 则后面的会覆盖前面的(如上节). 同样, 这种合并策略要求所有output文件的顶层测试套件是同一个.