什么是端到端测试?
作为软件团队的一员,你可能听说过端到端或E2E测试。测试团队通常倾向于进行一轮端到端测试,以确保应用程序的功能正常工作。
每个软件应用程序都应进行端到端测试,以确保其按规范运行。这种测试方法能增强对系统的信心,并帮助开发团队确定软件是否准备好投入生产部署。
在本教程中,我将指导你了解什么是端到端测试、它的重要性,以及如何在软件项目中有效实施它。
什么是端到端测试?
端到端测试是指从最终用户的角度测试软件。它验证所有软件模块在真实世界条件下是否正确运行。
端到端测试的核心目的是通过测试应用程序从开始到结束的工作流程,来复制真实世界的用户体验。
让我们以Parabank演示银行应用程序为例,其中不同的模块如注册、登录、账户、交易、支付和报告模块都是独立构建的。
考虑到端到端测试,我们应该对最终用户的旅程进行全面测试,从注册开始,然后验证登录功能,通过创建新银行账户测试账户模块,执行交易(如向不同账户转账),并检查交易状态报告。
这些测试模拟了真实的用户交互,使我们能够在应用程序从开始到结束的使用过程中识别问题。
端到端测试的目标是什么?
端到端测试的主要目标是确保所有软件模块在真实世界场景中正确运行。另一个关键目标是在软件发布到生产环境之前识别和解决隐藏的问题。
例如,对一个允许用户手动填写详细信息并检查贷款资格的贷款应用程序进行端到端测试。通过执行端到端测试,我们可以确保用户能够顺利完成整个旅程而不会遇到任何问题。
通过执行端到端测试,我们不仅检查功能和特性,还能获得关于整体用户体验的反馈。
何时执行端到端测试?
端到端测试通常在功能和系统测试完成后进行。最好在主要发布之前执行,以确认应用程序从最终用户的角度能够无错误运行。当我们组合所有模块并从头到尾测试整个应用程序时,就像最终用户那样,它可能帮助我们发现隐藏的问题。
建议将端到端测试集成到CI/CD流水线中,以验证工作流程并在构建上获得更快的反馈。
测试策略
理想情况下,端到端测试应在软件开发生命周期结束时执行。
大多数测试应转移到单元测试,然后是集成和服务级测试。最后,执行端到端测试。
根据Google的测试博客,Google建议采用70/20/10的分割:即70%的单元测试,20%的集成测试和10%的端到端测试。具体的组合可能因团队而异,但通常应保持金字塔形状。
简而言之,单元测试构成基础,集成测试次之,端到端测试位于此结构的顶部,形成金字塔形状。
端到端测试的不同阶段
以下是执行端到端测试的三个阶段:
- 规划
- 测试
- 测试结束
让我们详细了解这些阶段。
规划
在规划阶段,应考虑以下要点:
- 理解业务和功能需求
- 基于需求分析创建测试计划
- 为端到端测试场景创建测试用例
测试人员应获取应用程序的知识,并理解其中的不同测试旅程。这些测试旅程应从最终用户的角度设计,覆盖从开始到结束的整个过程。所有愉快路径都应记录下来,并相应地设计测试用例。
例如,从电子商务应用程序的角度来看,一个简单的测试旅程如下图所示:
![测试旅程图]
类似地,还可以准备其他测试旅程,例如用户将产品添加到购物车并退出应用程序,然后再次登录并从中断处继续,等等。
在规划阶段,我们还应考虑以下要点,以在测试中取得优势:
- 设置类似生产的环境以模拟真实世界场景
- 设置测试数据、测试策略和测试用例,用于测试真实世界场景
- 定义进入和退出标准,为端到端测试设定明确目标
- 让业务分析师或产品负责人审查测试用例、测试数据、进入和退出标准
测试
测试阶段可分为两个阶段,即先决条件和测试执行。
先决条件
在此阶段,应确保:
- 所有功能开发应完成
- 应用程序的所有子模块和组件应集成并作为系统正常运行
- 应对应用程序中所有相关子系统完成系统测试
- 旨在复制生产设置的预演环境应完全运行。这个环境使我们能够模拟真实世界场景并有效重现类似生产条件。它将允许无缝测试端到端场景。
完成先决条件后,我们可以进入测试执行阶段。
测试执行
在此阶段,测试团队应:
- 执行测试用例
- 在测试失败时报告错误
- 在错误修复后重新测试
- 重新运行所有端到端测试,以确保所有测试按预期工作
端到端测试可以手动执行,也可以在CI/CD流水线中使用自动化执行。通过自动化流水线执行端到端测试是推荐的方法,因为它节省了测试团队的时间和精力,同时在最短的时间内确保高质量的结果。
测试结束
在此阶段,应执行以下操作:
- 分析测试结果
- 准备测试报告
- 评估退出标准
- 执行测试结束
端到端测试中的测试结束阶段涉及最终确定测试活动并记录结果。它确保所有测试可交付成果都已完成。还包括评估测试覆盖范围并记录关键要点,例如记下已知问题。
最后,为利益相关者准备测试结束报告。这份报告在Go/No-Go会议中可能非常有帮助。
端到端API测试示例
让我们以RESTful电子商务API为例;在RESTful电子商务应用程序中,总共有六个主要API,如下所示:
- 创建令牌(POST /auth)
- 添加订单(POST /addOrder)
- 获取订单(GET /getOrder)
- 更新订单(PUT /updateOrder)
- 部分更新订单(PATCH /partialUpdateOrder)
- 删除订单(DELETE /deleteOrder)
在对这些API执行端到端测试之前,我们应首先分析它们的需求、使用模式和技术规范。这些细节将有助于编写端到端测试用例以及设计自动化测试策略。
根据Swagger,可以注意到以下与API相关的功能点:
- POST添加订单API用于在系统中创建新订单,而GET订单API使用提供的订单ID检索订单。
- 创建令牌API生成一个令牌,该令牌将用于更新和删除API作为安全方面,因此只有注册用户才能更新或删除其订单。
- 更新和部分更新API将用于更新订单。
- 删除API将用于删除订单。
考虑到这些细节,可以为端到端测试使用以下测试策略:
- 通过调用POST /auth API生成新令牌并保存以供进一步使用。
- 使用POST /addOrder API创建新订单。
- 通过在GET /getOrder API中传递订单ID来检索新创建的订单。
- 使用先前生成的令牌,通过PUT /updateOrder API更新现有订单。
- 通过使用PATCH /partialUpdateOrder API更新现有订单来验证部分更新订单功能。
- 使用DELETE /deleteOrder API删除现有订单。
- 为了验证订单已成功删除,调用GET /getOrder API。这里,应在响应中检索到状态码404,考虑到订单已从系统中删除。
可以看到,我们使用了所有主要API来执行端到端测试,作为真实世界场景。
类似地,可以为Web或移动应用程序执行端到端测试。重要的是从最终用户的角度评估应用程序,创建相关的测试场景,并让团队的业务分析师或产品负责人审查它们。
总结
端到端测试是一种全面的测试方法,它验证应用程序的整个工作流程,从开始到结束,以确保所有集成组件按预期运行。
它模拟真实世界场景,以识别系统内不同模块及其依赖关系中的问题。它模拟真实用户场景,以识别跨系统和依赖关系的问题。这有助于确保应用程序提供流畅可靠的用户体验,并在最终用户遇到问题之前及早发现问题。
测试愉快!