3种策略让微服务测试的ROI最大化
微服务努力将传统的单体应用分解成小型的、可扩展的、可单独部署的服务。一些微服务架构在反应式环境中运行,在这种环境中,服务可以异步通信,而不会阻塞回复。
这些类型的基于微服务的环境在系统的部分发生故障或行为不当时,不容易发生故障。为了实现完整的功能,仍然需要正确操作所有的依赖关系,但这种方法的一个主要优势是它提供的解耦。
微服务是自足的,这意味着它们可以根据需要单独部署、扩展和更改。这使得快速迭代成为可能。然而,为了实现更快的迭代和可靠的服务,现在更多的关注是API——包括面向公众的API和内部依赖间使用的API。
当涉及到测试微服务时,就会有一大堆新的挑战出现。
微服务测试的新挑战
向微服务的转变给软件团队带来了新的挑战,降低了转型的投资回报率。
更多的交互需要在API层自动完成
微服务之间的相互依赖,需要在API层的幕后进行更多的交接和交互。充分的测试要求我们不仅要理解这些交互,而且要能够隔离它们并进行测试。
平行开发的路障
微服务在修改和重新部署方面是敏捷的,但测试它们的复杂性拖慢了并行开发的速度。这种复杂性是由于服务之间的众多交互。它使测试环境复杂化,并使对发生的事情的理解变得模糊。
对传统测试方法的影响
微服务与传统的测试是不一致的,传统的测试通常依赖于同步的请求/响应交互。微服务有时部署在反应式、事件驱动的架构中,采用新的协议和消息格式以及异步通信。
更多潜在的故障点
交互和依赖性的增加,增加了潜在的故障点。而且由于服务的反应性,新的事件流可能会无序地发射并发生故障。
开发干扰
转向微服务架构有好处,但也要付出代价,往往会分散开发团队对创收功能实现的注意力。除非扫清测试和并行开发的障碍,否则很难实现真正的投资回报率。
充分利用微服务测试的三大策略
为了最大限度地提高微服务测试的投资回报率,请遵循以下策略:
- 利用AI提高功能API测试覆盖率的质量,以确保部署的服务满足需求。
- 将复杂的、事件驱动的工作流自动化,以加速测试。
- 改善测试环境,提高测试的可靠性和稳定性。
利用AI提高功能API测试覆盖率
缺乏代码和测试覆盖率是一个质量、安全和客户体验的问题。如果服务的部署只进行了部分测试,发现bug的就是客户!增加覆盖率意味着更多的测试。为了实现这一目标,需要测试自动化,利用现有的Selenium UI测试快速创建测试来加速功能测试。
除此之外,自动验证需要在服务之间进行数据交换的API序列也是至关重要的。这些API序列大多基于你的自动化UI测试的API流量的“记录”。这些API序列可以被克隆和转换以增加测试覆盖率。
增加测试自动化可以通过识别故障点来减少解决问题的时间。
减少“调试”测试失败的时间意味着有更多的时间来测试功能。
自动化的API测试是一个非功能测试的平台,因为现实生活中的序列可以使用相同的测试资产和测试框架自动进行负载和性能测试。
自动化复杂的、事件驱动的工作流
增加功能测试的覆盖率需要更多的测试数据的排列组合。测试自动化通过API直接提供端到端场景中的大量数据组合来提供帮助。
测试数据管理是测试自动化的一个关键功能。它需要保护测试数据的安全性(如果基于生产数据)和数据的参数化,以支持新的和复杂的场景。
为了验证行为的正确性,需要对服务交互的可见性。要在事件驱动的架构中建立可见性,就是服务虚拟化。虚拟化通过成为各种集成在一起的应用程序中间的代理来提供帮助。例如,通过创建一个虚拟服务来模拟传统数据库,就可以监控来自传统系统和被测微服务的请求。
在事件驱动架构中监控交互的能力非常有用。服务虚拟化允许我们在数据在系统之间移动时自动验证那些复杂的工作流。断言被放置在虚拟化的服务中,以确保正确的请求/响应事务,使得监控和验证复杂的事件驱动的交互成为可能。
稳定、隔离和左移微服务测试
服务虚拟化将服务嘲讽提升到一个新的水平。它模拟了你的API交互的复杂的、有状态的行为,以稳定和隔离你的功能测试自动化与难以管理控制的下游依赖关系。这种虚拟化、稳定的测试环境可以为每个开发人员和测试人员复制,消除了现实世界环境的复杂性,但又保留了测试所需的行为。这进一步实现了对你的微服务库存的持续验证,包括作为CI/CD/DevOps管道一部分的客户端系统测试。
改进的测试策略的业务影响
在许多组织中,测试是重中之重。换句话说,花在手动或UI测试上的测试时间和精力要比API或单元测试多。这些组织明白他们需要更好的覆盖率,但UI测试更容易理解和定义(用户界面更直观)。因此,较少的技术(和较便宜的)资源可以进行测试。
软件组织通常希望将他们目前正在进行的测试自动化,这主要是UI测试。虽然这有帮助,但UI自动化是不稳定的,需要不断维护。此外,在UI层遇到的大多数问题都是API层的bug造成的。缺乏对底层活动和交互的可见性意味着浪费了确定根本原因的时间。
愿意转变他们的测试的组织通过从自上而下和自下而上相结合的方法来看待测试,可以获得更好的测试产品,并节省时间和金钱。新的测试策略具有很高的投资回报率,因为经过彻底验证的API减少了UI的不稳定性,这意味着更好的客户体验。
现在可以通过减少测试创建时间来实现更高的测试覆盖率。提高API层面交互的可见性意味着减少了补救的平均时间。开发人员将更快地找出更多问题。这是一个双赢的局面,以相对较小的投资获得较高的投资回报率。
结语
这三个策略通过利用AI驱动的测试创建、API测试自动化和服务虚拟化,从根本上简化了测试创建过程。在不影响产品进度的情况下,测试会随着代码覆盖率的提高而改善,从而实现更好的微服务。采用这些策略可以帮助软件团队实现他们想要的测试投资回报率。