好分期 Mock 服务在测试中的应用实践(1)

发表于:2024-1-15 10:09

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:李豪 等    来源:网络

#
Mock
  Mock 技术是一种软件开发测试中用于模拟(Mock)测试数据和对象的技术。主要用于消除测试中的依赖关系,提高测试的独立性和可重复性,帮助测试人员进行有效地测试。Mock 技术也可用于前后端和微服务架构下服务间的分离开发。 Mock 技术的主要思想是使用模拟对象或数据,替换测试环境中的真实对象或数据,以达到如同真实环境一般的测试效果。通过 Mock 技术可以提供独立性的测试数据或者环境,为软件开发过程中的单元测试、集成测试、系统测试性能测试各种阶段提供必要的测试支持。
  在互联网金融业务领域,我们面临的挑战包括:长链路业务流程、众多外部服务依赖以及复杂的业务场景。在软件生命周期过程中,多个团队同时参与开发和测试会出现以下情况非常依赖 Mock 服务。
  依赖服务不稳定或不可用:测试过程中,依赖的外部服务可能不稳定或不可用。如果这些依赖的服务不稳定,则无法进行开发和测试。Mock 服务模拟这些服务的行为响应,确保了测试的连续性和有效性,不再会受外部服务的限制。
  并行测试的需要:不同团队可能正在测试彼此之间存在依赖关系的不同的模块或应用程序。使用 Mock 服务可以模拟其他团队尚未开发完成的模块或应用程序的行为响应,以便其他团队可以继续开发和测试。
  效率和成本问题:系统集成测试会涉及到多个环境和资源。如果每次都要在实际环境中进行测试和集成,会消耗大量的时间和成本。使用 Mock 服务可以在开发和测试过程中快速模拟,从而提高效率和降低成本。
  安全和合规性问题:金融行业的软件开发需要遵守严格的安全和合规性要求。在开发和测试过程中,可能需要访问敏感数据或进行一些敏感操作。使用 Mock 服务可以避免对真实数据和系统的访问,从而降低潜在的安全和合规性风险。待线上灰度时再进行敏感数据相关的数据验证。
  当前 Mock 方法存在的问题
  随着业务和技术不断发展,以及测试效率提升要求,原有 Mock 技术方法在复杂技术架构和业务场景的后端服务中应用存在如下问题:
  1、Mock 服务与真实服务不能同时工作
  服务调用方每次只能请求一个服务地址,Mock 服务地址或真实三方服务地址只能选择其一,无法针对于不同业务场景访问 Mock 服务和真实服务,Mock 服务和真实服务无法同时工作。
  同时工作允许部分业务场景与真实三方服务交互,其他场景使用 Mock 测试验证。其优势如下:
  1) 降低测试成本
  将小金额划扣还款与真实支付渠道服务对接联调保证了功能验证准确性。将大金额划扣还款走 Mock 服务降低测试成本。
  2) 提升测试效率
  将已验证通过的功能切换到 Mock 服务上进行测试,降低三方服务不稳定对我方的测试影响。同时新增独立功能点继续走真实联调测试。
  2、Mock 服务与真实服务切换效率低
  全量切换: 全部流量在访问 Mock 服务和真实服务之间互相切换效率低。
  传统方法需要修改调用方请求地址,更新配置并重启服务加载生效,无法一键迅速切换。
  部分流量切换:针对于部分流量在访问 Mock 服务和真实服务之间切换效率低。
  支持动态 Mock 响应且支持反向代理的 Mock 技术服务才能实现部分流量切换。 传统的动态切换方法需要编写切换逻辑脚本。脚本因包含 Mock 的所有动态响应逻辑,频繁修改可能会引入额外风险导致原有 Mock 响应异常。脚本修改进行流量切换是重复性的工作,每次切换均需要熟悉脚本逻辑和修改。
  3、多测试环境下不同环境期望使用不同的 Mock 规则
  测试和开发环境是多环境的,当不同的环境或者不同用户数据访问同一个 Mock 服务同一个 API 接口时,如果期望返回不同的 Mock 响应,因为不支持虚拟 Mock 服务只能通过调用方请求增加环境标识和动态 Mock 响应实现,实现效率低下且支持度不完善。
  综上所述,传统的 Mock 方式很难实现 Mock 服务与真实服务同时工作的模式,无法支持虚拟 Mock 服务(用来区分隔离环境或者业务场景),需要将能实现的逻辑全部放入动态响应脚本,导致脚本内容臃肿复杂且无法复用,每次 Mock 响应逻辑修改均需要重构脚本。
  Mock 的切入模式
  在介绍好分期 Mock 服务如何解决上述问题之前,先简单说明下好分期中后台技术架构。随着业务和技术不断发展,因包含了历史留存业务系统目前主要有如下两种技术架构,针对不同架构采用不同的方式来切入 Mock 服务。
  服务、API 网关架构
  服务的发现、调度由发布平台和网关实现,服务之间调用通过 API 网关。
  Mock 服务切入后,将作为前置网关服务根据路由规则,返回动态 Mock 响应内容或者转发到其他服务。
  切入方法:
  1. DNS 劫持,将访问服务的域名均解析到 Mock 服务网关
  2. 修改各服务配置,将原访问 API 网关服务地址改为 Mock 服务网关的服务地址器地址
  ·微服务架构
  微服务架构由微服务治理框架组件支撑,服务间调用节点信息来自注册中心。
  Mock 服务切入后,微服务通过注册中心获取到的均为 Mock 服务地址,访问 Mock 服务地址后,由 Mock 服务将请求根据环境、API 接口、数据内容等路由到对应的其他微服务或者返回动态 Mock 响应。
  切入方法:拦截或者转移微服务的注册,不再注册到所属区域的注册中心。Mock 服务向注册中心注册服务地址。微服务从注册中心拉取待调用的服务节点时,拉取到 Mock 服务地址,并请求到 Mock 服务网关,Mock 服务根据路由规则请求到对应的微服务或者返回动态 Mock 响应。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号