如何规划和实施一个成功的自动化测试任务,我们需要一个能够遵循的过程。这里我们引入PERAL(Purspose、Evaluation、Architecture、Run and Debug、Link with manual test)模型。
第一步Purspose(目标):如何建立一个务实明确的自动化测试目标?
1. 选择自动化还是手工测试
一般自动化测试引入条件:
项目没有严格的时间压力
具有良好定义的测试策略和测试计划(知道要测试什么,知道什么时候测试)
对于自动化测试你拥有一个能够被识别的测试框架和候选者
能够确保多个测试运行的构建策略
多平台环境需要被测试
拥有运行测试的硬件
拥有关注在自动化过程上的资源
被测试系统是可自动化测试的
如下条件适宜采用手工测试:
没有标准的测试过程
没有一个测试什么、什么时候测试的清晰的蓝图
在一个项目中,你是一个新人,并且还不是完全的理解方案的功能性和或者设计
你或者整个项目在时间的压力下
在团队中没有资源或者具有自动化测试技能的人·没有硬件
2. 正确估算分析自动化测试效益
引入自动化测试的目的在于降低测试成本,提高测试效率。而要确定在什么情况下自动化真正降低了测试成本则需要根据公式来进行估算。
手工与自动化测试的成本平衡点测试次数计算:成本平衡点测试次数=测试代码开发时间/(手工测试所需时间-自动化测试所需时间)
当测试迭代次数大于平衡点测试次数,自动化才能体现其真正的价值。
3. 正确选取自动化测试实施对象的范围
获得自动化测试最大的收益成本比是自动化测试的最终目的。选择哪部分测试案例进行自动化测试,应该以成本最小而受益最大的原则,因此,应具备以下两个特点:
(1) 测试对象应该是被测试软件系统中比较稳定的功能模块,很少变化甚至最好不变,这样就能减少自动化测试的维护成本。
(2) 测试案例应该是执行比较频繁的,这样转化为测试程序后,执行次数也是频繁的,会增大自动化测试的收益。
因此通常情况下,对于优先级较高,执行频率也搞的核心功能,应该被优先考虑进行自动化测试,而其他功能则可依然采取手工测试
第二步Evaluation(评估):如何量化评估自动化测试规模并选择合适的工具?
俗话说:“工欲善其事,必先利其器”,工具对自动化测试的成败是一个非常关键的因素,选择合适的工具会使我们进行自动化测试事半功倍。
从技术的角度考虑,要做出准确的评估,我们必须要弄清楚以下两点:
(1) 测试项目的软件特征和测试特征
(2) 同族各种工具的细微差别,包括支持程度、可扩展性等等
以上都是从技术角度出发阐述的,在现实中我们并不是想选择哪个工具就能选择的,但掌握前面两点对于项目自动化的实施同样是至关重要的,例如:实施自动化过程中遇到问题,你能根据对项目和工具的了解快速地确定是哪方面的原因造成的。
第三步Architecture(构建):如何构建和设计自动化测试?
自动化测试绝对不能理解成测试工具简单的录制与回放过程。实际上,从实现成熟度来说,自动化测试分五个级别:
级别 | 说明 | 优点 | 缺点 | 用法 |
一级 | 录制和回放 | 自动化的测试脚本能够被自动的生成,而不需要有任何的编程知识 | 拥有大量的测试脚本,当需求和应用发生变化时相应的测试脚本也必须被重新录制 | 当测试的系统不会发生变化时,实现小规模的自动化 |
二级 | 录制、编辑和回放 | 减少脚本的数量和维护的工作 | 需要一定的编程知识;频繁的变化难于维护 | 回归测试时,用于被测试的应用有很小的变化 |
三级 | 编程和回放 | 确定了测试脚本的设计,在项目的早期就可以开始自动化的测试 | 要求测试人员具有很好的软件技能,包括设计、开发 | 大规模的测试套件被开发、执行和维护的专业自动化测试 |
四级 | 数据驱动的测试 | 能够维护和使用良好的并且有效的模拟真实生活中数据的测试数据 | 软件开发的技能是基础,并且需要访问相关的测试数据 | 大规模的测试套件被开发、执行和维护的专业自动化测试 |
五级 | 使用动作词的测试自动化 | 测试用例的设计被从测试工具中分离了出来 | 需要一个具有工具技能和开发技能的测试团队 | 专业的测试自动化将技能的使用最优化的结合起来 |
综合现有的技术储备和实践困难度考虑,我们将根据四级-数据驱动测试的程度引入自动化测试。因而我们需要设计一个便于实施的自动化框架来支撑整个过程,具体框架目录设计如下:
1. 公共函数库(存放不同项目都可能会用到的函数,例如数据比对函数)
2. 公共脚本库(存放项目中不同功能可能会用到的脚本、函数,例如登录脚本)
3. 项目脚本库(存放项目的核心功能脚本)
4. 数据驱动库(存放各脚本、函数中所需的驱动数据,当前以Excel形式保存)
5. GUI对象库(存放项目中会用到的所有对象集合)
第四步Run and Debug(开发调试):如何开发和调试自动化测试?
自动化脚本的开发一样要遵循开发的原则。
1. 高内聚和低耦合的模块实现原则
(1) 高内聚是指每个案例函数的功能应该尽可能简单和单一
(2) 低耦合是指每个案例函数之间的依赖关系要尽可能地小
2. 数据驱动原则
对于自动化测试开发来说,数据驱动问题尤其要注意。因为测试人员开发经验不足,使用工具来录制回放脚本,hardcode(脚本中的常量)问题容易被忽略,而hardcode问题又会是脚本维护的工作量加大。
第五步Link with manual test(与手工测试链接):如何将自动化测试与手工测试进行有效地整合?
“自动化测试”的重点在“测试”,而“自动化”只是一种手段。自动化测试的意义在于保证产品的稳定性,而手工测试则在产品稳定性满足的基础上负责验证容错性、安全性等非核心功能,两者各司其职,互补长短。
在Purpose阶段,我们出于最大成本收益比的角度考虑,只选取了核心功能进行自动化测试的实施,而大部分测试案例依然采用手工的方式来运行。我们需要通过有效的工具或方法(初期可以使用需求跟踪表来确定哪些实施了自动化测试,哪些采用手工测试),来管理和执行项目自动化实施部分与手工测试部分,最终将其测试结果整合成一份完整的产品测试报告。
参考资料:
《软件自动化测试框架设计与实践》——柳胜编著
自动化实施方案——张向芳、李华、姜英伟著