[注]版权所有,引用请注明出处
QTP应用模式设计
——陈奕斌
2008-11-24
以下只是个人对自动化测试的一些看法。针对的QTP工具所写,其他工具相应的设计可能不一样。
自动化测试并不只是利用自动化测试工具进行录制回放操作。虽然基本是每一个自动化测试工具都必须提供的功能,但如果只是这么应用,从严格意义上来说,这并不能算是自动化测试。最多只能说是实现了一定的自动化操作。因为这时自动化脚本都是写死的,自动化测试使用的数据也是写死的,没有灵活性可言,也没有对脚本进行容错性处理,脚本基本是运行不完。且也没有添加测试验证,不能验证执行结果是否符合预期的结果。
早期使用QTP,可以利用QTP提供的功能实现三层架构:测试数据,测试对象和测试脚本三个结构的分离。QTP提供DataTable对象来保存测试数据,且也提供了把脚本中的测试数据参数化到DataTable而脚本中只引用了参数化的名称的功能,而DataTable存储的是一个Excel文档,方便修改测试数据,这样便实现了测试数据与测试脚本分离;QTP也把自动化测试中要操作的对象放到了对象库中进行管理者,实现了对对象的统一管理,也实现了测试对象与测试脚本的分离。
|
进一步的深入,会发现自动化脚本中的逻辑结构的功能实现紧密的结合在一起,给后期的维护和修改造成的很大的麻烦。这时就会想到需要把测试脚本进行细分。因此除了按上面说到的把测试数据,测试对象分离出脚本外,还需要把脚本细分为:逻辑控制和功能实现脚本。也即实现了自动化脚本的四层架构设计。功能实现脚本即为把脚本把每个小功能细分出来并编写成一个个独立的小的功能实现脚本,如登录,登记等等。然后编写逻辑控制脚本来实现这些小的功能实现脚本执行的先后和次数,如,实现流程等。
|
实际应用自动化后,会发现很多脚本实现方法相同或相似,而且功能小脚本拼接不容易修改。这时可以再上面四层架构的基础再增加一个框架结构,实现五层架构。利用框架封装一些常用的方法、函数和小脚本,以实现公共脚本的复用,减少自动化脚本的开发时间。在框架中还可以把上面的四层架构的内容包含到框架中进行统一管理和调度。当然还可以利用配置文档(如ini文件)来实现流程或其他功能的可配置测试(如,网址,用户名,密码。方便改变测试环境后修改)。
|
以上只是针对整体的大的自动化方面来区分,当然还可以对一些小的部分进行细分,以达到更好的可配置性和容错性,降低脚本的修改成本。可以再细分的设计如下(暂时想到的):
1. 测试对象的定制
首先可以应用QTP的对象管理来实现对象维护功能,但是这个功能在实现对象的定制上还是比较弱。QTP支持使用描述性编程来实现对象的识别,即可以通过定制的识别对象的属性名和属性值来实现对象的识别。这样就可以把对象的类型和识别对象的属性名和属性值维护在框架中的对象识别Excel文档中,格式如下,这样就能实现更强的对象定制功能:
表--对象识别表
对象名 | 对象类型 | 识别对象属性及值 |
登录按钮 | WebButton | Name:=登录 |
|
|
|
2. 逻辑配置到外部文档,实现事件与脚本分离
通过把要实现的逻辑按顺序配置到外部文件,然后再QTP脚本中调用此配置文件,最后根据配置文件中的信息调用不同的脚本、对象、测试数据来进行测试。配置样表如下:
表--登录流程表
序号 | 对象 | 事件 |
1 | 用户名输入框 | Set |
2 | 用户密码输入框 | Set |
3 | 登录按钮 | Click |
4 | 登录后页面 | Check |
|
|
|
3. 页面对象检验文档化
把要添加大量验证点的页面的对象维护到外部Excel文档,然后在QTP脚本中调用此文档,这样就可以实现要验证对象的动态修改。样表如下:
页面 | 对象类型 | 识别对象属性及值 | 期望值 |
案件保存结果页面 | 姓名 | Name:=姓名 | 测试姓名 |
案件保存结果页面 | 地址 | Name:=address | 北京市海淀区 |
|
|
|
|
4. 测试数据按功能分离
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测试提供一些思路。但主要还是在实践中要多总结,并多考虑更好的架构和实现形式,并不断补充和实践,才能促进自动化更好的应用。