1.2 测试金字塔模型
测试按照不同的维度可以进行多种分类。例如按照测试手段分类,测试可划分为自动化测试和手动测试;按照测试目的分类,测试可划分为功能测试、性能测试、安全测试等。本节我们来看一看马丁·福勒(Martin Fowler)按照层级对测试进行的分类,也就是大家常见的金字塔模型,如图1-3所示。
图1-3 金字塔模型
金字塔模型将测试分为单元(Unit)、服务(Service)和用户界面(User Interface,UI)这3个层级。在测试发展的历程中,也出现了一些重新定义金字塔层级的测试模型,尽管对分层的具体描述各不相同(有人将这3个层级分别定义为单元、接口、集成测试,也有人将整个金字塔划分为4~5个层级),但金字塔自底向上的结构是大家公认和遵循的。
(1)单元测试
单元测试是针对代码单元(通常是类或方法)的测试,单元测试的价值在于能提供快速的反馈,在开发过程中就可以对逻辑单元进行验证。好的单元测试可以帮助改善既有设计,在团队掌握测试驱动开发(Test Driven Development,TDD)的前提下,单元测试能辅助重构,帮助提升代码整洁度。
(2)服务测试
这里所说的服务测试,是针对业务接口进行的测试,主要测试内部接口功能实现是否完整,比如内部逻辑是否正常、异常处理是否正确等。接口测试的主要价值在于接口定义相对稳定,不像界面或底层代码那样会经常发生变化,所以接口测试脚本的变动频率和维护成本较低,在接口层面开展测试的性价比相对较高。但接口测试的开展需要一份完整的、准确的、及时更新的接口测试文档作为前置条件,也就是说测试团队的工作进展情况需要依赖于外部团队的工作质量。如果在项目团队中,接口测试文档“可望而不可及”,那对测试人员来说,开展接口测试工作将事倍功半。
(3)UI测试
UI测试是从用户的角度验证产品功能的正确性,测试的是端到端的流程,并且加入用户场景和数据,验证整个过程是否正确、流畅。UI测试的业务价值高,但由于它验证的是完整的流程,因此在环境部署、用例准备及实施等方面成本较高,要完成高质量的UI测试其实并不容易。