也谈自动化测试开发

发表于:2015-11-23来源:uml.org.cn作者:不详点击数: 标签:自动化测试
今晚一个人跑到杭州窝在宾馆无所事事,也睡不着,就把这几天来关于自动化测试的探讨记录下来,也给自己一个机会,逼着自己好好反思这一年多来关于自动化测试的点滴。

  [题记]:今晚一个人跑到杭州窝在宾馆无所事事,也睡不着,就把这几天来关于自动化测试的探讨记录下来,也给自己一个机会,逼着自己好好反思这一年多来关于自动化测试的点滴。其实,我也只是接触过两套自动化框架,一是项目组开发、设计出来的,在这个从无到有的过程中,我学到了很多。其二便是学习的Robot Framework,它告诉我一个优秀的自动化框架应该具备些什么。

  都讲自动化测试开发,当然要把开发自动化测试框架也当做一个项目来做。这时候,就需要考虑应该选择何种类型的自动化测试框架:数据驱动、关键字驱动、还是Junit ,TestNG ? 抑或直接利用现有的开源自动化测试框架,如Robot Framework 。无法讲这几种类型的框架,孰优孰劣,关键是认清项目实际,选择最适合的。讲一些题外话,就Java学习者而言,Junit3.x的源码是再好不过的教材了,JUnit框架运用到了大量的设计模式,反射机制。

  在决定了选用何种自动化框架类型后,下面你需要抉择的就是:应该选择何种编程语言呢?编程语言的选择和开发者的技术背景有很大关系,一般都会选择自己熟悉的编程语言,但这也往往是个局限。另一方面,也受到SUT的影响。一般而言,很少见有选择C,C++作为自动化框架开发语言的,虽然这两种语言的执行效率要高,但开发效率要低一些。我们项目的自动化框架是Java语言编写的,关键字也是由Java实现的。关键字的实现选择Java,是由于SUT - 即Domino服务器提供的API是有Java ,C++。所以自然选择了Java。而自动化框架开发语言的选择,其实可以有别的选择,如脚本语言Python ,Perl。脚本语言Python,或Perl,作为超高级开发语言,解释执行的特性,在开发效率上可能会高一点。

  下面就是关键字实现方式的选择了。关键字就相当于手动执行测试用例当中的一个步骤,比如现在的项目,即一个关键字就是修改产品的一个配置选项,也可以是发一封带有特定附件的邮件。就我们的产品而言,Domino提供的操作数据库的方式有三种,即DIIOP、Web Services和本地调用。刚开始选择的是DIIOP,这种方式实现起来比较简单,后来发现通过这种方式实现的自动化脚本,即包含十几个关键字脚本,其执行时间大概要35s – 40s。而Web Services的执行时间就要效率就要高得多,差不多一个自动化脚本的执行时间可以缩短10s, 但其实现需要分为服务器端Web Service的发布,和客户端的调用,通过这种方式实现,测试环境的部署也要复杂些。讲这些,主要是告诉我们,一开始就需要对这些做出评估,选择合适的方案,不然中途改变,影响是很大的。

  自动化框架,说白了就是流程的封装啦。那么一个自动化框架应该包括哪些流程呢?来看看下面这两幅框架图吧。

  第一幅图讲解了一套自动化测试是由自动化框架,自动化脚本,关键字组成的。第二幅图描述了自动化框架的流程:根据配置挑选要执行的测试用例,解析自动化执行脚本,将自动化执行脚本送给自动化执行引擎,生成Log文件,最后生成Report。

  对比Robot Framework框架,这套简单的自动化框架有哪些地方可以提高呢?第一个,基于Test Suit的setup和teardown。一个自动化脚本的组成是这样的:清理、初始化测试环境(如,建立一些测试脚本需要用到的数据库), 执行自动化脚本,生成执行结果,最后清空环境。这些步骤我们的自动化脚本中也实现的,但如果想在执行一批测试用例之前,做一些动作,执行完以后,在清空,我们用得方式就是把这些自动化脚本的名字在要执行的一批测试脚本之前,我们的脚本是按字母排序的,这样确保的。其实应该有更好的方式。第二个,自动化脚本中有关键字Fail了,是否还需要接着执行下面的关键字呢。我们框架式会继续执行,但Robot Framework做到了可配置,它是通过listern来实现的。可以好好学习下。

  自动化框架、关键字的开发周期怎么安排,怎么预估effort ? 项目自动化测试框架,自动化脚本开发也分成了两Iteration。 第一个迭代期间,完成自动化框架主要流程,完成主要关键字,构建SMOKE部分的自动化脚本。第二次迭代,进一步完善自动化框架,接着添加关键字,完成 Regression部分自动化脚本。刚开始,effort的估计没有把握,因为有些关键字的实现可能比较困难,这时候需要及时sync风险。第二个阶段,effort的估计就有底了。

原文转自:http://www.uml.org.cn/Test/201306283.asp