• 0
  • 0
分享
  • 如何提高系统可靠性?混沌测试故障场景分析法太香了!——软件测试圈
  • 小丸子🍡 2024-06-07 13:36:44 字数 1630 阅读 818 收藏 0

  摘要:随着系统逐步由单体架构向分布式微服务架构转型,直接面临因系统重构、底层技术栈升级、系统间交互增多等变化因素带来的系统可靠性风险。混沌测试是一种对系统开展可靠性验证的有效测试手段。

  在混沌测试开展的过程中,一大挑战是测试场景如何选取。测试人员通常会面临两难的局面,当场景选的较少时担心覆盖不全、验证不够充分,场景选取的多时又无法做到穷举各类场景、执行过多场景花费时间和人力成本较高等问题。因此一种合理的故障场景分析方法是不可或缺的。

  一、基于容错视角的故障场景分析方法

  在面对测试场景发散或疏漏的问题上我们发现,虽然系统发生的故障种类繁多,但故障处置手段却是有限的,诸如启停、隔离、切换等处置操作能作为多种不同故障的容错手段。由于混沌测试的目的就是验证系统可靠性能力,具备相同容错手段或高可用能力的故障则无需重复验证。因此从容错的视角反推,将使用相同容错手段的故障归为一类,验证系统是否具备该类型的容错能力,即可做到对故障场景的有效精简,进而形成基于容错视角的故障场景分析方法。

  基于这种思路从容错视角出发梳理故障场景,并结合分布式稳定性领域的经验积累,故障场景被归纳成单点类故障、局部类故障、整体类故障、过载类故障、依赖类故障五类,每类故障可对应验证被测系统的冗余能力、容灾能力、重建能力、过载控制能力、依赖解耦能力。在以应用系统为风险对象开展故障场景分析时,通常除部分业务有特殊设计外同一微服务内各类功能或交易的容错能力是相同的,因此只需将系统待测试的服务或业务功能按照这五类故障场景分类,之后视情况对特殊设计进行针对性的场景补充,即可实现对被测系统混沌测试场景的完整分析,避免场景重复设计和执行带来的重复工作。

  二、测试实践

  本次测试实践的主要需求来源为应用系统技术栈迁移,因此重点开展面向应用系统的应用层混沌测试。依照基于容错视角的故障场景分析方法针对单点、局部、整体、过载、依赖五类故障进行场景分析和设计。根据本次测试需求,对每类故障的验证点如下:

  ·单点类:模拟系统各个微服务的应用POD发生故障,单个或部分POD故障后验证系统是否为多实例部署具备冗余能力、探活机制是否有效、隔离和漂移等策略是否生效。

  · 局部类:针对系统的容灾架构和切换方案模拟集群、单元、园区级故障,验证切换方案的有效性和对业务连续性的影响。

  · 整体类:验证夏令时、闰年闰月、跨年等日期跳变场景对系统服务是否产生影响,系统如发生故障后是否具备重建能力。

  · 过载类:模拟短时间流量洪峰和长时间流量激增对系统产生的影响,验证系统是否具有流控等过载保护能力。

  · 依赖类:模拟被测系统与下游系统间调用发生故障,验证超时、重试、降级机制是否合理,强弱依赖设计是否合理。

  在场景执行上,对于单点、局部、依赖三类故障场景,通过注入网络类故障、应用抛异常等手段模拟发生服务不可用的故障场景。过载类故障采用高并发混合发压的方式模拟流量洪峰。整体类故障则没有通用的模拟手段,需要根据具体场景选择故障。

  三、测试总结

  在本次混沌测试实践中主要发现两类问题。第一是应用K8S探针参数配置不合理,在单点类故障场景测试中发现配置的存活和就绪探针失败次数阈值较高,造成服务已处于不可用状态但隔离和重启动作触发迟滞的情况,对业务连续性产生一定影响。第二是部分关键交易不具备流控能力,在过载类故障场景测试中发现部分交易缺少流控设计,对被测系统及下游系统产生较大压力。之后通过评估生产实际业务流量完成流控配置和验证,提升系统过载保护能力。

  通过本次混沌测试实践,在方法层面有效验证了基于容错视角的故障场景分析方法的可行性,避免了故障场景梳理过程中发散和疏漏的问题,实现对各类常见故障场景的测试覆盖。同时在实践层面对应用系统迁移新技术栈测试过程中细化了各类型故障场景关联的可靠性设计和容错能力,并明确了场景执行时对应的故障模拟手段,为后续分布式系统混沌测试实践提供参考。

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •       一、简介      Locust是一个易于使用,分布式,用户负载测试工具。它用于负载测试web站点(或其他系统),并计算出一个系统可以处理多少并发用户。在测试期间,一大群虚拟用户访问你的网站。每个测试用户的行为由您定义,集群过程由webUI实时监控。这将帮助您在让真正的用户进入之前进行测试并识别代码中的瓶颈。      Locust完全是基于事件的,因此在一台机器上支持数千个并发用户是可能的。与许多其他基于事件的应用程序不同,它不使用回调。相反它通过gevent使用轻量级协...
            0 0 2228
            分享
          •   一、十年测试感悟  恍惚间,已经进入测试岗位十年多的时间了,回顾过往,思绪良多,一路走来,或多或少的经历了一些坎坷,也遇到了不少的困难,也曾一时间四顾迷茫,在此,我结合了自己的一些心得,愿本篇文章,能让想进入测试行业的朋友们有一个方向,避免和我一样,独自闯荡江湖还没成为大侠,却已经走了不少弯路。  二、写给刚进入测试岗位的你  刚入测试行业,你会发现自身的期望与现实落差很大,随着时间迁移越来越迷茫,当时的我也是摸着石头过河,随着时代的飞速发展 ,技术的变更也越来越快,测试人员需要学的越来越多,在此给出几点建议。  三、勾画职业蓝图  明确中前期测试工程师本身的发展规划,在此建议大目标、小阶...
            0 0 1289
            分享
          • 读者提问:对于测试架构师日常工作中做哪些事情我还挺好奇的,这个岗位似乎还挺稀缺的,我所经历的公司没有这个岗位。我对测试架构师的理解就是技术架构师,主要是做技术选型,以及带领整个团队做技术提升的。不知道软件测试架构师在实际工作中,都做哪些事情呢?阿常回答:一家业务体系庞大、复杂的公司的测试架构师的职责主要有五个。1、测试团队的技术带头人测试架构师会关注整个团队的技术提升,包括技术难题的攻关,团队遇到的技术难题,你能够做到 90%的解决率。2、深入参与关键业务的评审关注软件的可测试性,作为测试 leader、项目负责人或者测试架构师需要深入参与技术架构的选型,包括前期的概要设计,给出建议。3、测试...
            0 0 1279
            分享
          •   一.接口测试分析  外部接口:  测试被测系统和外部系统之间的接口。  内部接口:  · 内部接口只提供给内部系统使用  · 内部接口提供给外部系统使用  二.接口测试的流程及用例的设计  1、根据接口api文档(或可通过抓包工具获取),熟悉接口业务,接口地址,鉴权方式,接口入参出参及错误码。  2、编写接口用例。  思路  正常情况:输入正常入参,接口能够成功返回数据。  异常情况:  · 异常鉴定:鉴权码为空,鉴权码错误,鉴权码过期,鉴权码失效...  · 输入异常:输入为空,输入类型异常,输入长度异常  · 错误码覆盖:根据业务而定  · 其他...
            0 0 936
            分享
          •   现状:  看过前面的文章,楼主用的是python,所以在搭建测试报告这块的时候使用的是unittest+htmlTestRunner;然后发现生成出来的报告,总是有那么不完美的地方,比如想增加图片,比如显示风格改变下;然后尝试性的去修改了一个htmlTestRunner源码,虽然图片出来了,显示风格修改不了...so...萌生的弃意...  问题:  1.unittest  unittest当案例异常或脚本执行异常时,无法继续执行下个案例~,比如登录时,后台服务异常、登录用户无菜单权限异常、新增用户状态导致无法登录异常等等;  unittest.assertEqual、assertRais...
            0 0 866
            分享
      • 51testing软件测试圈微信