日期:2014-05-20  浏览次数:20840 次

对Robot Framework的理解

Robot Framework是一种基于Python开发的可扩展的关键字驱动自动化测试框架。通常用于端到端的Acceptance测试。它将测试用例、关键字、测试数据等定义都封装到了HTML或者TSV(tab分隔)文件中。使用手册以及下载地址如下:http://code.google.com/p/robotframework/


Robot Framework的一些基础概念:

  • 以${scalar}、@{LIST}、${true/false}、${null/None}语法定义的一些列变量,无论在用在测试数据还是测试用例的关键字参数中,都非常灵活。
  • 测试用例的组织结构为一个用例文件可包含以西结测试集合(test suite),一个集合可包括多个测试用例。也可以用一个用例文件包含引用其他多个测试用例文件。
  • 在可扩展自由导入的测试库中实现关键字的具体行为,官方标准的测试库包括Telnet、Dialogs,Remote,Screenshot等,扩展实现的包括SeleniumLibrary和SwingLibrary。

HTML的用例文件格式如下图所示:



此文的目的并非教学RF的使用,而是对它的设计思想进行一番讨论和思考。毫无疑问RF是一套很全面的测试平台框架,它的关键字驱动技术,正好适应了当今TDD和BDD的主流思想。让人以自然语言的的格式来描述Test Case,然后其中的关键字就会转化为行为(即函数的调用),例如在标准的关键字库OperatingSystem中包含了这样的一些关键字:Start Process、Wait Until Created、Remove Files、File Should Exist……这些关键字可直接用于Test Case的步骤描述中,跟人平时说话没什么两样,但在RF底层,会将它们之间的空格替换成下划线,再全部字母小写,就成了start_process,file_should_exist这样一个个Python实现的函数名字。


接下来,在结合之前提到的变量格式给Python函数传参,执行,完成Test Case的步骤。同时,在变量的管理上,RF也会单独拿出一个Table来管理(即图中的Variable表)。这个表格既包含了测试数据的分组和设计,也包括了关键字对应函数时必要的参数配置,是一种测试数据和测试脚本分离的解决方案。无论是用例、数据、关键字,从格式上全部都当它们是HTML的table,只不过根据table的header来辨识哪些是测试数据,哪些是测试关键字,哪些是测试用例,甚至哪些是测试的前期配置(Setting表)。QuickStart的Demo中是将它们都集中写在一个HTML文件中,但真正实施起来,必然是分开写、分开管理的。在运行的时候,以不同的执行参数来指定不同的路径(如-V --variablefile path等) 或者在Setting表中引入Resource即可。


坦白说笔者也设计过类似的关键字转函数实现自动化的方案,但是对测试数据的分离做得并不好。犹豫和纠结的原因是笔者的实现是用的Java,但个人觉得Java是强类型语言,测试数据的注入成Java函数调用的参数要求非常严格,再者Java利用反射技术来invoke method性能实在是不敢恭维。在了解了RF之后,虽说Python也是强类型语言,但反射和自省的机制似乎是十分的方便。从RF的运行效果来看,在测试数据和脚本分离上笔者看来是杞人忧天或者是自身的懒惰,实在惭愧!


最后说说RF产生的Report吧,老实说真的很丑,颜色绿得特别的鲜艳刺眼。但又不得不承认,Report内容的设计和关联性设计得非常好。层层组织下来,从Test Suite到Test Case,到每个Case的Execution Log。这一套模板和思路笔者完全可以学习过来,实现更人性化和更加美观简洁的Report。

PS:期盼着我的Pro早一点拿到,然后打算根据RF理解和收货重构笔者的自动化测试平台框架!-:) 先附上一张新鲜的框架Idea图!