克服端到端微服务测试中的挑战

每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?3分钟?学习?何乐而不为?,希望?大家?点赞?,加?关注?,你的?支持?是我?最大?的?动力?。

在本指南中,我们将讨论端到端微服务测试中的关键挑战,以及如何通过保持同步来解决这些挑战

世界各地的 Web 和移动应用程序开发人员正在使用微服务架构来构建和交付令人惊叹的技术产品,这些产品在生态系统中具有快速、响应性和高度集成性。

在一个快速成长的科技初创企业中释放高潜力会带来一系列巨大的回 ,所以任何打破障碍发展更好的科技的东西都会得到所有人的赞赏和接受。

微服务体系结构就是这样一个范例,它正在塑造许多流行的和即将出现的技术产品的技术体系结构。它也塑造了我们建立团队和分配责任的方式。但和其他强大的探索领域一样,这一领域也伴随着一系列独特的挑战。

什么是微服务?

Web 服务或服务是一个术语,用于描述基于 HTTP 等协议并充当应用程序 UI 和数据库之间接口的 Web 契约。将复杂的业务和用户故事分解成非常小的模块,并为每个模块构建单独的服务,这基本上是微服务体系结构的本质。

微服务架构提供的一些关键好处是:

自主开发: 微服务体系结构允许您将团队和代码分解为自给自足的小组,而不是拥有一个非常大的团队和项目,这很难管理。团队自主地工作和交付,导致职责和独立工作优先级的明确划分。

功能专门化: 当根据业务需求确定模块并实现适当的团队结构时,它将导致每个团队成为其功能领域的专家。这在缺陷分析过程中也很有帮助。

动态资源分配: 现代云平台为您的应用程序基础设施提供按需扩展,云平台上的微服务允许您对最终的资源优化策略进行微调。

即插即用: 使用微服务的敏捷开发增强了在不停机的情况下从应用程序中添加或删除模块的能力,这在 SDLC 中需要快速添加特性的场景中很有帮助。

应用程序敏捷性: 由于应用程序不是一个单一的整体,一个非关键的故障组件通常不会影响所有其他工作部件,因此在故障场景中使应用程序更加敏捷。

在 CI/CD 环境中,适当实现的微服务架构有助于技术领导层跟踪总体进展,因为开发人员提交的代码之外的所有步骤都是自动的,可以通过仪表板和其他通信工具进行跟踪。

当一个贡献合并到主存储库中时,将触发一系列链式事件,包括在所有级别进行测试。

如果测试中断,整个 CI/CD 管道可能会停止,修复这个问题可能需要时间。在某些情况下,微服务架构往往会增加问题的复杂性。让我们试着理解。

Microservices 的单元测试和集成测试

单元测试是应用程序测试的各个层中的第一层。它意味着通过编写测试代码来测试代码的各个功能。当您向上移动测试层时,测试用例的数量往往会减少,但是成本和复杂性会增加,因此尽可能多地在单元测试级别进行测试是每个诚实和专注的开发人员的目标。

集成测试基本上是下一层,其中单元测试和应用程序功能基于更广泛的业务功能进行分组,并进行批量测试。编写单元测试涉及到大量的来回操作,因为它要求开发人员不仅要编写一次测试用例,而且还要准备模拟输入数据和外部服务响应,因为单元测试没有连接到实时数据库和服务,并且每当发生对原始功能的任何更改时,都要更新所有这些内容。

