【架构研习】欲善其事先利其器-Robot Framework实战演练之框架的选择
(原创文章,转载请注明出处。)
之前有提到过,自己曾基于公司业务系统从无到有码过一套测试框架,但由于开发时的思想同时受限于公司业务及框架的适用性上,导致最终虽然框架可完美支持业务,但在易用性、兼容性及可扩展性方面依然存在一定问题,维护成本较高。后有幸结识RF,甚为喜欢。
为什么呢?
这就要从框架本身说起。关于对测试框架的认识,其实可大可小,各人理解不一。比如说如Junit等xxUnit系列,可以说是单元测试的框架,以白盒的方式调函数,调模块,加setup、加assert,覆盖代码段的功能,可以在代码层面做任何测试,但不太会用它做接口的联调或业务的串联测试。如TestNG+xxx等,偏向于用例及流程的控制,TestNG本身并不调用业务逻辑。相对全一点的,早期如Rational系列,从CQ到TM再到Rational Robot,覆盖从需求到测试再到测试管理,但实在是太重。后期如大家最熟知的QC+QTP/LR,全开发流程串联,功能强大,但同样的问题,一是略重,二是要用你的业务系统去适应QTP,当然用的好的话可以直接自己写测试agent作为第三方测试工具连QC,但除了调用接口要跟QC完美契合外,Report也用适应QC本身的报表,需要人力成本。再者QC的二次开发难度较大(ps:有需要的可以找我),需大量时间做研究实践。
那我们来谈谈RF在框架或平台各个层级的特点。这里结合一般开展自动化工作的人和事来说。
一、测试开发阶段:
我们一点点展开说。测试开发,指的是测试脚本的开发工作。可以用纯语言写,如Java、Py等,用VB6写个连接程序也能放QC上跑。也可以用工具,采用半写半录的方式,直接用QTP或Rational Robot去跑。但不管用任种方式,我们都会需要或者说在逐步演进的过程中都会意识到需要以下几点内容:一、要有一个便于开发者使用的IDE。RF的IDE,有RIDE或者PyCharm的插件,界面几户无异,均比较容易上手。二、需要有核心库或者公共库的概念。好比自己写代码会写Lib,用QTP会写vbs核心库等。RF中有Library和Resource的概念,既可引用开源库,也可以封装核心的业务动作。一般一个自动化团队会有1-2名成员去维护核心库代码,负责控制代码的check in。其他若干人员负责脚本的设计或业务流的串联。一旦形成,任何接口的变动或更新,只需要更新核心库的代码即可,无须逐个更新脚本。三、数据驱动、关键字驱动、数据代码分离。KWD是很早就有的概念,大多数商用工具里都支持数据的剥离,RF同样可以实现。虽然RF同样支持诸如同一个用例跑一个数据文件,逐一跑文件中包含的三组不同的数据,但如何把这样的模式应用到测试场景中,如何通过好的布局将关键字驱动及数据驱动相结合,并将各个独立的验证点加入进去才是需要不断思考和优化的地方。四、快速对接待测业务接口或识别界面元素。好比Jmeter内置了http协议,所以大家习惯用它做页面压力测试。RF可以快速pip相关的Library,可以兼容各类接口,几乎涵盖各类协议及前后台。另外Lib里还附带了各类操作,甚至直接调用python语句,非常方便。 五、快速形成业务逻辑测试脚本。当代码实现了各种接口调用、界面元素调用,并参数化和抽象后,需要思考自动化脚本开发人员如何快速的将之整合形成业务逻辑。RF可以通过简单的拖拽形成业务逻辑。但之前说的脚本开发人员不是一个人,而是很多人,所以在应用工具的同时还必须建立规范。设计完善加之管理适当的话,以上提到的脚本设计人员其实不需要过多的接触代码,只需要编排关键字,然后改改数据就可以形成可用的业务逻辑了。六、代码、数据版本管理。由于RF脚本本身是txt的,所以可以利用Git或SVN做版本控制。IDE本身也包含相关插件。
二、测试执行(运维)阶段:
测试脚本完成业务串联并调试通过后,会打上版本标签,并从开发库转移到执行库,就此正式开始测试执行工作。我们的讨论会就测试执行定义一些分类,以便展开说。
测试执行就阶段分可以分为执行阶段和分析阶段。
执行阶段就是我们通常说的跑。跑的方式有很多种,可以分为半自动化和全自动化。前者是我有一个自动化测试执行团队,每人负责几台测试机,人为的手动取代码更新到运行库,然后根据此次运行要求,是full还是sanity,框一个范围,每人分几台机器去跑。后者是我有一个自动化测试平台,在平台上勾选我要的范围,平台自动allocate机器并assign用例,运行过程中还会做load balance。对于第一种方式,RF的RIDE本身就可以建多层次的文件夹及测试集,可以构建出业务模块,在任何一台测试机上均可以git到代码并点选相关模块去运行。对于第二种方式,刚接触RF,暂时还没有看到现成的开源代码,但还是可以通过用remoting调用agent的方式并做简单的控制实现,但这还都是老套路。如果能实现第二种模式,那恭喜你,你基本已经实现了自动化测试从脚本化到框架化再到平台化的演进了,不考虑实际效能的话,已经可以说是圆满了,但如果要走出最后一步产品化,要有很多额外的事要做,这里暂时就不细说了。脚本触发的方式也有很多种,可以分为手动和自动。利用RF自带的pybot,可以通过命令行直接调用项目层级、测试集层级,可以轻易的植入Jenkins作为冒烟测试。
分析阶段其实是最花时间的。为了提高效率,需要考虑以下几点。首先需要有详尽的Log,并且Log level是可调的。RF包含了None、Debug、Trace等多个层级。Trace层级,可以看到所有变量的值,并追溯到具体的报错内容,十分详尽。其次是清晰的测试报告。RF的测试报告也是分层级的,可以通过一层层点击定位问题,比较方便。并且可以通过简单的设置,保存每次运行的结果,便于日后查验。但即使如上述种种,跟业务相关的排错还是需要有经验的人去做,快速定位问题。
由此可见,RF符合快速搭建自动化测试框架(平台)的基本要求,也便于我们快速的开展工作。
【架构研习】欲善其事先利其器-Robot Framework实战演练之框架的选择的更多相关文章
- 欲善其事必先利其器---Xcode插件
Xcode所有的插件都安装在目录~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/ Alcatraz (用于管理xcode插件 ...
- 欲善其工必先利其器-----ThinkPad E430加装SSD固态硬盘和内存
大概13年5月左右入手的小黑ThinkPad E430 当时辞职换工作换城市所以预算有限,4k左右大洋买下了这款笔记本电脑.3年左右的时间,一直使用单位电脑,偶尔使用小黑真心崩溃.你会发现你会有放弃使 ...
- 欲善其功,必先利其器--Nodejs调试技术总结
调试技术与开发技术构成了软件开发的基石.目前Nodejs作为新型的Web Server开发栈倍受开发者关注.总的来说Nodejs的应用程序主要有两部分:JavaScript编写的js模块和C语言编译的 ...
- Java---工欲善其事必先利其器(准备篇)
Java API 1.7链接:http://pan.baidu.com/s/1cKUaKY 密码:116m Eclispse链接:http://pan.baidu.com/s/1mh6MoL6 密码: ...
- 【工利其器】必会工具之(二)Android开发者官网篇
前言 当刚开始踏入Android程序员这个行业的时候,想必绝大多数的人都和笔者一样,热血沸腾,激情四射,买了很多讲解Android开发的书籍.当开发某个功能需要学习某方面知识的时候,大家又成了“面向百 ...
- 【工利其器】必会工具之(一)Source Insight篇
前言 “Source Insight(以下简称SI)是世界上最好的编辑器”,说这句话不知道会不会出门被打呢?-_- 中国古话说得好,“文无第一,武无第二”,所以不敢说SI是最好的,但是 ...
- 003-读书笔记-企业IT架构转型之道-阿里巴巴中台战略思想与架构实战-分布式服务框架的选择
3.1.淘宝平台“服务化”历程 大约2007年,淘宝500人团队,维护一个war包,200多个功能模块. 1)项目团队协同成本高,业务响应越来越慢 2)应用复杂度超出人的认知负载. 3)错误难于隔离[ ...
- 架构模式数据源模式之:数据映射器(Data Mapper)
一:数据映射器 关系型数据库用来存储数据和关系,对象则可以处理业务逻辑,所以,要把数据本身和业务逻辑糅杂到一个对象中,我们要么使用 活动记录,要么把两者分开,通过数据映射器把两者关联起来. 数据映射器 ...
- [原创]cocos2d-x研习录-第三阶 特性之调度器
在游戏中,经常会周期执行一些检测.操作或更新一些数据等,我们称之为调度.Cocos2D-x中将调度封装为类CCScheduler,方便在游戏开发中使用.我们一起来学习一下,CCScheduler具有哪 ...
随机推荐
- javascript中关于this指向问题详解
前 言 LiuDaP 在前端的学习中,我们必然要用到js,js可以说是前端必不可少的的东西.在学习js的过程中,我们会经常用到this这个东西,而this的指向问题就变得尤为重要.今天正好有空闲 ...
- 敏捷开发(2)-Scrum
什么是SCRUM Scrum的英文意思是橄榄球运动的一个专业术语,表示“争球”的动作:把一个开发流程的名字取名为Scrum,我想你一定能想象出你的开发团队在开发一个项目时,大家像打橄榄球一样迅速.富有 ...
- 点击jsp页面上的超链接后怎么找到对应的servlet
首先超链接是一个像是url一部分的东西,其实不追求深入的道理可以联想到web.xml中的一个<url-pattern>,其实它俩也的确是对应关系,然后<url-pattern> ...
- RT5350 OpenWrt 系统移植jsoncpp
下载Json包: 下载地址:http://sourceforge.net/projects/jsoncpp/ 如:jsoncpp-src-0.5.0.tar.gz 交叉编译: 1.解压jsoncpp- ...
- web前端——10个妨碍进步的学习方式
1.前言 从事web前端的人很多,每个人的学习方式,学习习惯基本不会一模一样!关于web前端(或者直接互联网),大家都知道,是做到老,学到老的一个行业.之前写文章的时候,我说过很多学习的方式和建议.今 ...
- 【NOIP2015提高组】 Day1 T2 信息传递
题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...
- JAVA提高八:动态代理技术
对于动态代理,学过AOP的应该都不会陌生,因为代理是实现AOP功能的核心和关键技术.那么今天我们将开始动态代理的学习: 一.引出动态代理 生活中代理应该是很常见的,比如你可以通过代理商去买电脑,也可以 ...
- 如何透彻分析Java开发人员
第一部分:对于参加工作一年以内的同学.恭喜你,这个时候,你已经拥有了一份Java的工作. 这个阶段是你成长极快的阶段,而且你可能会经常加班.但是加班不代表你就可以松懈了,永远记得我说的那句话,从你入行 ...
- LeetCode 136. Single Number (落单的数)
Given an array of integers, every element appears twice except for one. Find that single one. Note:Y ...
- PhiloGL学习(6)——深情奉献:快乐的一家
前言 话说上一篇文章结尾讲到这一篇要做一个地球自转以及月球公转的三维动画,提笔,不对,是提键盘开始写的时候脑海中突然出现了几年前春晚风靡的那首歌:蒙古族小丫头唱的快乐的一家.闲言莫提,进入正题. ...