我的测试历程5—QTP之狭义的数据驱动模型
07年我参加了软件测试工程师培训课程(课程中包含自动测试工具,功能:QTP,性能:LR),QTP课程主要讲解了QTP的关键字视图相关的内容(专家视图部分没有涉及),培训完以后,我对QTP的认识是:QTP使用起来很简单,就是一个录制、回放(不通过就调试)、细化脚本、再回放(不通过就再调试)、出报告的过程,那时候对QTP的认识很肤浅,也和一些朋友一样对QTP产生过类似的质疑:QTP能满足实际项目包罗万象的需求吗?当时感觉QTP只能应用在主要流程的验证上,而且没有真正意义上做到测试的自动化(当然以上都是07年对QTP的认识)于是我停止了继续深入学习QTP……09年9月左右,由于项目人手少,测试时间又短,所以每次版本更新后,只对新增功能和相关模块进行测试,而比较稳定的模块只走一个正常流程(甚至时间太紧连正常流程也来不及走了),另外由于我所在项目和另外一个项目都是一个大项目的子项目,所以另外一个项目的修改也可能导致本项目的一些功能不可用,下面有个实际项目中遇到的例子:有一次另外那个项目修改了数据库结构,数据库中删除了一个字段,导致我这个项目的一些特别稳定的功能中查询该字段的所有地方都报“黄页”(当然这些地方都做了安全处理,只抛了个自定义的页面,没有把代码抛出来),当时吓出了一身“冷汗”,还好每次更新我都会挑一些没有修改模块进行抽查,这次运气好,刚好抽到了,俗话说:“吃一堑长一智”,就算完全没有修改的模块也应该验证一下,但是目前的时间和人力只够对新功能的测试,我又想到了QTP,于是我安装了QTP,将老功能的业务流程录制成脚本,每次更新后,跑一下流程,验证一下老功能是否可用,成功案例:有一次QTP回放当中发现2个地方报“黄页”,后来才知道是因为另外一个项目更新了WEBSERVICE,而我这个项目的那2个地方刚好要调用那个WEBSERVICE,所以会报错,由于这一次的经历让我忽然对QTP产生了兴趣,对QTP脚本进行了更深入的学习,从07年的完全自动录制到现在的手动写脚本,从脚本依赖对象库到脱离对象库,从求助别人到帮别人写实际项目的自动化测试脚本,从各个测试脚本相互独立,到自己编写自动化测试框架……2个月前自己写了个测试框架,实现了运行一个VBS脚本,就可以打开QTP(脱离对象库)并按照CASE优先级从高到低运行所有需要运行的CASE,运行结束自动将结果写入文件中……2个星期前重新设计框架提高脚本开发效率和简单易用性。
下面写下现在我对QTP的看法:在没有接触自动化测试框架之前,我所有的脚本都是都是相互独立的,即:每个功能作为一个TESTCASE,这样就导致每次都要手动把每个脚本运行一遍,然后看报告,感觉自动化一点也不自动化,而且脚本的可重用性也很不好。于是我就在想,怎样才能做到真正意义上的自动化呢?可不可以通过运行一个驱动脚本打开QTP然后自动运行所有指定的脚本用例呢?后来在网上查了相关资料,开始自己搭建自动化测试框架:
我的第一个框架:由依赖对象库到脱离对象库,由自动录制到手动编写测试脚本。这个框架思想是学习于51
论坛中的《轻量级自动化测试框架》,只不过在此基础添加了一些功能,比如用例执行优先级。当时觉得这个框架很好用,全部使用描述性编程这样可以使用例不依赖对象库运行,提高了脚本的可移植性,但是随着对QTP认识的不断的深入,渐渐的发现描述性编程的弊端:脚本开发效率太低,同样开发一个测试脚本,完全使用描述性编程和自动录制+手动增强脚本相比,录制一个同样的功能,需要的时间大约3-4倍,甚至更长,因为使用描述性编程需要对对象的各个属性特别熟悉,另外完全使用描述性编程的调试效率也很低,使用哪些属性作为识别该对象的依据又需要一个判断过程,这样都会降低测试脚本的开发效率,还有描述性编程对编程基础有一定要求,所以我觉得脚本开发应该以自动录制+手动增强脚本为主,以描述性编程为辅。因为在有的项目中有些步骤可能通过自动录制是录制不到的,这时候描述性编程就起到很好的辅助作用。
我的第二个框架:由脱离对象库到依赖对象库,由手动编写测试脚本到自动录制+手动增强脚本(以描述性编程为辅)。由于第一个框架的弊端,所以我在想怎样避免这个弊端,提高脚本开发效率,自动录制是开发脚本最快的一种方式,而且对脚本开发人员的要求很低,于是我开始把目光回归到QTP这一最简单最基本的功能上。开始设计一个属于我们“菜鸟”的测试框架。(其中借鉴了《QTP项目应用与进阶》中测试用例模板)
这个框架(相对于第一个框架)的优点:1、降低人员素质的要求,使用例的脚本开发人员不需要懂得太多QTP方面的专业知识,只要掌握简单的录制回放过程和脚本增强就可以,这样避免有些人整天忙有些人“没事”做了,从而达到资源的充分利用。2、提高脚本开发效率。
这个框架(相对于第一个框架)的缺点:调用外部ACTION相对复杂一点,需要明确知道该ACTION所在脚本的位置,不过这一点可以通过文档解决这个问题,制作一个 ACTION列表就可以了。2、对象库维护比较烦琐。假设页面元素的属性发生变化,那就要UPDATE所有使用到该页面元素的脚本中的对象。
由于这个框架写在了“丫头”的毕业论文中,目前她还没答辩,为了避免不必要的麻烦,所以这里就不详细写了(大家看了附件的框架实例就应该能明白我的思路了)本实例是使用QTP10.0录制的,重点阐述的是一种思想,脚本中很多功能未加入。例如:自动加载插件的功能,不过大家可以自己加一下(QTP自动化对象模型参考中有加载插件的代码),另外QTP版本比较低的朋友可以自己录制下脚本替换掉Script文件夹下对应的脚本试下。若要设置脚本运行时QTP可见,可以将函数driver()中的qtapp.visible=False修改为qtapp.visible=True
最后,如果哪位朋友有什么好的建议或觉得哪里需要改进,可以给我留言,如果有时间我会试着改进一下,另外写的不好的地方也请多多指正,谢谢!
向大家推荐2本QTP相关的很不错书:
《QTP项目应用与进阶》 E测工作室(风过无息、斐明哲、黄先容、韩柳、俞戴龙 化学工业出版社
《QTP自动化测试实践》 陈能技 电子工业出版社
第一本书我买了而且前段时间看了,感觉很不错,思路很清晰,而且包含编码规范等自动化以外的的知识,感觉写的蛮好的。
第二本书最近才了解到这本书,不过没看过,朋友说很不错,正打算买呢,另外看了作者博客里的资料,感觉写的很好,所以就推荐大家看看,希望能对大家有所帮助,谢谢!
[ 本帖最后由 feiyunkai 于 2010-2-23 17:46 编辑 ]
thanks。对qtp还没有入门,不知道怎么入手
thanks。对qtp还没有入门,不知道怎么入手 收了,学习学习~ 看了下,源代码和《QTP项目进阶应用》差不多,鼓励下,不过楼主的总结我感觉没写好,框架的思路非常混乱,其实框架不是这样的,再比如很寻常的错误处理也没体现在你的框架中,也没写出来,既然写了,希望楼主能够继续完善下文章,总体还是不错的,只是框架这2个字用的不大好,套用的太“神秘”~至少我很费解~呵呵,鲜花一朵:) 路过!帮顶一下!!! 支持一下,加油! 原帖由 yujie6832 于 2010-2-23 10:08 发表 http://bbs.51testing.com/images/common/back.gif看了下,源代码和《QTP项目进阶应用》差不多,鼓励下,不过楼主的总结我感觉没写好,框架的思路非常混乱,其实框架不是这样的,再比如很寻常的错误处理也没体现在你的框架中,也没写出来,既然写了,希望楼主能够继续 ...
十分感谢你的意见,可能是我对框架的理解还不够,希望不吝赐教什么才是框架?以便于我的进一步学习,谢谢!
一、我对框架的理解:目前主流自动化测试框架的驱动模型大致有2种,一是数据驱动,二是关键字驱动。数据驱动的主要思想是脚本与数据分离,关键字驱动的主要思想是脚本与数据分离、界面元素名与测试内部对象名分离、测试描述与具体实现细节分离。本文采用的是数据驱动,严格的说应该是狭义的数据驱动,(狭义的数据驱动:实质是参数化的变体,即:数据指的是脚本运行时的输入数据,广义的数据驱动:数据指的是脚本运行时候的函数、ACTION或输入数据等)实例的思路是:驱动脚本从CASE文件中读取用例并打开QTP执行状态为RUN的用例,从函数库和数据文件调用/读取脚本运行所需要函数/数据,用例执行完成后记录结果并继续执行下一个状态为RUN的用例,所有用例执行完成,退出。
二、实例中确实未加入错误处理,比如插件加载不一致的处理方式,导入数据时的错误处理等,因为时间关系所以这些功能都没加,只是大致写了个思路。
三、《QTP项目进阶应用》这本书我在大约一个月前总共看了3个小时左右,主要看的是框架部分,可能看的比较粗吧。(如果我没记错的话)本实例的测试用例模板是引用书中的模板,代码实现方式和他们是完全不一样的,那本书中讲的和网络上《轻量级自动化测试框架》类似,使用描述性编程将所有的功能点写成函数的形式,然后执行用例时调用相应函数,实际过程中只是运行了一个驱动脚本,这样做的前提是要所有用例脚本都使用描述性编程编写。而我的实例是根据用例名称运行指定脚本用例,也就是每个脚本用例都是一个测试脚本,这里在实现方式上有很大的区别,至于源代码,,那也没什么可比性了。
再次感谢! 一是数据驱动,二是关键字驱动。
请问这两者之间是什么关系? 原帖由 xiaoyaoke 于 2010-2-23 13:36 发表 http://bbs.51testing.com/images/common/back.gif
一是数据驱动,二是关键字驱动。
请问这两者之间是什么关系?
关键字驱动实质是在数据驱动的基础上引申出来的,是对数据驱动的深化。
两者的区别:数据驱动EXCEL中保存的是数据,关键字驱动中保存的是关键字(包含:测试对象、测试操作、输入的参数等)
使用实例来回答这个问题,或许会更直观一点:
1、数据驱动实例比较多,例如《QTP项目应用与进阶》中的小型自动化测试框架,另外网络上流传比较多的《轻量级自动化测试框架》(见附件)
2、关键字驱动实例:见《QTP自动化测试实践》的作者陈技能在CSDN的博客,链接地址:http://blog.csdn.net/Testing_is_believing/archive/2008/06/27/2593103.aspx
《QTP项目应用与进阶》中好象也有实例,不过好象没看到网页版的,所以有书的朋友可以自己翻下看看
[ 本帖最后由 feiyunkai 于 2010-2-23 14:06 编辑 ] 原帖由 feiyunkai 于 2010-2-23 13:24 发表 http://bbs.51testing.com/images/common/back.gif
十分感谢你的意见,可能是我对框架的理解还不够,希望不吝赐教什么才是框架?以便于我的进一步学习,谢谢!
一、我对框架的理解:目前主流自动化测试框架的驱动模型大致有2种,一是数据驱动,二是关键字驱动。数 ...
我感觉关键字驱动和数据驱动还是叫模式比较好,个人拙见,呵呵,框架其实就是把很多工程师框在一起,我这么理解的,框架很抽象,而且越实惠越好,框架并不全是代码组成,其中也包括了理念等一些因素 原帖由 yujie6832 于 2010-2-23 14:08 发表 http://bbs.51testing.com/images/common/back.gif
我感觉关键字驱动和数据驱动还是叫模式比较好,个人拙见,呵呵,框架其实就是把很多工程师框在一起,我这么理解的,框架很抽象,而且越实惠越好,框架并不全是代码组成,其中也包括了理念等一些因素
谢谢,我也很赞同你的见解!学习了
回复 11# 的帖子
而且真的要搞框架,真的是需要大量的投入的,开发的投入,中国现在自动化也还比较少,更别提框架了,呵呵,能简单的用下QTP+QC就可以了,先把自动化搞起来再说啦:lol 这也是我对中国的测试界未来3年的展望,希望能看到自动化在大多数公司都有用武之地了!还有很多公司,自动化都搞不起来,就开始说先要干嘛干嘛,搞个框架什么的,一句话。。。无聊,呵呵~ 最近开始接触QTP,要立马实现在项目中,正在学习阶段。框架的概念偶也不清楚,总之,就是不知道如何下手。请教下楼主,你是怎么从一无所知到那么有思想的? 原帖由 yujie6832 于 2010-2-23 14:23 发表 http://bbs.51testing.com/images/common/back.gif
而且真的要搞框架,真的是需要大量的投入的,开发的投入,中国现在自动化也还比较少,更别提框架了,呵呵,能简单的用下QTP+QC就可以了,先把自动化搞起来再说啦:lol 这也是我对中国的测试界未来3年的展望,希望能看 ...
呵呵,是啊,我现在上班的这家公司,1年前打算实施功能的自动化测试(性能一直在做),半年前装了QC,到现在也没应用,可行性分析的时候,首先人员技能要求达不到,其次项目稳定性比较差,再次项目需求经常变动,自动化投入要比手动投入的人力时间等资源要更多,所以应用自动化的性价比不高,我觉得应该先搭个简单点自动测试模型,满足基本需求就可以,在个别比较稳定的项目中先试点,等条件允许了再做新的打算。 原帖由 tongxj80 于 2010-2-23 14:33 发表 http://bbs.51testing.com/images/common/back.gif
最近开始接触QTP,要立马实现在项目中,正在学习阶段。框架的概念偶也不清楚,总之,就是不知道如何下手。请教下楼主,你是怎么从一无所知到那么有思想的?
其实也算不上什么思想,胡乱学的,呵呵
第一步:看别人的实例,掌握实例的思路,将该实例套用到自己项目中。
第二步:思考这个实例有什么不足或者需要改进的地方,然后改进,总结出属于自己的东西
在这过程中,多看论坛多提问多摆渡多总结,我就是这样从只会简单的录制/回放到自己写驱动脚本的。每个人的学习习惯不同,我的习惯是先学习后改进,有的人是边学边改进,根据自己的习惯去学吧,一起加油!
[ 本帖最后由 feiyunkai 于 2010-2-23 17:25 编辑 ] 另外,还有个问题,就是我已经装了.Net addin,且也可以用.Net windows forms spy,但是我用这个工具去捕捉我们用C#开发的软件时,提示The QuickTest .Net windows form spy works only on windows form control。实际上这个软件里的控件都是dotnetbar里,为何会这样呢?
可以试下以下方法
你用的QTP版本是什么?是否安装了.NET 3.5 Framework?据我所知,QTP9.2和.NET 3.5 Framework同时安装时,会出现这种情况,解决方法:卸载QTP及插件,卸载.NET 3.5 Framework,安装.NET 3.0 Framework,安装QTP及插件。如果还是解决不了,可以向斑竹:风过无息、陈技能他们求助,祝你成功,谢谢![ 本帖最后由 feiyunkai 于 2010-2-23 15:18 编辑 ]
回复 17# 的帖子
谢谢,回头我试下,我用的版本是9.2的。而且我的电脑一旦开了QTP软件,IE浏览器就不能用了,很奇怪,在别的电脑上没这个问题。另外,请教一个问题,一个action里包含几个testcase?这个是如何定义或管理的?
[ 本帖最后由 tongxj80 于 2010-2-23 15:30 编辑 ] 原帖由 tongxj80 于 2010-2-23 15:23 发表 http://bbs.51testing.com/images/common/back.gif
谢谢,回头我试下,我用的版本是9.2的。而且我的电脑一旦开了QTP软件,IE浏览器就不能用了,很奇怪,在别的电脑上没这个问题。
另外,请教一个问题,一个action里包含几个testcase?这个是如何定义或管理的?
问题一:可以参考以下帖子http://bbs.51testing.com/thread-134240-1-1.html
问题二:这个一般根据个人习惯,很多人习惯将每个功能点作为一个ACTION,然后根据TESTCASE的相关功能去调用相应的ACTION,这样可以提高脚本的可重用性。我觉得这样蛮好的,可以少写不少脚本,呵呵 正要学习QTP 多谢啦
页:
[1]
2