More Related Content Similar to Qtp自动化测试技术领航(样章) Similar to Qtp自动化测试技术领航(样章) (20) Qtp自动化测试技术领航(样章)2. 第 1 章 测试脚本开发从零开始...................................................................................4
1.1 自动化测试从零开始...........................................................................................................................4
1.1.1 你真的了解自动化测试吗?......................................................................................................4
1.1.1.1 引言.....................................................................................................................................................4
1.1.1.2 自动化测试能做到什么及其优势,你心知肚明吗?.......................................................................5
1.1.1.3 自动化测试无法做到的事及其劣势分析..........................................................................................6
1.1.1.4 何时适合引入自动化测试..................................................................................................................7
1.1.1.5 何时避免展开自动化测试..................................................................................................................8
1.1.1.6 “江湖传言”解读、思考和经验总结...................................................................................................9
1.1.2 严格的自动化测试流程............................................................................................................15
1.1.2.1 影响自动化测试成功与否的关键因素是流程.................................................................................15
1.1.2.2 自动化测试项目“标配”.....................................................................................................................23
1.1.3 自动化测试用例设计详解........................................................................................................24
1.1.4 教父级自动化测试工具 Quick Test Professional.....................................................................27
1.1.5 总结............................................................................................................................................29
知识点巩固和举一反三练习..............................................................................................................30
1.2 帮助文档(HELP) - QTP 的说明书....................................................................................................31
1.2.1 永远任劳任怨的良师益友“F1”................................................................................................31
1.2.1.1 “F1”的简单介绍................................................................................................................................31
1.2.1.2 如何获取最新的帮助文档................................................................................................................34
1.2.2 妙用 F1 可事半功倍..................................................................................................................35
1.2.2.1 焦点功能引导....................................................................................................................................35
1.2.2.2 脚本定位跟踪 ..................................................................................................................................37
1.2.3 请遗忘脑中的代码,掌握查阅 Example 实例技巧.................................................................39
1.2.3.1 封装方法实例查阅............................................................................................................................39
1.2.3.2 VBScript 方法函数查阅....................................................................................................................42
1.2.4 总结............................................................................................................................................43
知识点巩固和举一反三练习..............................................................................................................44
1.3 录制与回放 – QTP 的开关................................................................................................................44
1.3.1 请拒绝“录制”,再开始你的实际项目之旅..............................................................................44
1.3.1.1 引言...................................................................................................................................................44
1.3.1.2 一些“理论性的社会实际问题”实例..................................................................................................45
1.3.2 录制功能更多的只是新人学习时的利器,仅此而已............................................................47
1.3.2.1 Don’t Waste Time,录制相关功能只需把握几个重点......................................................................47
2
3. 1.3.2.2 为什么说录制是学习利器,有根有据,请听我细细道来.............................................................62
1.3.3 录制时需注意模式的切换........................................................................................................64
1.3.3.1 三种录制模式的基本介绍................................................................................................................64
1.3.3.2 Analog Recording 和 Low Level Recording 的区别与规则..............................................................66
1.3.4 有必要让你掌握尤其重要的 QTP 回放机制...........................................................................67
1.3.5 总结............................................................................................................................................78
知识点巩固和举一反三练习..............................................................................................................79
第 3 章 项目应用高级扩展实例精讲........................................................................81
3.1 正则表达式.........................................................................................................................................81
3.1.1 请允许我告诉你何时在脚本中设计正则表达式....................................................................81
3.1.2 正则之对象属性参数化应用详解............................................................................................82
3.1.3 RegExp 对象的应用讲解...........................................................................................................87
知识点巩固和举一反三练习..............................................................................................................91
3.2 HTML DOM.......................................................................................................................................91
3.2.1 你了解 DOM 在 QTP 中应用的好处吗?................................................................................91
3.2.1.1 什么是 DOM.....................................................................................................................................91
3.2.1.2 何时在 QTP 中使用 DOM.................................................................................................................94
3.2.2 IE 对象模型结合 HTML DOM 的 Web 应用.............................................................................95
3.2.3 DOM 在 QTP Web 测试中的应用 ........................................................................................103
3.2.3.1 如何在 QTP 中使用 DOM...............................................................................................................103
3.2.3.1 如何在 QTP 中使用 DOM 操控各类 HTML 元素..........................................................................103
3.2.3.1 利用 DOM 完成 QTP 无法完成的任务..........................................................................................107
3.2.3.1 利用 DOM 提升性能.......................................................................................................................108
3.2.4 总结..........................................................................................................................................110
第 5 章 QTP 领先技术之模式设计..........................................................................111
5.2 GUI 层面向对象的扩展设计...........................................................................................................111
5.2.1 层的概念..................................................................................................................................111
5.2.2 封装测试对象类......................................................................................................................111
5.2.3 调用业务行为..........................................................................................................................114
5.2.4 对象识别结果分析..................................................................................................................114
3
4. 第 1 章 测试脚本开发从零开始
1.1 自动化测试从零开始
--阶段要点--
自动化测试的优势与劣势
引入自动化测试的条件
避免自动化测试的因素
实例解读软件测试自动化
严格的自动化测试流程
自动化测试用例设计详解
1.1.1 你真的了解自动化测试吗?
1.1.1.1 引言
“自动化测试”,一个耳熟能详的软件测试行业术语、一个绝大部分测试界人员的奋斗目标、
一个听上去就很有感觉的名词、一个甚至能牵动未来测试界发展水平快慢的技术。是的,以上
说的几点都没有错,它就是软件测试行业中最高端的技术之一,测试自动化技术!它以程序测
试程序、以代码代替思维、以脚本的运行代替手工测试。自动化测试同时涵盖各种各样的测试
种类,常见的有以下几种:功能(黑盒)自动化测试、功能(白盒)自动化测试、性能测试、
压力测试、GUI 测试、安全性测试,它们都可以由测试自动化技术来代替手工测试,其实还有
很多很多,作者只是概括了大家都熟悉的软件测试种类,其它的诸如作者曾经有收到过这样一
个问题,这名测友问:“网络游戏的功能可以引入自动化测试吗?”虽然作者并没有游戏行业的
软件开发测试经验,但是作者确信,网络游戏一样也可以引入测试自动化技术,为什么?因为
网络游戏同样是用程序写出来的,只要是一种程序,那么它一定能用程序测试程序、用代码代
替思维、用脚本的运行为手工测试代劳!
可以这么说,自动化测试这个术语,每天都盘旋在我们的耳边,国内未来的测试行业的推动也
离不开自动化测试。所以,掌握测试自动化这门技术,对测试工程师来说,是至关重要的,我
们并不需要精通每种测试自动化技术,但是至少我们需要精通其中的一种,作者也认为,只要
精通其中一种,相信你在测试这个领域一定会占有一席之地,这门技术能带给你非常大的优势!
4
6. 逻辑,争取发现更深层次的缺陷,能做到这些,自动化测试可以说功不可没。
具有一致性和可重复性的特点。由于测试是机器自动执行的,每次测试的结果和执行
的内容与操作的一致性是可以得到保障的,从而达到测试可重复的效果。机器可以按照相
同的轨迹不断地执行测试并丝毫没有差错(即使错了也可以自动解决),但是人不能!
自动化测试脚本完全具有复用性。由于自动化测试通常以脚本的方式来实现,这样在
不同的版本之间,就有可能只需要做少量的维护甚至不做任何修改,实现在不同的测试版
本中使用相同的测试脚本执行相同的测试用例。
使软件更有信任度。由于测试是由机器自动代劳的,所以不存在执行过程中的疏忽和错
误,完全取决于测试的设计质量。一旦软件通过了具有说服力的自动化测试后,软件的信
任度一定会大大增加。机器是不会犯错的(即使犯错了也可以自动解决),但是人会!
多环境下测试。 我们知道,一个系统往往会被要求能支持各种不同的环境并稳定运行,
但是这么多不同的环境,比如常用浏览器有 IE6、IE7、IE8、FireFox 等,系统有 Windows
2003、Windows XP、Windows Vista、Windows 7 等,甚至还有杀毒软件,如卡巴斯基、
360、诺顿等等那么多的环境组合,如果每一种环境组合我们都需要花人力物力去把功能
测试一遍的话,估计研发周期至少得增加 10 倍了!那么在这种情况下,自动化测试又可
以完全发挥其优势与作用了,由机器去代劳,在不同的环境组合中执行测试。
1.1.1.3 自动化测试无法做到的事及其劣势分析
当然,自动化测试不是万能的,它的能力仍然是有限的。世界上也没有真正万能的事物,
自动化测试同样有着各种各样的缺点和无法做到的事情。不过,人类是不断在进步的,测试自
动化技术随着人类进步的步伐也一定会越来越强大。作者同样归纳了最重要的一些自动化测试
的劣势以及它力不能及的事情,下面让我们一起来看看吧。
永远不可能完全取代手工测试。自动化测试不能完全替代手工测试,这已经是业界中
不需要再争辩的事实了。自动化测试无法做到手工测试的覆盖率也不适宜去这么做。不是
每个测试用例都适合转换成自动化测试用例的。另外,复杂性极强的操作也只能通过手工
测试来完成,如果将这个复杂的操作写成代码那将会是件大麻烦事。还有一个例子也能证
明,就是比如我们当前需要验证页面上的布局是否正确,那试问这该如何写成脚本代码呢?
无法完全保证测试的正确性。上面也说到了,自动化测试是由测试脚本组成,它的核心
仍然是代码,说的简单点,自动化测试就是程序测试程序。我们知道,是程序就一定会有
缺陷,所以我们不能保证测试工程师开发的脚本就完全 100%没有缺陷,如果代码中出现
一个小小逻辑错误,哪怕一个条件判断的误写也会导致测试结果完全出错,当然对于一个
有经验和优秀的自动化测试开发工程师来说,大多数的错误还是会在脚本调试中避免的。
手工测试能发现的缺陷远比自动化测试多。可以这么说,有 85%的缺陷是归功于手工
测试的,而只有 15%的缺陷归功于自动化测试(注意:这个标准并不是作者随便乱说的,
6
7. 而是由全世界的自动化测试专家共同总结得出的一组数据结论)。而且在这 15%中,大约
只有 0.1%不到的缺陷属于新缺陷。的确,自动化测试几乎是无法发现新缺陷的,自动化
测试大多是用来发现曾经发现过的缺陷在每个版本下有没有重新出现。当然,我们情愿自
动化测试永远不要找出缺陷!作者认为,自动化测试更适合缺陷预防而不是发现更多缺陷。
请记住,自动化测试最大的用途就是回归。。。回归。。。回归。。。再回归。。。。。。
对测试质量的依赖性极大 。自动化测试的运行首先要建立在版本测试质量(在这里基
本指手工测试质量)稳定的大条件下,如果当前版本的测试质量不够稳定,运行自动化测
试将会非常的不顺利,几乎是一种无用功和白白浪费时间的行为。
测试自动化可能会制约软件开发。由于自动化测试比手工测试更脆弱,以及脚本维护
会受到限制,从而制约软件的开发。
自动化测试工具是死的,它本身没有任何想象力。自动化测试是无法做到像人类一样
随心所欲的创造的,自动化测试的好坏,完全取决于自动化测试负责人和测试开发工程师
的思想与技术,和自动化测试工具没有任何关系,工具是没有思想的,所有的操作全部由
人通过输入代码的方式告诉工具它该怎么做。所以,自动化测试工具的智商为 1,仅有的
智商只能让它做到“听话”而已!
成本投入过高,风险大。自动化测试需要很大的成本投入,并且如果没有良好的成本分
析与控制手段以及自动化测试计划与执行过程控制,那么失败的自动化测试案例数不胜数,
导致企业白白浪费人力物力还得不到任何回报。
自动化测试对测试人员的技术要求较高,对测试工具同样有一定要求。自动化测试
对测试工程师来说必须有一定的开发技术背景,开发技术越高则写出来的脚本质量也就越
高、越有技术性和想象力。不是每个测试工程师都适合或有能力开发质量好的测试脚本的。
同样,也不是每一个测试工具能真正的被使用在真实的项目中并驾驭项目的,也没有听说
过有一个自动化测试工具能做到适合每一个项目。
1.1.1.4 何时适合引入自动化测试
在之前的章节中,通过作者的总结和实例分析,相信读者已经对自动化测试的特性和它们
的优劣有了一定层次的了解,接下来,在本节以及下一节中,作者想和读者分享一下在我们的
实际项目中,关于自动化测试成败的点点滴滴。
在我们的自动化测试中,作者必须让读者知道哪些情况下才适合把项目的系统测试交给自
动化测试来完成。好比有一匹宝马,如果你不了解它的脾气与秉性,你也很难驾驭它,甚至反
而会被它所累。自动化测试其实就如一匹宝马一样,使用得当它将会是你很好的伙伴,帮助你
完成很多事情,但是如果不能善加利用,则给自己或者组织造成的后果还是比较严重的。下面
让我们一起认知何时才比较适合做软件测试自动化吧!
项目周期长,系统版本不断。如果你目前所在测试的项目(或系统)是属于一个周期比
7
8. 较长的长期项目的时候,可以说,的确非常适合引入自动化测试,把大量的回归测试托付
给测试自动化是一个比较明智的选择。还有一种根据是从系统的版本数得来的,曾经全世
界的测试领域专家有过相关的研讨并最后得出结论,一般自动化测试耗费的时间是手工测
试的 6~10 倍,所以,如果你所在的项目(或系统)如果版本数在 10 个以上,那么引入测
试自动化也同样非常的睿智,并且和之前的项目周期综合下,时间越长随之而来需要测试
的版本就会越来越多,这样自动化测试可以发挥它最大的作用,给企业带来各方面的利益。
需求变更不频繁。当项目的需求非常的稳定,不会经常出现变更的时候,此时也很适合
引入测试自动化。
系统中的测试对象基本可以正常识别。一般来说,自动化测试的基本要求或者说自动
化测试工具对系统的基本要求就是对象的识别,一个自动化测试工具的好坏评判最基本的
标准就是是否能够识别更多的系统控件以及对无法识别的控件能否提供各种解决方案或自
定义开发各种控件的识别代码。
系统中不存在大批量第三方控件。有实际项目经验的读者一定会发现,无论什么系统,
B/S 架构的也好、C/S 架构的也行,多少存在一些第三方控件,但是如果这些第三方的控
件如果数量不多的话,经过详细的计划与评估后,完全可以引入测试自动化,当然如果第
三方控件数量庞大或者形式种类庞大的话,就会带来很多麻烦,在下文中也会提到。
需要反复测试,如可靠性测试需要进行上千次的系统测试。在我们的 1.1.1.2 章节中
的第一条例子中作者也有提到过类似的情形。在项目中,如遇到这种情况,从理论上讲是
相当适合使用自动化测试策略的,当然,前提条件是有能力把自动化测试做好,如果遇到
这种情形,测试自动化实行最后成功的话,一定能给整个项目团队带来“丰功伟业”!
1.1.1.5 何时避免展开自动化测试
在上一节中,作者归纳了自动化测试的适宜条件,但是万物都有另外一面,自动化测试
也有很多禁忌,作为一名测试工程师或者未来的自动化测试工程师来说,好话要听,坏话同样
也要听。如果触犯了禁忌还要执着的做下去的话,后果也只有一个,就是自讨苦吃,给企业、
项目团队带来损失、使得领导以后再也不信任自动化测试、使自己对测试自动化技术更加迷茫!
接下来,作者以自己多年自动化测试实战经验以及学习经验,一定要告诉读者,在自动化测试
中,哪些是犯了大忌的,读者务必吸取前人的教训,扬长避短,如果以后在项目中和以下任何
一条有冲突,千万不要开展自动化测试。
项目周期短,需求变更频繁。当你发现你的项目周期不是很长的情况下,请不要引入测
试自动化,因为这样的话,不但收不回成本,而且会延长产品的发布时间并且这样的行为
是毫无意义的!作者在 1.1.1.3 中的第一条也已经提到了,自动化测试的成本计算方式及
其计算实际参照,在这里则不再多加阐述。当然,还有一个问题,相信有项目经验的读者
一定会碰到过类似的问题,即使这个项目是一个长期的项目,但是客户经常性的更改需求
8
10. 测试的认识带入一个更深、更高层次的境界。作者希望将其多年看到的、听到的以及正在做的
一些自动化测试相关的事情和经验通过几个实例分享给每一位读者!
古人有云:“分久必合、合久必分!” 在自动化测试界也一样,大约在公元 2003 年以前,国
内的软件测试也才刚刚起步不久,那就更别说什么自动化测试了,可以说几乎在企业中是没有
的,包括大型企业,真可谓是个传说。
大约也就过了 2 年不到吧,随着软件测试行业的迅速发展,真可谓是“分久必合”吧。由于
国内的测试整体水平要向全世界的测试水平靠拢,那么行业内突然大量开始流传自动化测试了,
大家众口齐心努力并梦想着将软件项目中的测试工作交给自动化来完成,有些比较大型的公司
也逐步开始展开切实的工作。
随着时间的推移,慢慢的,国内的自动化测试水平也得到了很大的提高。但是,世间万物
永远是这样,太平日子长了,团结的日子长了,总有一天会变的不太平,变得纷争不断!这股
“合久必分”的趋势同样也将我们的自动化测试给卷了进来。各方言论,对软件测试自动化的信
任、排斥、误解、一知半解、半知半解,真可谓众说风云!
在软件自动化测试的江湖中(这里特指各大测试论坛)有着这样三种不同的传言,或者说
存在着三种并存且最具代表性的势力。三大势力各执己见。但是,他们对自动化测试的理解都
不够准确、深入或者根本就不了解这门技术可以给我们带来什么!在此,作者分别用“势力
A”、“势力 B”、“势力 C”来代表。其中“势力 A”、“势力 B”相当认同自动化测试,但是他们又各
自有各自的想法,“势力 C”则认为自动化测试纯属银弹(见小提示 1)。下面让我们来看看这
三大势力具体的观点吧。
---------------------------------------------------------------------------------------------------------------------------
▲ 小提示 1 何为“银弹”?——银弹这个名词起源于《人月神话》这本书,在中文版中,它被
翻译成这样:“没有任何技术或管理上的进展,能够独立地许诺十年内使生产率、可靠性或简
洁性获得数量级上的进步。” 当然这只是小说中虚幻的东西,银弹永远不可能成为现实中的东
西。所以“势力 C”认为自动化测试只是一种传说,丝毫没有任何实用的东西。
现在作者把它引入到自动化测试中,并且觉得可以这么理解以及稍微分解了一下含义,相
信比较贴切“软件测试”。
软件规模越来越大,无法控制测试进度,将无法避免的风险性测试来比作恶魔,希
望测试自动化技术,能够像银弹彻底杀死恶魔那样,彻底解决这个问题。
希望测试自动化技术或者自动化测试工具能像“万金油”+“不老药”,能包治百病并
且效果明显,解决任何项目中遇到的测试问题。
*势力 A(极端支持型)*
首先,让我们看看“势力 A”的观点吧,属于该势力的门徒们这样认为,他们觉得:
10
11. 自动化测试几乎是万能的,在项目中引入测试自动化技术,可以解决测试中实际遇到的任
何问题。
就像“小提示 1”里所提到的,自动化测试工具是“万金油”+“不老药”,一劳永逸,一个强大
的自动化测试工具能在任何项目中充分发挥其作用。
自动化测试可以搞定任何测试种类,能出色完成项目经理下达的测试任务。
*势力 B(理智但一知半解型)*
然后,让我们看下“势力 B”又是什么观点,属于该势力的门徒们这样认为:
一个项目在成功运用自动化测试后,测试人员将变得非常轻松,在新功能加入后,只需要
将新功能的部分脚本开发完毕就可以继续全面的测试系统。
自动化测试能带来极快的测试速度,项目进度能够极快的完成,提前交付测试报告。
自动化测试可以完全覆盖测试覆盖率,没有任何测试风险。
*势力 C(极端反对形)*
最后,让我们看下“势力 C”的极端反对观点,属于该势力的门徒们觉得:
自动化测试纯属忽悠,只是为了彰显自己会开发,测试就该做好手工测试,这才是测试的
主旨,不然你去做开发得了!
自动化测试只能徒增企业的成本费用,得到的回报和付出完全不成比例!
引入自动化测试能带给我们的只是心理上的安慰!
-----------------------------------------精彩解读立刻开
始------------------------------------------
到此,大家应该也看出了作者的意图,巧妙地罗列和归纳了几种不同的言论,他们每个
“势力”的观念其实都带有明显错误性,接下来,作者将根据自己多年的自动化测试经验以及学
习经验来为读者逐条分析,通过分解后再巧妙地总结出自动化测试应用在项目中的重要特性,
只从项目角度出发,综合性的总结使读者能够真正更深入和细化地了解到底什么是自动化测试、
在项目中引入自动化测试到底能给企业、给项目带来什么!
#势力 A 错误分析#
该势力的门徒对测试自动化技术以及自动化测试工具可以说是过于的信奉和迷信。
关于第一点“自动化测试几乎是万能的,在项目中引入测试自动化技术,可以解决
测试中实际遇到的任何问题。”—→事实上,在真实项目中,不是每一个项目都适合自动化
测试的,某些项目它的的确确只适合用手工测试来完成,因为我们需要考虑引入测试自动化技
术后需要的投入有多大,是否会有产出。如果一个项目需求变更过快,或者业务逻辑过于复杂,
那么它绝对是不能引入测试自动化技术的,因为这往往会让整个项目陷进泥团,而且我们需要
11
18. 控件,所以对于项目来说是毫无作用的。类似的情况还有很多很多,作者在这里只是通过这个
例子来说明一下。
2、抽样 demo 分析
通过可行性分析后,应该说我们的步伐更接近一步了,同时也可以开始往下一步去做。接
下来要做的就是一个 demo 了,等待 demo 完成后可以再次通过分析看看自动化测试工作能否
顺利的展开下去,因为 demo 已经是一个实体案例,所以可以完全通过透析 demo 来发现是否
存在技术上的致命问题。通常在 demo 完成之后,有经验的自动化测试工程师或组长就能对这
个项目的自动化测试工作有一个大体的把握了。换言之,可以把 demo 看成更深层次的可行性
分析,一旦通过了抽样 demo 分析,自动化测试就可以展开了。关于 demo 的选取,我们一般
直接选择冒烟测试用例(大冒烟)写成测试脚本后执行,检查脚本是否能够成功运行通过,已
设计的测试点是否全部执行到即可。
3、测试需求分析
到了测试需求分析这一步,分析的就不再是能否在项目中引入测试自动化了,而是在为下
一阶段具体定制计划打下基础。测试需求其实就是测试目标也可看做测试自动化的功能点,也
就是自动化测试工程师想完成的任务。比如我们需要分析项目中具体哪些测试需求(功能点)
准备进行自动化测试。一条测试需求可以包含多条自动化测试用例,通过测试需求分析来判定
项目中测试自动化要做到什么程度。举个例子,在我们自动化测试用例的设计上,大体是以
正向、反向(见小提示 2)划分的,一般在自动化测试中,优先考虑实现正向的测试用例后再
去实现反向的测试用例,而且反向的测试用例大多都是需要进行分析然后筛选出来的,因为反
向的测试用例实在太多了,我们知道,自动化测试是不需要也没有必要做到 100%覆盖率的。
所以,回到主题,换句话讲,在测试需求分析这个阶段,确定测试覆盖率以及自动化测试粒度、
测试用例上的筛选等都是我们的重点工作。
---------------------------------------------------------------------------------------------------------------------------
▲ 小提示 2 自动化测试用例设计中的“正向”和“反向”指什么?——通俗点讲,“正向”测试用例
就是正常的业务操作流,几乎没有什么非正常情况操作融入在其中。反之,“反向”测试用例就
是异常的业务操作流。我们可以想象一下,我们做出来的软件是给谁用的?当然是给用户使用
的,一般情况下,用户在基本使用上不会像测试工程师那样去“破坏”,他们只关注软件的功能
是否好用、是否有异常、是否有差错。所以,“正向”的测试用例就是只针对正常的操作,不会
去考虑异常情况,当然,也必须是自动化测试脚本优先要写出来的。待把这些正常的业务操作
的测试脚本全部完成后,才去考虑加入部分最重要且优先级最高的“反向”测试用例进去,比如
一个注册页面中某表单的填写,用户一样比较关心系统对错误的处理情况,这时候,我们就需
要把自动化测试用例设计成“反向”的,然后加入到我们的回归测试中去。不过,“反向”测试用
例实在太多太多了,如果全部都写成脚本,那真的是没必要也不符合自动化测试的特性。将来
18
21. 结构化脚本:具有顺序、循环、分支等结构的脚本。
可共享脚本:可以被多个测试用例使用,被其它脚本调用的脚本。
数据驱动脚本:测试数据和业务流程控制分离的脚本,通过读入数据文件来驱动流程进行
的脚本。
关键字驱动脚本:脚本、数据、业务分离,数据和关键字在不同的数据表中,通过关键字
来驱动测试业务逻辑。关键字驱动脚本的特点是它看起来更像描述一个测试用例在做什么,
而不是如何做。
从上面五种不同的脚本特性,我们可以看到,自动化测试脚本开发的发展是和软件工程思
想的发展一脉相承的。软件开发的模式从面向机器、到面向过程、再到面向对象、面向服务,
是一个从底层到高层、从具体到抽象、复用的粒度从细到粗的发展过程。而软件开发中的模块
化、层次化、松耦合等思想对自动化测试脚本的设计与开发都具有借鉴意义。
作者认为,如果作为一名自动化测试新手,应该多学习并吸取前人的经验,在学习过程中
乃至平时的工作中不断地模仿、模仿后的深刻钻研、钻研后的尝试突破到最后的融会贯通,务
必循序渐进,不能急功近利!同时,作者也总结了几点关于自动化测试脚本开发的经验与感悟,
希望能给予读者更多的参考。
自动化测试脚本代码必须严谨、规范。
自动化测试脚本是参照自动化测试用例开发出来的,测试用例即是开发参照物。
发挥自己的想象尽一切可能使自动化测试脚本更智能、高效、稳定、复用性高。
开发过程中多利用程序插桩+断点,检查业务组件是否存在缺陷或代码是否存在漏
洞。
自动化测试脚本开发完毕后,请至少运行成功 3 次以上,方可认为脚本已经没有问
题。
此外,项目中也必须具备一款优秀的代码版本管理软件来管理好每一个测试版本的自动化
测试脚本,这也是自动化测试项目中非常重要的环节。仍然是那句话,自动化测试开发工程与
软件开发工程一脉相承,自动化测试工程师同样是一名开发工程师。
六、自动化测试执行
这个阶段可以说已经是自动化测试流程中的后期阶段了,所有的自动化测试脚本全部开发
完毕并发布后会进入合并联调阶段,脚本联调(见小提示 3)成功后方能进入这一阶段。
---------------------------------------------------------------------------------------------------------------------------
21
22. ▲ 小提示 3 不要小看了“脚本联调”——这段时间其实是最头疼的,也是很关键的一个时期,
联调如果不通过是无法走到下一个环节的,而且一定还会伴有一种内心崩溃感觉,毕竟都到了
这个阶段了,已经花了多少工时了!想要联调的时候顺利点通过,功夫还得花在平时!平时写
代码规范点,严格按照规范标准去写代码,到了这个阶段遇到的问题就少,即使发生了也好解
决。如果平时就不注意,脚本开发过程中图快、图方便、嫌麻烦,那么到了这个阶段,你一样
会浪费同样甚至用更多的时间来回炉重造!
这个阶段的开始也就意味真正的自动化测试开始了。很开心,辛辛苦苦写的脚本终于有了
用武之地,系统开始进行“自动化测试”!既然是自动化测试,那当然可以由机器来测试啦,人
就不用管了,而且出了问题机器自动帮我们解决掉问题并重新自动测试。
1、无人值守的测试
使测试自动执行,大致会经历以下步骤:
---环境搭建、部署与配置---
首先搭建一个自动化测试执行环境是必不可少的,这部分的功能往往以自动化测试框架来
支持,此外市面上还有很多类似的批量脚本执行工具也可以做此类的操作。如果是自动化测试
框架支持的话,我们通常需要根据实际情况做相应的配置使其生效。
---自动化测试用例和测试脚本互相绑定---
接下来的工作就是将我们写的自动化测试脚本与当初设计的自动化测试用例做关联和绑定
了(这部分在前期也可以做)。
---自动化测试用例执行顺序排列与组合---
在完成了上面的工作后,我们就可以创建一个测试集,在测试集里添加各种各样的自动化
测试用例了。当然,根据业务实际情况,测试用例的先后排列顺序和各种组合是非常有讲究的。
2、异常处理&场景恢复
俗话说:“天有不测风云”。谁都没法预料在自动化测试过程中会碰到什么问题,系统服务
器崩溃?电脑卡机?服务器无响应?很多很多情况,如果发生了这些情况怎么办?如果在白天
的话,自动化测试工程师守候在执行机器旁边那还好,我们重新花时间急救下。那如果晚上呢?
如果发生意外,我们的自动化测试工作就要被迫停止了?当然不行!这个时候,一个优秀的异
常处理与场景恢复机制就显得尤为重要了,有了这个机制,我们才能放心的将测试交给机器执
行。在本书以后的章节中,也会详细和精辟地分享这方面的具体内容。
3、一个自动化测试执行实例
在本阶段讲解的最后,作者举一个 QC 自动化测试框架(HP 公司产品 Quality Center,一
款集测试解决方案、测试流程管理、缺陷管理的工具,其本身也是一个自动化测试框架)的例
子,其实也算是一整个过程:
我们将测试脚本上传至 QC 服务器并与相应的测试用例绑定。最后,我们可以生成一个测
22
23. 试集,测试集里可以导入之前设计的测试用例,如果导入的用例和脚本有过绑定,则脚本也随
之自动加载到测试集中,我们只需要点击“执行”按钮,QC 就会自动帮我们执行脚本,开始测
试了。
如果在执行过程中发生意外情况,只要你预先设置了各种异常情况及其处理应对方式,
QC 就会自动地帮你进行处理,并把测试场景恢复到你预置的状态重新悠哉地自动执行测试。
等测试集中的测试用例全部运行完毕后,QC 就会显示这些测试用例的运行结果并生成图
表然后自动将缺陷提交到服务器中,方便测试工程师了解自动化测试运行以及完成的情况乃至
缺陷情况。
七、提交自动化测试产物
这个阶段,是对自动化测试项目开展、实施的反馈。通常,在自动化测试执行后,我们大
致需要提交执行情况、测试结果、分析报表、测试报告、质量情况等(具体每个项目都会有所
不同)。其实细心的读者应该能察觉到,在上面那个阶段讲解最后的实例中,已经有这个阶段
的影子了。
值得开心的是,在提交了自动化测试产物后,自动化测试就算大功告捷了!接下来,我们
通常需要做一些会议总结、经验分享、自动化整体测试过程分析、自动化测试项目改进建议等
工作,为了在后续的版本使自动化测试能取得更大的硕果。
八、测试脚本维护
其实到了“提交自动化测试产物”这个阶段,一个自动化测试流程就算是圆满了。测试脚本
维护阶段不能单纯的被看作是一个阶段,因为测试脚本维护的工作是时刻穿插在各个阶段中的
(“第五阶段 测试脚本设计与开发”开始)。严格来讲,每个阶段都在做测试脚本维护的工作。
只是,测试脚本维护对于整个自动化测试项目非常的重要,也是需要做最久的一项工作,所以,
作者将其单独列为一个阶段来讲解。
自动化测试脚本维护也是一个持续性的优化过程,总是不断地在优化、改进、修正。作者
觉得,做自动化测试做的最多的还是“维护”!不值得“维护”的自动化测试项目是不值得立项的!
1.1.2.2 自动化测试项目“标配”
了解了自动化测试流程的繁琐与严格后,再让我们了解下自动化测试团队的人员标准配置。
从目前国内企业实际角度出发,算上自动化测试项目管理人员,我们以 5 人的团队为例。
先让我们看下这 5 人团队内存在的角色及其角色定义:
自动化测试组长:自动化测试团队的最高管理,拥有发言权。负责自动化测试项目从自
动化立项到进度实施到验收报告等整个测试流程;负责团队人员调度与管理;负责与上级
领导、项目经理、手工测试负责人沟通与协调并带领整个自动化小组工作。
高级测试开发工程师:团队中技术最牛的角色,通常负责自动化测试框架的设计与搭建;
23
28. 图 1.1-2
从图 1.1-2 中可以分析出,从 2005 年到 2006 年左右,WinRunner 一直是霸主的地位,占
有率最高,而从 2007 年开始 QTP 慢慢的兴起,开始有超越 WinRunner 的势头,这段时间
Mercury 已经停止了 WinRunner 的版本更新下载以及服务,而把主要战略方向转投向他们近几
年非常成功的 QTP。从 2007 年后半年开始,WinRunner 开始走下坡路,而此时 QTP 和
Selenium 正以十分迅猛的势头赶超上来。直到今天,QTP 成为了最终的霸主,而 Selenium 排
行老二,WinRunner 只能位居第三,其余自动化测试工具基本没有多大的变化。不过趋势图有
些地方还是只能作为参考的,而且这张数据图的出处在国外论坛,不能完全反应国内的一些情
况。作者个人感觉目前 Web 测试中开源的 Watir 测试框架在全球也有一定的市场占有率。那么
接下来我们就来看一下商业化自动化测试工具 QTP 的霸主实力。这里作者就拿 QTP 与 Watir
进行一个简单的对比作为参考。
功能
QTP Watir
录制 支持 不支持
被测系统 支持 B/S 和 C/S 不支持 C/S
对象识别 强 弱
对象库 支持 不支持
IDE
强 弱
回放 速度快 高亮定位
脚本编写 方便 快速
28
29. 支持语言
VBScript Ruby
函数库 支持 支持
测试结果 支持 需要开发扩展
与其他测试工具联动 支持 不支持
自身扩展 弱 强
价格 昂贵 免费
可以看出,在此表中,QTP 很多非常强大的地方都是 Watir 无法比拟的。当然,此表也只
是列举了一些表面功能上的对比,QTP 还有许多更深层次的功能是其它任何自动化测试工具所
无法比拟的。不过呢,任何事物都有两面性,有好的一面也总有不大好的一面,QTP 最大的缺
点就是价格想当昂贵(在国外还稍微好点,在国内 1 美元等于多少人民币啊!),而且由于其
商业工具的特殊性所以不可能开源,导致无法对测试工具本身的核心进行个性化的扩展定制。
这点 Watir 就比较好了,虽然有很多功能没有 QTP 那么强大,但其开源的特性使得我们可以对
其进行随意的修改和扩展,可以把需要实现的功能进行二次扩展开发,同样也可以使其成为一
款非常强大的自动化测试工具。不过这肯定需要非常强大的编程功底以及一定的开发工作量,
需要投入大量的时间和精力。以上所有对自动化测试工具好坏的评论只是作者个人的一些看法
和经验,如有雷同,不甚荣幸!因为每个人对不同自动化测试工具的看法会有所不同,因此,
这里仅供读者作为参考。
从下一章开始,本书将对教父级自动化测试工具 QTP 进行深度的剖析,同时结合大量新
鲜实例,使读者能够在实际项目中掌握 QTP 的应用。内容会由基础核心到高级扩展到领先技
术再到框架展示,洋葱式的层层深入让读者能够由浅入深的掌握好测试自动化这一门技术。
1.1.5 总结
本章节是作者根据其多年的自动化测试项目实战经验和学习经验的一个深度总结和精
华内容。可以使读者绕开弯路,循规蹈矩地深度认知到底什么才是自动化测试以及其中的
一些精髓理论!章节内容以理论为主宰,当中穿插了大量的实践、实用元素,读者看到的
都是最贴近真实的论点。作者觉得,必须有了牢固的实用型基础理论然后再继续深入阅读
本书后面的实用型技术内容才能实际掌握测试自动化这门技术。
作者也相信,即使是理论方面的知识,只要用心去写,一样能够写的很生动、精彩!
本章节的所有内容面向的主体是自动化测试的新手朋友,通过本章节的学习,相信一定可
以使这些同仁茅塞顿开。
29
30. 知识点巩固和举一反三练习
一、请审题后根据题目的素材设计“最最简单的登录功能”的自动化测试用例。
素材 1:系统名称<XX 自动化测试用例设计练习系统>;B/S 架构
素材 2:整个登录功能的验证只涉及 2 个页面<登录页面>、<内容页面>
素材 3: “登录页面”具备 4 个控件[用户名输入]、[密码输入]、[登录]、[重置]
素材 4:“内容页面”中存在文字<欢迎回来,xx>;具备 1 个控件[退出系统]
素材 5:该系统如果不去手工清除 IE 缓存,不点击[退出系统],直接关闭网页,下次访问无需
重新登录,直接以已登录状态访问<内容页面>,非常方便。
素材 6:在“素材 4”中,内容页面里的文字专门用作检查登录系统是否成功
二、请根据要求将手工测试用例转化成自动化测试用例。
手工测试用例设计表
用例编号 所测功能模块 作者 版本
TEST01
注册模块 余杰
V1.0
步骤序列 业务操作描述 预期结果 实际结果
1
进入“XX 自动化测试用例设计练习系统”首页 进入系统首页
2
点击[注册]按钮 进入注册界面
3
输入有效的[用户昵称] 字段验证通过
4
输入有效的[账户密码] 字段验证通过
5
选择有效的[密码找回问题] 选择成功
6
输入有效的[密码找回提示问题答案] 字段验证通过
7
点击[确定]按钮 注册成功,进入“下
一个”页面且生成
“用户账号”
要求 1:需要验证点击[注册]按钮后是否能够成功进入注册页面
要求 2:“用户昵称”需要在测试脚本中验证字段
要求 3:需要验证注册完毕后系统的反应
附:自动化测试用例设计表模板参照
用例编号 所测功能模块 作者 版本
ATC01
注册模块
步骤序列 业务操作描述 预期结果 测试所用数据
30
31. 1
进入“XX 自动化测试用例设计练习系统”首页 进入系统首页
…
… … … …
.. … … …
1.2 帮助文档(HELP) - QTP 的说明书
--阶段要点--
F1 的简单介绍
焦点功能引导法
脚本定位跟踪法
查阅 Example 实例技巧
1.2.1 永远任劳任怨的良师益友“F1”
1.2.1.1 “F1”的简单介绍
F1 这个地球人都熟悉的代名词,相信很多朋友都不会陌生,举个最简单的例子,当用户打
开 windows 自带的 notepad,按下 F1 后,系统就会自动弹出 notepad 的帮助文档,如图 1.2-1:
31
32. 图 1.2-1
不止是 notepad 有 F1,微软 office 的 Word/Excel/PowerPoint 有 F1, QQ/MSN 有 F1,IE 有
F1,甚至是 windows 的桌面也会有 F1,不管到哪里,不管你使用的是什么软件,F1 总是能如
影随形的跟着我们,在我们最需要的时候给予我们最大的帮助。这就是 F1,在你刚刚入门时,
它会成为你的向导栏;当你处于迷茫中,它会成为你的指路牌;当你准备学习前,它会成为你
的教科书;当你需要查询时,它将成为你的小词典。因此 F1 不仅有用,还是必须的。
接下来就来看一下 QTP 中 F1 的使用,首先打开 QTP,切换到 Expert View 后,点击 F1,
就可以看到 QuickTest Professional Help 文档,如图 1.2-2:
32
33. 图 1.2-2
从图中我们可以看到有 4 个 tab,在第一个 tab 中我们可以看到一共有 8 本书:
Welcome
大致对 QTP 做了下简单的介绍以及帮助文档的使用与更新
What’s New in QuickTest Professional
主要介绍了当前 QTP 版本的一些新特性
HP QuickTest Professional User Guide
QTP 的一些基本知识,建议初学者能认真的把这本书通读一遍
HP QuickTest Professional for Business Process Testing User Guide
介绍如何使用业务组件功能来进行测试
HP QuickTest Professional Add-ins Guide
对 QTP 所有支持的插件的使用方法进行了简单介绍
HP QuickTest Professional Object Model Reference
用于查阅 QTP 所有封装对象的接口与用法
HP QuickTest Professional Advanced References
QTP 的一些高级用法,需要深入学习的建议读一下
VBScript Reference
33
34. 对 QTP 的平台语言进行详细的介绍,查阅时也相当有实际用途
1.2.1.2 如何获取最新的帮助文档
如果需要获取 QTP 最新版本或者任意版本的帮助文档,可以直接打开 IE,进入
http://h20230.www2.hp.com/selfsolve/manuals (需注册登录)
如图 1.2-3 所示:
• Product:
QuickTest Professional
• Product Version:
选择需要的版本
• Operating System:
Windows
图 1.2-3
按要求选择产品以及所需要的版本并点击 search 按钮后,页面下方即会显示所有文档的列
表。左边一栏是标题,右边一栏是文档更新的日期,如图 1.2-4:
34
35. 图 1.2-4
1.2.2 妙用 F1 可事半功倍
做任何事情都会有一定的方式方法,好的方式方法可以达到事半功倍的效果,比别人付出
一半的努力却能达到双倍的效果乃至更多,这才是我们所推崇的。作者一直认为学习需要的是
好方法,多实践,勤总结。下面我们就来看一下如何才能更好的去利用 F1 来解决我们实际中
碰到的问题。
1.2.2.1 焦点功能引导
之前说过 F1 对于新手来说是个非常有利的工具,它可以引导用户熟悉 QTP 的每项功能。
我们绝对不需要死板地把 F1 里所有的内容和知识点一个个啃完,其实当打开 QTP 的同时,F1
35
37. 焦点切换到 SPY
图 1.2-7
无论焦点走到哪里,F1 都能精确地对内容进行匹配,可以充分利用此功能进行模块化以及
针对性的学习。对于能够熟练 QTP 的朋友来说,此功能也是非常有帮助的,因为我们不可能
把 QTP 的所有功能都一一吃透,大多数情况都只是对常用的功能比较熟悉,而当我们在项目
中遇到了瓶颈需要使用 QTP 的新功能或者新技术来解决问题的时候,我们在面对 QTP 的一些
不是很了解或者相对比较陌生的功能时就会显得束手无策,此时最好的老师就是 F1。当然我
们还可以找“百度大叔”。而如果是对于每次 QTP 升级版本时的新功能发布而言,“百度大叔”也
就束手无策了,最终还是只能靠 F1。
1.2.2.2 脚本定位跟踪
刚开始学习使用专家视图的朋友一定会非常困惑一个问题,那就是每个 QTP 的封装对象
都会有 N 多个方法,每个方法都代表着不同的含义,有着不同的用法,在调用方法时还会有不
同的参数,不同的参数类型以及是否有返回值等等等等一系列的问题。
37
38. 技术指导: 双击定位选取后点击 F1
我们来看一段很简单的脚本:
'************Launch IE **********
Systemutil.Run "IEXPLORE.EXE","http://bbs.51testing.com/default.php"
' ************CLOSE BROWSER************
Browser("51Testing 软件测试论坛 软件测试 |").Close
此脚本所实现的功能就是启动 IE,打开 51Testing 论坛后,关闭浏览器。这里的 Close 其实
就是 Browser 下的一个方法。这个方法可以实现关闭浏览器。这是一个非常简单的脚本,我们
在 Browser 对象后输入一个“点”后,QTP 会弹出很多的方法,而有些方法对于新手来说却是无
从下手, 此时我们可以使用脚本定位跟踪的方法来掌握每个方法的含义和具体用法。
定位对象
双击选中专家试图中的对象名 Browser 后自动选中 Browser 脚本字符串,F1 后页面显
示对象的所有方法介绍。
图 1.2-8
38
39. 定位方法
当需要直接定位对象方法时,可以直接双击选中专家视图中的方法名 close 后,F1 后
页面显示 close 方法的描述、参数个数、返回值等等。
图 1.2-9
1.2.3 请遗忘脑中的代码,掌握查阅 Example 实例技巧
1.2.3.1 封装方法实例查阅
上一章我们讲了脚本定位跟踪,这一章主要来讲跟踪后查阅 Example 实例的技巧。在这里
作者再次提醒各位读者,脚本不是死记硬背的,而是要活学活用的,成千上万个方法也不可能
都把它背下来。所以,我们必须掌握这个技巧来应对下一个未知的方法。还是拿上一章节的例
39
40. 子来说:
Description: 方法描述
Syntax: 语法使用
Syntax Details: 语法细节
Return Type: 返回类型
Example: 举例说明
学会查阅方法是一种非常重要而且必备的技能,当我们看到一个陌生的方法,我们必须能
够会使用定位跟踪方法进行查阅,仔细查看对象的方法描述、语法使用、语法细节、返回类型、
举例说明。特别是举例说明这一栏,作者个人感觉是最最实用的。有时候一个过于复杂的方法,
介绍也写的有些含糊,这时我们可以点击 example 实例进行查看能够省去我们很多的时间。比
如这里的 close 方法,如果我们没有看懂说明,就可以直接点击 example,页面就会显示此方法
的具体实例。
图 1.2-10
Sub Close_Example()
'The following example uses the Close method to close the
'Mercury Tours application.
Browser("Mercury Tours").Page("Search Results").Image("reserveFlights").Click 41, 20
40
42. 1.2.3.2 VBScript 方法函数查阅
QTP 的底层语言是 VBScript,因此是否能够灵活运用好 VBScript 脚本语言在自动化测试
中是至关重要的。VBScript 虽然语法不多,也不是很严谨,但是方法和函数却非常的繁多,往
往新手在学习时都不能把全部的函数和方法都熟记下来,因此我们必须找出一种方式方法来摆
脱这种非常被动的局面。那就是遗忘脑中的代码,通过 F1 定位进行实例查询,现学现用。
实例 - Split 函数的定位
首先我们在 QTP 里输入 Instr,双击选取 Instr 后点击 F1 进行内容定位匹配,接着我们就可
以看到 Instr 方法的介绍与用法,如图 1.2-11:
图 1.2-11
从帮助文档的说明中我们可以看到此函数返回的是一个字符串在另一个字符串中的首个位
置,参数一共有 4 个。
Start: 起始位置,可选
String1: 需要被搜索的字符串,必选
String2: 需要搜索字符串,可选
42