• 15
  • 15
分享
  • 银行内部人员带你探寻全链路生产压力测试的解决方案——软件测试圈
  • 曼倩诙谐 2021-03-05 10:04:27 字数 2522 阅读 2480 收藏 15

  摘要:全链路生产压测,指的是模拟真实场景、使用多样化的流量请求进行全流程、全链路压力测试。传统的性能测试,测试环境资源数量、各链路硬件资源配置、配比与生产环境存在差异,且系统性能会受其他关联方的影响,单交易压测结果无法反映系统真实性能情况。而全链路生产压测可以找到系统的瓶颈点、发现系统潜在风险;有效评估系统的实际承载能力,指导调配服务资源、调整限流策略。

  笔者结合自身参与的银行系统全链路生产压测实践经验,针对全链路生产压测的适用场景、风险及难点和解决方案进行了简述及分析,为全链路生产压测的解决方案提供参考。

  1、全链路生产压测适用场景

  全链路生产压测适用场景广泛,主要适用于以下四种场景:

  1)新系统上线

  相对于生产上的已有系统,新系统的承载能力往往很难预估。当一个全新的系统即将上线时,全链路生产压测可以准确探知系统承载能力,防止刚上线被用户流量冲垮,也可以探知新系统支持的最大并发流量访问,新系统的性能是否影响用户体验。

  2)系统稳定性探测

  对于已上线的系统,全链路生产压测可以通过模拟真实的用户流量压力,去探知系统的性能瓶颈,从而提升系统的整体服务能力和吞吐量,提升用户体验。

  3)系统容量规划

  当系统本身已经平稳运行很长时间,比较稳定,需进行成本优化时,全链路生产压测可以对系统进行精细化的容量规划,确保资源的高效利用,从而降低系统的运行成本。

  4)热门业务上线

  在秒杀、抢购等热门业务上线前进行全链路生产压测,可以通过模拟流量激增的场景,对系统的性能进行测试,发现系统的性能瓶颈并进行优化。

  2、全链路生产压测的风险

  尽管全链路生产压测存在诸多的优点,适用场景也较为广泛。但是,在全链路生产压测在开展过程中,仍有一些风险需要注意。首先,由于压力测试在生产环境中进行,压测过程可能影响被测系统功能正常开展,甚至有造成系统瘫痪的风险;其次,生产环境中,压测地址、产品存在泄漏的风险,一旦被正常客户发现、使用,可能造成客户投诉,引发声誉风险;再次,当测试数据流入生产环境,可能给组织业务带来风险;还有,全链路生产压测的关联方众多,如若生产压测前期没有对有关方履行充分的告知义务,有关方未做及时准备,可能使关联系统受到影响;最后,当压测执行过程中,网络流量暴增,可能会引发网络限流等措施,影响压测结果。

  3、全链路生产压测难点及攻克方法

  全链路生产压测的成功实施,很大困难在于压测的全链路特点,其压测脚本、流量构造以及如何与生产实际流量、服务进行隔离。

  1)构造全链路生产压测脚本

  与传统性能测试脚本的构造方法不同,全链路生产压测脚本的构造,需要充分考虑整个系统链路的请求。为此,实施方需充分梳理业务场景、系统架构,统计关联系统相关交易,从而梳理整个链路的请求来源。同时,要根据真实场景业务回放,获得所有API接口和请求。最后,在全链路的请求比例上,可参考以往数据,结合测试经验,按真实场景进行构造。

  2)构造压测流量

  对于压测流量的构造,可以从以下几个方面考虑:使用压测工具构造压测流量,流量来源为IP、运行商等多种来源,其次,压测数据应全面、真实,所以可以收集正常业务流程数据,以便模拟真实业务场景。最后,要确保压测数据可用,并且不带有生产敏感信息,因此需采用人工构造的方式,从真实数据中提取数据,并经过脱敏之后导出。

  3)压测隔离

  在生产环境进行压力测试,势必要考虑隔离的问题。首先,需要对压测流量进行标记,以便隔离流量;其次,一般生产压测选择深夜业务低峰时段进行,基于IP、网络、域名等隔离生产环境,以便隔离服务;再次,通过构造影子区域、影子数据库等方式,进行数据隔离;除此之外,还需对系统进行相关的压测改造,以便使不满足压测隔离的交易满足压测隔离的需求。最后,在全链路生产压测执行完毕之后,还需对压测环境、服务、数据进行清理,确保生产环境未受到生产压测的影响。

  4、全链路生产压测流程规范

  笔者结合自身参与的银行系统全链路生产压测实践经验,提出了以下全链路生产压测流程规范,为全链路生产压测的解决方案提供参考。

1-1.png

