近年来,微服务为各个行业打造了高度灵活、且适应性强的IT基础设施。作为一种独特的软件开发方法,它主要专注于通过分别执行和实现单一的功能模块,来协同实现软件产品所既定的整体任务与服务。同时,它可以使开发者按需仅更改某一项服务,而无需修改其余的基础架构。
简而言之,微服务架构既可以轻松部署和更改每一项服务,又不会影响其他的应用程序或服务功能。测试人员和开发人员不必拘泥于传统的、集多种功能为一身的单体架构(monolithic architecture),而只需使用微服务方法,为每个功能构建独立的模块即可。
不过,微服务架构也会让应用程序变得更加复杂,尤其是在我们添加了多项功能后。相应地,由于应用程序本身具有分布式的特性,它也增加了针对众多服务组合功能的测试复杂性。此外,由于微服务在实现上,可以遵循不同的架构,因此我们往往还需要某些特殊的工具与策略,来测试和验证微服务的执行效果。通常,在针对微服务的测试中,我们应当注意如下三个方面:
- 是否能检验各种代码的基本功能和运行能力
- 是否能提供准确、快速且可靠的反馈
- 是否能简化整个维护过程
微服务架构的主要优势
- 更好的可扩展性
能够伴随着对于某些服务需求而增长,或是在不同的基础设施和服务器上按需执行。
- 快速交付
通过分布式开发,微服务架构使团队能够同时开发出大量的微服务。此外,由于开发周期的缩短,微服务也有益于加快代码的迭代与更新。在此基础上,测试团队将会有更多的时间去全面测试目标代码或软件产品。
- 已定义的架构
由于那些大型应用会被分解成为更小的部分,因此测试人员将可以更加轻松地去理解各个较小的部分,进而快速地对它们进行改进或增强。通过此类方式,整个项目团队将能够获取更加快速的开发周期。
- 鲁棒性
由于微服务能够支持各种自主开发、不同的环境应用、以及服务运维。因此,如果应用程序能够很好地遵循此类模式,那么就算有单个服务出现了异常或崩溃,也不会影响到同一个应用中的其他服务。可以说,每个微服务的“服务边界性”,有效地保障了整个应用对于故障的隔离。
- 易于执行
由于微服务应用遵循的是模块化的方法,因此导致了每个服务都会比传统的单体架构应用程序的体积要小得多。同理,单个服务在执行的过程中也就更加简便。
知名的八种微服务测试工具
目前,业界有着许多种工具可以被用于按需跟踪、监控和修复微服务各项设计和操作。在此,我将向您简要地介绍八种最为常用且流行的微服务测试工具。
- InfluxDB
InfluxDB是一种采用Go语言编写而成的免费应用工具。实际上,它是一个快速、可靠、且具有高度可访问性的数据库。通过优化,它能够检索各种时序类型的数据。凭借着其分布优势,测试人员往往可以通过使用该工具,迅速地发现并定位被测微服务在性能上的瓶颈。如果您想了解更多有关InfluxDB的具体特性,请参见--https://www.influxdata.com/。
- Apache JMeter
作为一种高效且实用的性能测试工具,Apache JMeter可以通过从不同来源获取数据的方式,方便测试人员在不同规模的软件中,对微服务全面开展功能和性能上的测试。如果您想了解更多有关Apache JMeter的具体特性,请参见--https://jmeter.apache.org/。
- Gatling
Gatling是一种采用Scala语言编写的微服务测试工具。在设计上,该工具具有易用性、可维护性、以及较高的性能。它能够被测试人员在许多平台上模拟微服务的执行。而执行完毕后,Gatling会在自动生成的报告中,体现活动用户数、以及响应时间等运行中的参数指标。作为一种开源且免费的工具,Gatling主要测量的是那些基于HTTP的Web应用服务器,并且能够在测试中支持各种脚本、插件和集成。它对于微服务的性能测试能力,有着不俗的表现。如果您想了解更多有关Gatling的具体特性,请参见--https://gatling.io/。
- Jaeger
Jaeger是一种端到端的分布式开源跟踪工具(Uber在其分布式系统中,就用到了该工具),可用于检测和排查以微服务为中心的系统。通过在被测软件的运行环境中跟踪不同的服务,它可以检查各种潜在的根本原因、关键服务的依赖关系、以及有待执行性能优化的领域。如果您想了解更多有关Jaeger的具体特性,请参见--https://www.jaegertracing.io/。
- Hoverfly
作为一种自动化的开源式API通信模拟工具,Hoverfly可以协助用户开展各种集成测试工作。例如,用户可以根据网络中的速率限制和延迟问题,去检查微服务的API是如何就某个具体事件做出反应的。同时,它可以通过模拟通信的方式,在微服务之间运行各种测试调用,进而以代理的模式,记录针对某种请求的响应效果,并最终确认其是否能够按照预期执行或反馈。如果您想了解更多有关Hoverfly的具体特性,请参见--https://hoverfly.io/。
- Pact
作为一种契约式测试工具,Pact可用于监控HTTP和各种消息之间的交互,以确保应用程序以消费者驱动契约(consumer-driven contract)的方式运行。此处的契约是指,在软件系统中,各项服务之间进行数据交互的标准化格式。例如:消费者端(client)和服务器端(server)之间交互的数据接口等。从本质上讲,消费者驱动契约能够让测试者以一种离线且解耦的方式(即,无需消费者端和服务器端同时在线),而依赖契约作为中间的标准,以验证服务器端的内容是否满足消费者端的预期输出。因此,此类独特的测试方法,可以大幅减少单元测试的工作量。最初,Pact是采用Ruby语言实现的,后来陆续被JS、C#、Java、Go、Python等语言所重写。Pact可以针对微服务模式下的多个单独服务接口进行契约测试。如果您想了解更多有关Pact的具体特性,请参见--https://docs.pact.io/。
- Amazon CloudWatch
作为一套针对监控的解决方案,Amazon CloudWatch可被用于监控部署在Amazon Web Services上的各种应用程序、或微服务的资源使用情况。CloudWatch为用户提供了相关数据和切实见解,以监控应用程序、响应系统的性能变化、优化资源的利用率,并在统一视图中查看整体运营的状况。
它能够以日志、事件、以及参数指标的形式,通过收集监控到的数据,发现被测微服务、及其环境中的各种负载状态、异常行为、性能变化、以及有待优化的资源利用率等方面,因此它是一个非常实用的工具。如果您想了解更多有关Amazon CloudWatch的具体特性,请参见--https://aws.amazon.com/cloudwatch/。
- Grafana
Grafana是一个免费的、针对参数指标可视化的分析套件。测试者可以使用它来可视化各种时序数据,以实时地反映出被测微服务的流量变化和服务状态。如果您想了解更多有关Grafana的具体特性,请参见--https://grafana.com/。
小结
总的说来,选择一款合适自己的微服务测试工具,不但可以帮助我们尽早地发现和纠正现有软件代码中的问题,进而提高待测软件的整体质量;而且从长远角度来说,能够极大地增加开发团队和客户对于被测软件产品的信心,增强赢得市场的动力。
原文标题:Top Microservices Testing Tools Testers Should Know About,作者:Shormistha Chatterjee