软件工程-自动化测试工具
- 格式:doc
- 大小:1.78 MB
- 文档页数:54
自动化测试工具自动化设计模式什么叫自动化测试?自动化测试怎样设计?自动化测试并不只是利用自动化测试工具进行录制回放操作。
虽然基本是每一个自动化测试工具都必须提供的功能,但如果只是这么应用,从严格意义上来说,这并不能算是自动化测试。
最多只能说是实现了一定的自动化操作。
因为这时自动化脚本都是写死的,自动化测试使用的数据也是写死的,没有灵活性可言,也没有对脚本进行容错性处理,脚本基本是运行不完。
且也没有添加测试验证,不能验证执行结果是否符合预期的结果。
自动化测试的三代框架:最基本的就是线性测试,主要基于录制回放,但是不利于重用和模块化如果代码是开发人员的主要资产,那么测试脚本就是测试人员的主要资产,它一样是需要模块化和可维护的,对于同一类测试案例,基于上面三代框架就会出现三种不同使用方式。
早期使用QTP,可以利用QTP提供的功能实现三层架构:测试数据,测试对象和测试脚本三个结构的分离。
QTP提供DataTable对象来保存测试数据,且也提供了把脚本中的测试数据参数化到DataTable而脚本中只引用了参数化的名称的功能,而DataTable存储的是一个Excel文档,方便修改测试数据,这样便实现了测试数据与测试脚本分离;QTP也把自动化测试中要操作的对象放到了对象库中进行管理者,实现了对对象的统一管理,也实现了测试对象与测试脚本的分离。
进一步的深入,会发现自动化脚本中的逻辑结构的功能实现紧密的结合在一起,给后期的维护和修改造成的很大的麻烦。
这时就会想到需要把测试脚本进行细分。
因此除了按上面说到的把测试数据,测试对象分离出脚本外,还需要把脚本细分为:逻辑控制和功能实现脚本。
也即实现了自动化脚本的四层架构设计。
功能实现脚本即为把脚本把每个小功能细分出来并编写成一个个独立的小的功能实现脚本,如登录,登记等等。
然后编写逻辑控制脚本来实现这些小的功能实现脚本执行的先后和次数,如,实现流程等。
实际应用自动化后,会发现很多脚本实现方法相同或相似,而且功能小脚本拼接不容易修改。
这时可以再上面四层架构的基础再增加一个框架结构,实现五层架构。
利用框架封装一些常用的方法、函数和小脚本,以实现公共脚本的复用,减少自动化脚本的开发时间。
在框架中还可以把上面的四层架构的内容包含到框架中进行统一管理和调度。
当然还可以利用配置文档(如ini文件)来实现流程或其他功能的可配置测试(如,网址,用户名,密码。
方便改变测试环境后修改)。
以上只是针对整体的大的自动化方面来区分,当然还可以对一些小的部分进行细分,以达到更好的可配置性和容错性,降低脚本的修改成本。
可以再细分的设计如下:1.测试对象的定制首先可以应用QTP的对象管理来实现对象维护功能,但是这个功能在实现对象的定制上还是比较弱。
QTP支持使用描述性编程来实现对象的识别(后面高级篇会讲到),即可以通过定制的识别对象的属性名和属性值来实现对象的识别。
这样就可以把对象的类型和识别对象的属性名和属性值维护在框架中的对象识别Excel文档或者数据库中,格式如下,这样就能实现更强的对象定制功能:表--对象识别表2.逻辑配置到外部文档,实现事件与脚本分离(也就是脚本步骤化)通过把要实现的逻辑按顺序配置到外部文件,然后再QTP脚本中调用此配置文件,最后根据配置文件中的信息调用不同的脚本、对象、测试数据来进行测试。
配置样表如下:表--登录流程表3.页面对象检验文档化把要添加大量验证点的页面的对象维护到外部Excel文档或者数据库中,然后在QTP4.测试数据按功能分离QTP虽然把测试数据给分离出来到一个Excel文档中,但当测试数据很多时就不好查找,这时可以把测试数据按功能模块划分,分别放到多个测试数据Excel文档中,然后在QTP脚本中通过QTP内置对象DataTable提供的方法ImportSheet根据脚本需要使用的测试数据加载对应的Excel数据文档的工作表。
这样就能实现一个数据文件按功能分解成多个数据文档,方便后期维护。
5.测试数据自动生成当需要比较多的测试数据时,如果人工方式输入,将需要比较大的工时投入。
这时可以考虑应用VB,C#等编写一个修改Excel数据文件中的数据的工具,且要实现能自动生成测试数据。
然后在编写的工具中能过QTP提供的接口自动调用QTP并执行自动化测试,然后显示测试结果。
6.脚本与QTP分离要实现脚本与QTP分离,使QTP只成为执行工具,最好可以使用VBS文件来实现,毕竟QTP支持VBS,加载VBS脚本到QTP中后可以直接运行。
当然也可以使用其他文件来存储这些脚本,然后加载到QTP后使用Execute来动态执行这些脚本。
不过最好还是用VBS,在VBS文件中最好全用Function和Sub来模块化小脚本,以实现更好的可配置。
使用的方式可以如下:以上只是在学习QTP和使用QTP的过程中想到的一些QTP应用方式的设计思路(有些思路已经在当前测试部的自动化测试中实际应用了),并不是说要应用QTP就得实现这些设计,只有适应当前QTP应用现状和项目现状的应用方式才是最好的方式。
但这些设想也可以为将来更好的使用和优化QTP测试提供一些思路。
但主要还是在实践中要多总结,并多考虑更好的架构和实现形式,并不断补充和实践,才能促进自动化更好的应用。
现阶段正在研究的自动化测试框架更具有灵活性,可配置性,具体见二十一章自动化测试框架。
下面我们学习一下QTP高级应用,为后续的QTP自动化测试框架做铺垫。
QTP高级篇第一篇Add-in Manager 插件介绍在我们打开QTP之后,我们可以看到有一个Add-in Manager 框弹出来这是一个QTP插件管理器,每次启动前需要选择对应的插件才能进行测试。
经常看到一些同事会问:这个项目是用什么什么语言写的,应该选择哪个插件?其实提出这个问题的朋友是因为没有了解插件的真正含义和作用。
插件的含义与作用:Add-in 的选择是为了能够成功识别对应Add-in的测试对象控件,也就是说是和被测控件有关,而跟什么什么语言写的是没有关系的----------------------------------------------实例---------------------------------------------------------- 说明:成功使用QTP的SPY识别出百度搜索框(WebEdit)控件注意:一定要先开QTP,然后打开IE,这样SPY才能正确识别,因为安装完QTP之后,每次打开IE,浏览器会自动加载BHOManager,而QTP在IE中识别对象是依靠一个叫BHOManager Class的动态链接库来完成的,如果是先打开IE再打开QTP,QTP就不能成功读到BHOManager这个动态链接库而导致QTP识别对象失败。
第二篇QTP的对象封装与运作原理在介绍对象库前首先要说一下QTP自动化的原理:1.封装被测对象到对象库2.对比对象库里的对象属性和运行时的真实被测对象的属性3.对比一致后找到相应的对象通过以上3个步骤,QTP就可以完成自动化对象。
=================实例1 ==========================添加对象之前,见图添加完对象之后,见图手动写脚本如下Browser("百度一下,你就知道").Page("百度一下,你就知道").WebEdit("wd").Set "c#"回放之后,搜索自动输入了c#如果能够熟练掌握以上的例子之后我们就可以开始进行下一步的工作这部分的概念很重要,想学好QTP就一定要掌握。
熟练运用SetTOProperty,GetROProperty,GetTOProperty首先说明一下TO和RO分别是什么意思TO:测试对象库RO:运行对象简单的说SetTOProperty:修改对象库中对象的属性值GetTOProperty:获取对象库中对象的属性值GetROProperty:获取运行对象的属性值=================实例2==========================就拿刚才的那个例子接着做下去现在对象库里那个对象是百度的搜索框对象,这点现在没问题吧。
现在我要用这个对象库里的对象来控制GOOGLE搜索框的对象大家肯定会问:百度的搜索框和GOOGLE的搜索框对象属性肯定是不一样的,怎么能控制GOOGLE的搜索框呢?解决方案:更改对象库里的属性和GOOGLE的对象库属性一样就OK了,步骤1:如果不是很清楚怎么用SPY可以去Add-in Manager 插件介绍步骤2:脚本视图输入Browser("百度一下,你就知道").Page("百度一下,你就知道").WebEdit("wd").SetTOProperty "name","q"Browser("百度一下,你就知道").Page("百度一下,你就知道").WebEdit("wd").Set "helloworld"步骤1.查看对象库NAME 属性为wd 步骤2.脚本视图输入msgbox Browser("百度一下,你就知道").Page("百度一下,你就知道").WebEdit("wd").GetTOProperty("name")步骤3.成功显示对象库中百度搜索框NAME 属性的值GetROProperty用法和GetTOProperty是一样的,只不过一个是运行对象属性,而一个是对象库中的属性细分的朋友应该会发现既然有获取对象库中对象属性,修改对象库中对象属性,获取运行时对象的属性。
为什么没有SetROProperty修改运行时对象的属性呢~因为这个方法可以直接使用调用对象【object.属性值】的自身接口来修改运行对象的属性步骤1.使用OBJECT.属性来访问Browser("百度一下,你就知道").Page("百度一下,你就知道").WebEdit("wd").Object.value="1"步骤2.回放,看到百度的搜索框变成1,是不是很好玩,哈哈总结:这一章的东西比较多,也非常的重要,可别小看这些概念,关键大家一定要实践才能真正领悟到其中的含义。
第三篇手工参数化我一直不提倡使用录制来完成测试脚本的,建议用手工方式来编写测试脚本,因此今天首先介绍下手工参数化。