图1:全链路生产压测流程图

  1)压测准备

  压测开展之前,要进行充分的压测准备。首先,要确定压测范围,明确压测目标,并针对压测链路进行梳理。其次,针对生产链路压测,要对业务系统改造:例如针对压测交易设计替换页、设置白名单手机号、身份证号等。接着,要明确压测方案:制定全面的压测计划、明确压测数据构造方法、确定压测流程、编制紧急预案、梳理监控指标等。此外,在压测管理方面,需明确压测期间的组织安排及各系统联系人。最后,需进行压测验证:事先进行脚本调试及验证,确保脚本的可用性和有效性。

  2)压测执行

  由于压力测试执行环境为生产环境,全链路生产压测的执行比普通性能测试更为复杂。笔者参与的全链路生产压测分为四部。第一步为预热期,目的是验证压测工具到被测应用的连通性及站点和PC端的功能连通性;接着进入演练期,小并发阶梯增加压力,本阶段目的是验证请求压力按预期传导至应用,验证应用有效性,并确定每个测试场景的时间间隔。第三步开始正式压测,按照预估的TPS阶梯性增加并发,对网络连接、流量、服务器性能进行监控。根据第一次的压测结果进行相应的优化之后,进行第二次压测,以验证系统的性能是否提升,第一次生产压测发现的问题是否解决。

  此外,压测执行过程中需注意的是,一旦发生紧急情况,必须马上根据事先设计好的紧急预案进行处理,以便尽快恢复生产,确保对生产系统级环境不产生影响。

1-2.png

图2:压测执行—从预热期到二次压测

  3)压测总结

  压测执行之后,要及时的对整个过程进行总结。形成详实的生产压测性能分析报告,对系统的容量进行评估。并且对整个生产压测进行复盘,并提出改进计划,因为涉及系统性能优化,全链路的生产压测往往要进行许多轮次。需考虑如何在下一次压测过程中对测试过程进行优化改进。最后,需清理压测数据,要将压测数据还原到压测之前,为下次压测作准备,还需对环境进行恢复并进行测试,以确认系统版本恢复到压测前版本。



作者:穆甜、许潇民   

来源:51Testing软件测试网原创

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   如果你购买的是三星中端智能手机,甚至是高端型号,包装盒里都不会有充电器,当然,如果你愿意,三星公司会很乐意卖给你各种价格昂贵的充电器。今天,该公司推出了其中最昂贵的产品--双 50W 充电器,它既能以 50W 的功率为一个端口充电,也能以 25W 的功率同时为两个端口充电。  这些规格一点也不令人印象深刻,但对于三星手机来说已经足够了,因为三星手机的有线充电功率都没有超过 45W,而大多数机型的最高功率都只有 25W。因此,这款充电器的规格是为三星手机量身定做的,这没什么问题,但这款充电器的售价为 69.90 欧元,实在太贵了。  市面上现在有很多规格更好、价格更低的充电器。因此,人们购买...
            0 0 636
            分享
          •    最近和几个认识的测试小伙伴聊天,谈论最近找工作不容易,要不就是简历石沉大海,就不就是面完,等半天内一点消息都没有,那么今天我们就来谈谈,面试过程中的常见的那些潜台词,帮大家把把关,希望会对大家找工作有帮助。  前提:你要有一个面试机会,有一个面试机会,说明你还算符合公司要求,是成功的一半。好好把握这个机会,机不可失失不再来啊!没有面试机会的小伙伴也不用担心,可以适当修改下简历或者投简历的途径,以前的文章有讲过。  一般公司都会有好几轮面试,能进到最后一轮,说明你已经过五关斩六将,快要拨开云雾见青天了,但是并不是百分百就成功了,不要轻敌哦~  面试成功几率60~80%:...
            2 2 1502
            分享
          • day11、安装了python3.8,我是windows系统,下载完之后直接打开安装即可2、安装完之后,打开cmd命令,敲入python,出现带有python版本号信息就算安装成功了3、>>>符号表示进入了python环境,输入exit()可以退出python环境安装Python - 廖雪峰的官方网站 (liaoxuefeng.com)
            0 0 1124
            分享
          • 一、什么是兼容性测试?很多人都知道兼容性测试,但是却很少能准确理解兼容性测试,大多都只会想到浏览器的兼容;实际兼容性还有其他内容,包括web 兼容和APP 兼容;那么下面咱们先说说什么是兼容性测试:兼容测试(Compatibility Test Suite )官方简称CTS ,指对所设计程序与硬件、软件之间的兼容性的测试。一般来说,兼容性指能同时容纳多个方面,在计算机术语上兼容是指几个硬件之间、几个软件之间或是软硬件之间的相互配合程度。按照我的理解,我认为兼容性测试是指测试软件在特定的硬件平台上、不同的应用软件之间、不同的操作系统平台上、不同的网络等环境...
            7 7 947
            分享
          •   每个应用程序(桌面、网络或移动)在发布到市场之前都需要进行测试。功能测试被认为是最重要的测试类型,因为首先,应用程序必须做它需要做的事情。  功能测试验证每个软件功能的操作是否符合需求规范。如果应用程序不能满足其功能需求,它可能无法长期存在。  在任何应用程序的生命周期中,这种类型的测试都是一个关键且代价高昂的活动。因此,功能测试自动化是提高软件质量和降低测试成本的有效解决方案。  这项工作将引入功能测试和自动化来测试网络应用程序。我将探索如何设计功能测试用例,并使用一个众所周知的测试工具自动化它们。  什么是功能测试?  功能测试是一种测试类型,其中软件根据其功能需求规范进行测试,以发现...
            0 0 941
            分享
      • 51testing软件测试圈微信