以下是事情变得棘手的原因:

  • 集成了多种微服务的 CI/CD 流 。考虑到一个模块具有一组中断的测试,有可能导致 CI/CD 停止运行
  • 原因的数量单元测试失败 它是如此巨大,以至于在一个依赖关系跨越多个模块和团队的环境中,由于连锁反应效应,可能需要花费数小时甚至数天的时间来试图找出究竟发生了什么
  • 这是一个常见的场景,发现测试中断了一个模块,由于最近更新的一些其他模块和因为关注点分离。以及团队内部的竞争,开发人员会发现很难花时间和精力在修复不属于他们的模块中的错误上,或者很难与他们合作
  • 同时mocking服务 从付款、预订提供商或外部数据源等方面,捕捉合同的所有细微差别并测试边缘场景非常重要
  • 随着开发新功能的加速推进,开发人员将发现很难集中精力unit test coverage 单元测试覆盖率, 应用程序的复杂性将迅速增长,随着时间的推移,返回并维护高质量的测试包变得越来越困难
  • 这很可能导致团队忽视单元测试,因为随着复杂性的增加,工作开始吸收太多的资源,领导层说这些资源不值得压榨,并在单元测试和集成测试上大量削减,这是一个潜在的长期成本的短期收益。

    这里有一些建议可以帮助你避免这种情况:

  • 一个简单的方法就是分层代码模块和测试套件. 基于流的优先级,也就是说,核心业务流的测试套件比其他的更重要,为了更改和修改核心业务流的代码,您需要更多的经验和批准
  • 对于单元测试和集成测试,最好将编写和执行测试的策略设计为适应未来出现的复杂情况.此外,可以将测试 告系统配置为适当地标记测试严重性,以便只将非常重要的流设置为中断交付/部署推送
  • 技术领导的工作是定义解决方案并管理潜在的复杂问题,如更改外部服务合同或高度分支的依赖关系,并确保所有开发人员都能够使用适当的文档进行更新
  • 开发微服务时的团队管理

    在微服务架构上构建技术产品的最大挑战之一是团队的结构和管理以及由此产生的复杂性。希望实现微服务架构的主要原因是为快速发展的产品增强开发过程。

    在一个快速成长的初创企业中,每天都会有新的业务和用户场景发生变化,而且您希望最大限度地提高开发过程的速度和效率,这就是微服务最有益的地方。但只有在执行和执行得当的情况下才是有益的。

    如果您的团队与您的整体技术标准规范不同步,或者您的规范计划本身存在漏洞,那么很容易发现人们即使在平均速度和质量下也难以交付,同时维持一个臃肿的交付线的开销。

    挑战通常是这样出现的:

  • 当您重新设置系统时,复杂性通常是可管理的,但是一旦开始在此基础上构建模块,复杂性就会呈指数级增长
  • 随着复杂性的增加,技术领导的工作就是观察、理解和控制它。因为技术领导者能够理解正在发生的事情,只有这样他们才能引导开发人员做正确的事情。但如果领导层未能做到这一点,动荡时期更有可能到来
  • 如果领导层未能控制复杂性,通常会导致一种情况,即没有人对正在发生的事情有100% 的了解。导致开发人员对应用程序的控制不够理想.
  • 在这种情况下,事情会以不可预测的方式破裂。想象一下,如果没有适当的监视或语法错误和内存泄漏,就会运行幽灵服务调用和不必要的批处理进程,从而无缘无故地造成大量资源消耗,或者在非关键区域造成一些随机中断,从而导致关键流中断
  • 在某些事情实际上发生故障并引起麻烦之后,找到实际的错误点并分配责任也变得更加棘手
  • 如何避免

  • 尽管建立开发子团队以异步和独立的方式工作以最大化生产力是可取的。您必须确保它不会以团队中明确的责任和任务分配为代价。在任何时候都必须确保团队内部关键变更的清晰沟通。另外,编写正确代码语法的强大文化,在开发团队中将注释和文档作为标准强制执行
  • 建议业务和技术领导人紧密同步地工作,并确保对技术产品的当前和未来需求的最小混淆,以便他们有机会清理和控制问题.通常情况下,我们看到过于乐观的业务分析最终会以需求压倒开发团队而告终,这些需求甚至不会导致用户端的任何重大改进或功能
  • 使用自动化黑盒测试是确保用户方的应用程序功能性的一种强有力的方法,而不必深入探究代码问题
  • 跟踪和修复问题

    如果领导层未能及时修复产品和团队问题,那么这些问题将不可避免地导致客户会议中的 bug 并引发问题。在 QA 检测到问题并通知产品团队之后,他们需要返回一份关于原因的 告,并在最短的时间内修复问题。

    在这里,我们再次看到微服务体系结构和分布式团队结构的复杂性,这带来了更多的挑战:

  • 在一个场景中,当一个功能崩溃时,应用程序的结构失去了正确的形式,并且被糟糕的代码所困扰,QA 正常地完成它的工作,但是对于开发人员来说,由于缺乏代码注释、文档和/或正确的语法,它变得更加难以发现根本原因
  • 由于依赖关系,一个破坏可能会导致一连串的破坏,这需要更深入的调试分析,通常会导致更多的时间。这会导致开发人员端错误部分的检测稍微或显著延迟
  • 在出现多个问题的情况下,很容易看到团队成员之间的相互指责,开发人员对代码包没有深入的理解会进一步延迟检测过程
  • 当最终检测和解决问题时,为代码的功能部分更新单元、集成和其他测试脚本仍然是负责任的开发人员的一项额外任务
  • 由于 QA 和开发人员之间来回的延迟,业务团队很容易忽视技术过程的复杂性,变得越来越敌对,导致整个团队内部的紧张
  • 对于所有的技术领导者来说,看到他们的团队陷入功能失调的模式,这是最可怕的噩梦。对于商界领袖而言,当昂贵的技术资源库似乎无法按照客户的预期赢得客户的信心和赞赏时,这可能是一场更为严重的灾难。

    你可以通过以下方法来避免这种情况:

  • 在成长阶段投入额外的精力来保持业务分析、体验设计、质量保证和开发团队始终保持同步
  • 文档、日志和监控通信。因为证据比人们的主张更有效
  • 如果在系统架构或 CI/CD 设计或实现的层面上有任何错误或计算错误,最好停止这个过程并首先修复核心问题,即使在此之上编写了相当多的代码之后才检测到这个问题
  • 试试看建立一种文化在这里,人的因素得到了清晰的理解,人际关系方程在一个等级体系中双向运行,得到了公正的管理
  • 团队中的合作和帮助应该得到认可和奖励
  • 这里提到的挑战并不简单,需要专门的分析和具体案例研究,以便在现实生活中最佳地解决这些挑战。而且,每个团队和产品的变量都是不同的,所以对一个人有效的方法甚至可能对另一个人都不是可行的选择。

    在这种情况下,所有防止这类问题的努力都没有结果,你不情愿地落入不得不修复一个破碎系统的可怕场景中,仍然有办法做到这一点。

    现在我要提出的建议可能对一些人来说是合理的,对另一些人来说是有争议的,但是我可以向你保证,许多公司已经在过去,在许多停工期间,唯一的优先事项是让工作产品重新上线,已经结束了这种做法,也就是说,优先考虑生产环境的黑盒测试,保留测试环境的白盒测试,只有非常关键的生产流程。

    这样,您就可以为生产环境开发新的功能和组件,而不必每次添加东西时都承担使单元和集成测试工作的额外责任。虽然远非理想,但在紧急或困难的情况下可以采用这种方法,在这种情况下,来自特定用户组的反馈比质量保证策略更有帮助。

    最后,我们建议产品开发/管理过程中的所有参与者都要意识到这些缺陷,并积极努力避免这些缺陷,以便从精心设计的微服务生态系统中获得最大的收益。

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2022年6月11日
    下一篇 2022年6月11日

    相关推荐