一、工欲善其事,必先利其器
1、工具介绍:
Robotframework在测试中作为组织测试用例和BDD关键字的平台,主要使用RIDE进行管理,它不是一个工具,而仅仅是一个框架,使用Python进行开发,同时支持WEB测试(Selenium)、Java GUI 测试,启动线程、终端、SSH等、支持BDD模式,相关的框架组织结构如下:
安装目录结构如下:
2、用例脚本组织:
针对Selenium, RobotFrameWork有第三方库:selenium2library,支持目前主流的页面元素,使用关键字的组织方式,能够帮助我们更快的组织用例,下图是部分自动化脚本:
说明:
MySuite下为各个用例,用例又被拆分为很多流程:Flow.txt,用例流程又被拆分为更细的步骤:例如图片中的add_banner_step、 add_msg_data_step、Login_step
3、用例分层
用例按照“组织用例--用例流程--用例步骤”的方式编写,也就是说使用分层实现,并且仅仅调用关键字进行组织,这样将各个page的事件和元素之封装在各自的步骤中,如果界面元素有任何改动,便于维护和更新,减少变动带来的影响。(至于界面元素怎么定位,请google相关的Selenium2的相关知识,另外需要重点说的是,如果没有Python编程经验的话,最好自己写一些相关的代码,不要直接就上Ride,你可以使用Python+Selenium2+unittest框架,多写些代码总是有益的)
4、数据分层
使用Excel组织测试数据,将测试数据独立出来,这里用到了自己编写的Python脚本,具体用法如下:
引入自定义的脚本,作为Library,在F5关键字中能够识别:
使用关键字,定义各个Excel和定位Sheet,根据字段名获取Sheet的字段名,以传参的方式调用数据:
Excel定义的位置:
具体的Excel内容:
这样实现了数据的分层,以后需要在数据层修改数据,直接表格修改就可。
5、BDD模式:
用例也支持BDD模式的组织方式,如图:
二、Python脚本
因为RobotFrameWork是使用Python开发的,所以使用Python作为扩展的主要脚本语言,主要目的是扩展满足相关项目的测试要求的脚本,例如,上面所提到的对Excel读取数据的扩展脚本:
可能会遇到的可能的问题:中文识别问题,目前来说,由于Python本身的局限,我们测试的软件基本是中文,所以有可能会遇到中文unicode问题,对于这个问题,一般是这样解决:
在python的Lib\site-packages文件夹下新建一个sitecustomize.py,内容:# -- coding: utf-8 --import sysreload(sys)sys.setdefaultencoding('utf-8')
如果遇到个别无法彻底转换的如下处理:
三、Sikuli支持
Sikuli的引进其实比较纠结,因为项目中会比较多的使用不规范的控件和过多的模态窗口(模态窗口问题还好解决,可以通过异步js和Selenium2的Handle方法基本解决)是一个未决的问题。Sikuli是非RobotFrameWork的官方工具,所以需要使用远程Library的方式进行调用:
1、 组织目录:
2、启动远程库:
3、Ride中导入远程库:
4、定义Sikuli截取的图片的路径:
5、使用Sikuli远程库方法:
6、对应操作的控件:
四、jenkins持续集成
使用jenkins进行持续集成,jenkins本身提供了RobotFrameWork的插件,只要定义好相关的参数就可以了,运行通过Shell脚本的方式运行,这样不会依赖用例组织工具本身了。
五、总结
写了这么多,其实更想说的是,编写自动化脚本其实和写代码的过程是一致的,首先是选择自己顺手的工具,然后是将初期的想法比较rough地实现出来,这个过程就像敏捷迭代一样--“先有后优”,然后你才能考虑分层、抽象、模式运用,直到最后的持续集成交付。说的是一个自动化落地过程,get到的更应是思想,这才是让你在IT世界中面对未知而无惧。