自动化测试分为单元(unit)、集成(integration)和端到端(end-to-end, E2E),以便在不同层次全面覆盖系统的验证。
问题历程: 这种分类源于需要同时测试应用程序的部分和整体。因此,测试层次如下:
问题: 错误往往不仅出现在单个方法的逻辑中,还可能出现在组件之间的接合处,或在与外部服务“真实”启动整个系统时出现。如果把所有内容混在一起,很难快速定位错误或弄清楚它出现在哪里。
解决方案:
区分测试类型至关重要,以便:
关键特点:
可以把集成测试视为“更大的”单元测试吗?
不可以,集成测试测试多个组件的协同工作,而不仅仅是单个功能。同时,并不总能使用模拟——真实服务之间相互作用。
所有测试都应该是端到端(E2E)的吗?
不,这是昂贵和复杂的方法。E2E 仅在关键用户场景中需要,大多数逻辑由其他测试覆盖。
单元测试总是很快吗?
不总是。有时无法隔离代码,或者方法依赖于复杂的外部资源。在这种情况下,测试不再是单元测试。
在公司中,主要功能仅用E2E测试覆盖——每次修改都在夜间检查,测试不稳定,错误发现得很晚。
优点:
缺点:
团队建立了测试金字塔:底层——单元测试,中层——集成测试,顶部——仅最重要的E2E。
优点:
缺点: