测试金字塔是一个广为人知并被接受的概念,用于将不同类型的自动化功能测试分为三个层次。
[3]
Martin Fowler将其描述为“一种思考如何使用不同类型的自动化测试来创建一个平衡的组合方法”
。在这里,平衡是指自动化功能测试的组合要在执行时间、运行和维护成本与自动化测试提供的信息之间取得平衡。通常情况下,测试越多,对应用程序能按预期运行就越有信心。但这样做的缺点通常是测试的运行和维护成本较高。
图2-2展示了一个基础的三层测试金字塔,每一层提供不同质量的反馈。
图2-2:测试金字塔
底层
底层由最简单的测试组成:单元测试。如果一个单元测试失败了,那么问题出在哪是非常清楚的:一定是出在被测试的单元中。在单元测试失败时,通常很难得到真实用例,即该单元可能会导致问题并且被终端用户注意到错误行为。
中间层
中间层描述服务和集成测试。(有时组件和API测试也放在这里。)
顶层
最顶层是端到端(E2E)测试,通常通过应用程序的用户界面(UI)层直接执行。如果这些测试失败,将很容易看出现实中的用例会受到怎样的负面影响;但是,要找到导致错误的组件可能比较困难,因为很多组件都在这一层协同工作。
位于金字塔底部的测试通常执行速度快,维护和运行简单且成本低廉。金字塔越往上,测试执行速度越慢,开发和维护成本越高。因此,平衡三层测试的数量至关重要,这样才能获得最佳结果,即拥有一套可维护的测试,从而构建对系统正在做它应该做的事情的最高置信度。
当然,这是一个可以用来确定测试和自动化工作重点的模型,但这个理想化的模型并不总是正确的。例如,可能需要在中间层大量使用集成测试;对于没有用户界面的不同系统,顶层可能没有测试。
在了解如何调整这种金字塔结构来对适应度函数进行分类之前,让我们先快速了解一些有助于定义适应度函数的类别。