验收测试通常是在每一个通过提交测试的软件版本上执行的。
- 验收测试的目的:对于一个单独的验收测试,它的目的是验证一个用户故事或需求的验收条件是否被满足。如功能验收条件和非功能验收条件。
- 如果每次提交测试后都在该版本上运行自动化验收测试,会有如下效果:
- 反馈环大大缩短,能够更快地定位问题
- 测试、开发人员和客户需要紧密合作才能创建一个良好的自动化测试套件,这会促进他们之间的良好合作
- 有助于让每个人更关注业务的价值
- 验收测试与单元测试的区别:验收测试是针对业务的,单元测试是面向开发的。
创建验收测试
- 分析人员与测试人员和客户紧密合作,定义验收条件
- 分析人员向开发人员讲解需求,以及它的业务上下文,并检查一遍验收条件
- 测试人员与开发人员讨论,并就“哪些自动化验收测试来证明验收条件被满足”达成一致
- 开发人员认为工作完成是指所有单元测试和组件测试通过,验收测试全部实现,并证明系统满足需求。此时可以向分析人员、测试人员和客户进行演示
应用程序驱动层
应用程序驱动层是一个知道如何与应用程序打交道的层次。它所用的API是以某种领域语言表达的,可以认为是一种针对它自己的领域专属语言。
实现验收测试
- 让测试对复杂状态的依赖最小
- 不要使用生产数据的备份作为验收测试的测试数据,要维护一个受控的数据最小集
- 满足原子性,测试的执行顺序无关紧要,可以并行执行,他创建它需要的一切,并在运行后清理干净
- 自动化验收测试不应该运行在包含所有外部系统集成点的环境中,应该为自动验收测试提供一个受控环境,并且被测系统应该能在这个环境下运行。使用替身对象取代外部系统,可以使系统与外部系统耦合最小。
验收测试阶段
把验收测试套件作为部署流水线的一个组成部分来运行。提交测试一旦成功,就应该开始在通过提交测试的版本上运行验收测试套件。
- 验收测试失败的版本不能用于部署
- 确保验收测试一直处于通过状态
验收测试的性能
验收测试没有把它放在提交测试阶段,主要是因为验收测试运行时间太长。但是我们认为自动化验收测试的全面性比测试在10分钟内运行完成更重要。然而一旦开始实现部署流水线,快速失败体系和迅速反馈环将更快地帮助发现问题,一般验收测试花费几个小时完成也是可以接受的。但是仍然有办法来提高验收测试的效率。
- 重构通用任务
- 共享昂贵资源
- 并行测试
- 使用计算网格(如:Selenium Grid、 Zalenium)