测试输出的处理
测试执行过程中生成的 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 module 或 robot/rebot.py 文件. 最后还可以通过Java调用 独立的JAR包安装.
注解
Robot Framework 3.0 版本之前, 安装的 rebot
脚本只用于Python解释器,Jython和IronPython对应的脚本分别是 jyrebot
和 ipyrebot
.目前这两个脚本也还是会安装, 不过未来的计划是逐渐淘汰并最终删除.
指定选项和参数
使用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文件的顶层测试套件是同一个.