【架构研习】欲善其事先利其器-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具有哪 ...
随机推荐
- WinForm 读写配置文件
//读配置文件 方法(1) //ConfigurationManager.RefreshSection("appSettings"); //强制重新载入 string settin ...
- SQL SERVER 数据库级联删除
--SQL SERVER 2008R2 级联删除:主子表设置外键关联,当主表数据删除的时候会自动删除子表中对应的数据 --创建主表 create table test_main( ID ,) PRIM ...
- CSS样式设置语法全解,样式优先级、值和单位、字体、文本、块级元素,行内元素,替换元素、非替换元素、display、float、position、table、li、光标、边距边框、轮廓、颜色背景
全栈工程师开发手册 (作者:栾鹏) 一个demo学会css css选择器全解 css操作语法全解 CSS样式设置语法全解: 样式优先级 1. !important标记的样式 > 内联样式(sty ...
- web基础系列(五)---https是如何实现安全通信的
https是如何实现安全通信的 如果有不正确的地方,还望指出! web基础系列目录 总结几种常见web攻击手段极其防御方式 总结几种常见的安全算法 回顾 总结几个概念(具体描述可以看上一篇文章) 数字 ...
- 全球多个 TOP 网站藏挖矿代码,5 亿 PC 沦为矿工
据ZDNet报道,现在很多网站都开始在网页脚本中藏匿挖矿代码,在用户访问时偷算力用于挖矿.来自Adguard的报告称也证实,也有5亿台电脑中招. 最新最热的IT技术付费社区 IT帮 itbang.me ...
- Admob - Google广告接入
前言 现在免费小游戏及应用的主要收入渠道就是通过接入广告.而Google的Admob适用于全球范围内的广告接入,文档方面及后台管理也是较为完善,接入还是比较便捷的. 不过Google目前还在墙外,虽然 ...
- YYHS-NOIP模拟赛-mine
题解 这道题不难想到用dp来做 dp[i][0]表示第i个格子放0 dp[i][1]表示第i个格子放1且第i-1个格子放雷 dp[i][2]表示第i个格子放2 dp[i][3]表示第i个格子放1且第i ...
- JQuery自定义插件详解之Banner图滚动插件
前 言 JRedu JQuery是什么相信已经不需要详细介绍了.作为时下最火的JS库之一,JQuery将其"Write Less,Do More!"的口号发挥的极致.而帮助J ...
- WPF 如何画出1像素的线
如何有人告诉你,请你画出1像素的线,是不是觉得很简单,实际上在 WPF 上还是比较难的. 本文告诉大家,如何让画出的线不模糊 画出线的第一个方法,创建一个 Canvas ,添加一个线 界面代码 < ...
- JAVA提高七:类加载器
今天我们学习类加载器,关于类加载器其实和JVM有很大关系,在这里这篇文章只是简单的介绍下类加载器,后面学习到JVM的时候还会详细讲到类加载器,本文分为下面几个小节讲解: 一.认识类加载器 1.什么是类 ...