【51CTO.com快译】如果您正在开发连接到多个微服务、软件即服务 (SaaS) API、遗留系统和其他第三方服务的应用程序,那么创建一个强大的测试环境可能会很棘手。例如,假设正在验证的一个 API 是团队开发的微服务。在这种情况下,可能拥有 DevOps 功能,包括持续集成和持续交付 (CI/CD)、基础设施即代码以及创建测试数据集的工具,以便为该服务启用测试环境。然而,即使有了这些功能,当团队开发许多云原生应用程序和微服务时,启动多个测试服务的成本也会变得很高。
如果是第三方 API、SaaS 或数据流,则可能需要依赖该服务的测试基础设施和功能。尽管这些测试环境应该支持生产系统的功能,但它们可能没有完整的数据集,并且将它们置于负载下以支持性能测试可能会违反服务条款或者造成费用高昂。
服务和 API 虚拟化平台旨在通过创建和模拟 API 和服务端点来解决这些复杂性。服务虚拟化平台不再是旋转测试环境,而是充当测试下游应用程序和组合服务的端点,并响应连接应用程序或服务的请求和事务。
如果只使用少数几个 API,那么API模拟可能是模拟端点的一个足够好的实践,并且像 Mockito、JMock 或 WireMock 等工具都是 Java 选项。但是一旦有了许多开发团队、不断增长的api或复杂的测试数据集,就需要一种更具可伸缩性的方法,比如服务虚拟化。此外,如果正在测试处理信用卡、连接到账单支付服务或执行其他复杂交易的应用程序,那么服务虚拟化平台可以针对更广泛的用户体验和错误场景进行验证。
我与金融服务领域的云工程师 Anna Ramadoss 讨论过如何使用服务虚拟化平台的问题。她说:“服务虚拟化,一旦成为团队的主流,就缩小了主系统和从属系统之间的界限。更新是即时的,交付时间变得更快。其结果是一个精心设计的系统,可以更快地更新市场。它还可以减少基础设施需求和成本。”
服务虚拟化如何实现左移测试
许多组织都希望将他们的测试工作转移到更快地识别和解决问题的方向。但是当测试环境不可用于依赖服务时会发生什么呢?
开发人员很自然地避开阻碍其工程工作的障碍。在开发应用程序时,开发人员是应该等待 API 的测试基础设施和功能,还是更有可能将这种测试推迟到开发过程的后期?更麻烦的是,开发人员是否会对 API 的行为做出假设,然后被迫在开发过程的后期解决缺陷,或者是,在生产中发现缺陷的时候呢?
建立一个服务虚拟化平台并要求将服务虚拟化作为一个开发标准有很多好处,特别是对于需要针对许多 API 进行广泛测试能力的团队而言。以下是使用服务虚拟化平台帮助左移测试的几个优点:
• 服务虚拟化是开发单元测试和为微服务进行持续测试的自然延伸。作为开发过程的一部分,开发人员或质量保证工程师应该在服务虚拟化平台中配置模拟API响应的端点。所有开发人员在构建下游应用程序和服务时都可以使用这些端点。
• 服务虚拟化层通过公开所有支持版本的端点,来简化针对一个 API 的多版本测试。在对新的API版本进行测试时,开发人员可以创建测试来比较最新版本和旧版本的响应。这种 A/B 测试对于验证机器学习模型和预测分析新版本的下游影响特别有用。
• 服务虚拟化可以与测试数据集捆绑在一起,并用于验证事务。一旦开发人员完成了一个测试场景,他们就可以将端点刷新回原始测试数据集,并根据需要重复测试。
• 在云上运行时,服务虚拟化平台可以根据测试量增加和减少容量。因此,基础设施可以扩展以处理许多同时运行测试或更健壮的性能测试的开发人员。
通过解决一个常见的测试基础架构挑战,团队可以使用服务虚拟化平台的功能在开发过程的早期建立新的测试场景。
平台提供商建议其他用例。例如,SmartBear 建议开发团队使用服务虚拟化来增强安全测试,根据消息类型自动化不同的测试场景,并支持迭代设计。Parasoft 建议使用服务虚拟化来测试格式错误的数据响应、模拟高延迟,或验证对更大负载的响应。Broadcom Service Virtualization(正式名称为 CA DevTest)建议开发团队将测试链接到多步骤事务中,并持续验证业务工作流。
Ramadoss 建议开发团队确定他们的测试要求,以查看 API 虚拟化是否足够,或者是否需要更通用的服务验证。例如,她说,“服务虚拟化扩展到基于 TCP 的协议,以支持来自 TransUnion、Equifax 和 Experian 等信贷机构的服务。” 可能需要的其他协议包括数据库 (JDBC)、中间件(JMS、Rabbit MQ 等)和大型机协议(CICS 等)。
我与 Broadcom 的 DevOps 首席技术官 Shamim Ahmed 讨论了 DevOps 组织如何在虚拟服务环境中使用服务虚拟化。他说:“随着越来越多的组织为他们的软件系统发展到组件架构,我们看到采用微服务进行开发和容器化进行部署的趋势越来越大。为了支持这一趋势,虚拟服务可以打包并部署在容器中,按需实例化,并在不再需要时停用。”
服务虚拟化的工作原理
平台具有不同的能力来创建服务端点,以下是常见的方法:
• 以Web服务描述语言(WSDL)、Web应用程序描述语言(WADL)或OpenAPI规范(OAS)链接或上载API的定义
• 使用浏览器插件或web服务器代理记录事务
• 手动创建服务定义,对于下游开发人员想要在 API 准备好之前进行测试时很有用
创建端点后,平台通常支持连接到测试数据源、上传测试数据或自动生成测试数据。在验证表单或文档上传以及处理复杂事务时,生成测试数据非常有用。这也是创建关于个人身份信息 (PII)(例如姓名、社会安全号码或信用卡号码)的模拟数据集的比较安全的方法。
一旦有了服务端点,服务虚拟化平台就会提供开发工具包、IDE 插件和 CI/CD 工具插件,作为接口和利用它们的不同方式。以频繁部署为目标的开发团队可以通过提供更多 API 端点和增加测试数据集的广度来改进连续测试实践。
使用服务虚拟化平台和成熟的持续测试实践的敏捷开发团队应该考虑几个最佳实践,例如创建负面测试用例和培训技术人员。加快测试周期的几个最佳实践,包括定义基础架构要求、保护虚拟化服务以及定期更新系统。领导者还应该寻求切实的商业利益,例如更快地将新应用程序投入生产并降低成本。
随着越来越多的组织针对云实现应用程序现代化、开发微服务并与许多 SaaS 平台集成,服务虚拟化成为支持稳健和持续测试的关键平台功能。
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】