自动化测试并不只是利用自动化测试工具进行录制回放操作。虽然基本是每一个自动化测试工具都必须提供的功能,但如果只是这么应用,从严格意义上来说,这并不能算是自动化测试。最多只能说是实现了一定的自动化操作。因为这时自动化脚本都是写死的,自动化测试使用的数据也是写死的,没有灵活性可言,也没有对脚本进行容错性处理,脚本基本是运行不完。且也没有添加测试验证,不能验证执行结果是否符合预期的结果。
早期使用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 | 北京市海淀区 |
|
|
|
|