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

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

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

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

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

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

  二、测试实践

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

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

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

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

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

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

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

  三、测试总结

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

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

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 用例(需求用例)概念:使用案例、用况以明确需求为目的,描述用户使用产品(系统)的典型情节。用例简单通俗,能让用户也能参与;强调了用户的目标和观点:谁使用系统?典型场景?目的?强调以用户为中心。用例是系统提供的功能块,换句话来说用例演示了人们如何使用系统。通过用例观察系统,能够将系统实现与系统目标分开,有助于了解最重要的部分(满足用户要求和期望),而不会沉浸于实现细节。通过用例用户可以看到系统提供的功能,先确定系统范围再深入开展项目工作。用例特点1.站在用户角度、而不是实现角度;2.无须披露系统特征和实现细节;3.一个用例只代表了系统的一个单一的目标;4.描述使用,而不是罗列规则。Jacobso...
            0 0 2176
            分享
          • 为什么我们应该从手动测试转向自动化测试测试自动化可以克服很多手动测试挑战,尤其是在敏捷项目中。1)测试可重用性自动化测试用例和测试套件可以在不同的测试周期和测试环境中多次重复使用。因此,每次应用程序更改时,您都可以运行自动化回归测试套件来检查回归错误,避免重复手动进行回归测试。这是自动化降低操作失败风险的最重要优势之一。2)更高的测试覆盖率由于测试是自动执行的,因此您有更多时间专注于新场景并编写更多自动化测试用例来验证和验证被测应用程序(AUT)。您和您的团队可以自由地进行更多探索性测试,以确保产品质量。自动化测试也可以在不同的平台和设备上同时或并行执行。更多执行的测试意味着可能会发现更多的回...
            0 1 1661
            分享
          • 读者提问:有没有一款工具是集 API 文档、API 调试、API Mock、API 自动化测试四种功能为一身的 ?公司现状是这样:开发定义 API 使用 Swagger,后端开发调试 API 使用 Postman,前端 API 数据 Mock 使用 RAP,测试做 API 自动化测试或压力测试使用 Jmeter。开发团队协同效率很低,接口变更了往往做不到各方同步,很让人崩溃。阿常回答:有,Apifox。Apifox 就是 API 文档、API 调试、API Mock、API 自动化测试一体化协作平台,定位 Postman + Swagger + Mock + JMeter。官网链接:https...
            0 0 1211
            分享
          •   最近,项目上出于系统性稳定性、减少测试工作量考虑,打算在 Web 前端引入 BDD。由于上一个项目写了一定的 Cucumber 代码(BDD 测试框架之一),这个框架选型的责任便落到了我的肩膀上了。  在我们进行框架选型的时候,着重考虑了一个因素:测试实现脚本是由开发人员编写的,因此最好寻找 JavaScript 支持的框架。在搜索了一天后,选择了三个框架 Cucumber、Robot、Gauge。以下是上述的三个框架入选的原因:  Cucumber,团队的开发人员有一些有相关的开发经验、支持 JavaScript。  Robot Framework,测试人员接受过相关的培训、不支持 Ja...
            0 0 435
            分享
          •   测试用例老话说的好,工欲善其事,必先利其器。测试管理是把测试过程作为一个系统,对组成这个系统的各个过程加以识别和管理,以实现设定的系统目标。同时要使这些过程协同作用、互相促进,从而使它们的总体作用大于各过程作用之和。其主要目的是在设定的条件限制下,尽可能发现和排除产品缺陷。  而对于开发团队来说,有很多工作需要做好,测试管理不仅可以使产品实现这些效果,还可以使它们超越自我,达到最佳。而且,测试管理有助于产品通过利用数据促进交付。测试用例和测试数据可以轻松关联,并分析各种结果。测试管理对于帮助开发团队进步并不断满足用户需求是至关重要的。  测试数据管理也能够使研发机构去评估测试数据成功与否的...
            0 0 1213
            分享
      • 51testing软件测试圈微信