一、自动化测试技术概述
(一)自动化测试
1、测试活动的自动化
2、测试过程管理的自动化
3、测试自动化不仅是技术、工具的问题,更是一个公司和组织的文化问题
4、自动化测试执行技术
5、自动化测试设计技术
(二)自动化测试的分类
1、按自动化的流程环节划分
- 自动化测试设计
- 自动测试执行
2、按测试目的划分
测试软件的性能,完成人工无法完成的测试。
- 功能自动化测试
验证功能,提高测试效率。 - 非功能自动化测试
- 性能自动化测试
- 信息安全自动化测试
3、按测试工具所访问和控制的接口划分
- 用户界面自动化测试工具
- 接口自动化测试工具
4、按测试工具所重点对应的测试阶段划分
- 单元自动化测试工具
- 集成自动化测试工具
- 系统自动化测试工具(用户界面自动化测试)
5、按测试对象所在操作系统平台划分
- web应用测试
- 安卓移动应用测试
- IOS移动应用测试
- Linux桌面应用测试
- Windows桌面应用测试
(三)自动化测试的优缺点和局限性
1、优点
- 提高测试质量
- 提高测试效率,缩短测试工作时间
- 提高测试覆盖率
- 执行手工测试不易完成的测试任务
- 更好地重现软件缺陷的能力
- 更好地利用资源
- 增进测试人员与开发人员之间的合作伙伴关系
- 能执行测试步骤更长,综合性更强的测试用例
- 更快地反馈软件质量情况
- 提高系统的稳定性和可靠性
2、缺点
- 产生开发成本
- 需要测试技术团队
- 脚本维护成本高
- 无创造性
- 引入更多的复杂性
- 容易出现偏离原始的测试目标
- 可能引入额外的错误
3、自动化测试局限性领域
- 定制型项目
- 周期很短的项目
- 业务规则复杂的对象
- 人体感观与易用性测试
- 不稳定的软件
- 涉及物理交互
4、自动化测试不正确的期望
- 自动化测试可以完成一切测试工作
- 测试工具可适用于所有的测试
- 测试工具能使工作量大幅度降低
- 测试工具能实现百分之百的测试覆盖率
- 自动化测试工具容易使用
- 自动化测试能发现大量的新缺陷
二、自动化测试的实践策略
(一)自动化测试通用架构
- 测试生成层:产生测试用例
- 测试定义层:生成测试用例的具体描述或测试脚本的文本
- 测试执行层:提供测试执行所必需的功能
- 测试适配层:每个模块的主要任务是与被测试对象或测试环境中的各个设备直接接口交互,并为测试定义的测试用例提供一致接口
- 测试框架:仅在通用自动化测试框架中的提供任何自动化测试系统都应支持通用功能的模块
(二)自动化测试金字塔
- 单元层:单元测试,最有价值,使用相应单元测试框架规范实施单元测试
- 服务和接口层:集成、接口自动化测试,价值居中
- 用户界面层:用户界面自动化测试,价值最小
(三)适合使用自动化测试工具的情形
- 被测试系统具备足够的易测试性
- 需求稳定,不会频繁变更
- 每日构建后的测试验证
- 研发和维护周期长,需要频繁执行回归测试
- 软件系统用户界面稳定,变动少
- 需要在多平台上运行的相同测试案例
- 项目进度压力不太大
- 测试人员具备较强的编程能力
(四)开展自动化测试的必要条件
- 具备足够的易测试性
- 软件需求变动较少
- 项目周期较长
- 自动化测试脚本可重用
三、测试设计的自动化技术
(一)基于模型的测试技术
通过模型描述软件需求和期待的行为,自动生成测试用例和脚本,测试建模需要人工实施,而测试生成由生成算法自动完成。
1、优点
- 测试设计的自动化能改善工作效率和减少人为错误
- 尽早建立测试模型能改善沟通,提前发现需求中的缺陷
- 使得不了解测试设计技术的业务分析人员也能实施测试设计
- 提高测试覆盖,从而改进软件产品的质量
- 缩短测试设计的周期,加速测试活动
2、缺点
- 从模型生成测试用例数量可能过多
- 建模需要一定的投入
- 模型也可能描述错误
- 模型的抽象可能带来理解上的困难
3、工具实现
- 微软的Spec Explorer
- GraphWalker
- Stoat
- MBT On Cloud
(二)基于搜索的测试技术
把测试数据生成问题转化成为搜索问题,即从软件运行的输入域中搜索所需的值以满足测试需求,经典的基于遗传算法的测试生成。
1、优点
- 把测试用例生成问题灵活转化为在特定软件对象的输入域中搜索更优的问题。
2、缺点
- 变异操作可能产生大量输入事件序列无效的测试用例
- 移动应用软件是事件驱动的,其测试输入是一条事件顺序敏感的事件序列,而遗传算法的三种操作很可能破坏这种顺序关系,从而产生大量无效的测试用例,影响测试效率
3、工具实现
- Sapienz
四、测试执行的自动化技术
(一)测试工具的选择
- UFT
- Robot Framework
- Selenium
- Appium
(二)自动化测试语言的选择
- Python
- Java
- Go
(三)测试输入的设计与实现
- 制订测试计划
- 分析测试需求
- 设计测试用例
- 搭建自动化测试框架
- 编写测试脚本
- 执行测试