现在性能测试的趋势是全链路压测吗?全链路压测需要如何开展?需要怎样支持全链路压测?测试需要在其中提供什么样的价值?
做全链路压测之前,需要了解项目背景,为啥需要做全链路压测?是因为现在的服务规模、调用链路、架构设计过于复杂和庞大,测试环境已经无法模拟真实用户访问场景的压测,必须要在线上做压测,所以,才有了基于线上环境的全链路压测。如果应用规划很小,独立的压测环境完全可以模拟真实场景,就完全没有必要在线上生产场景搞全链路压测。
全链路压测要实现功能主要有:数据构造、压测隔离、链路治理、任务调度、压测熔断、压测引擎、压测监控等,其中最核心的是:数据构造、压测隔离、链路治理
数据构造(压测数据)主要包括基础数据和链路数据两种
1)基础数据:包括业务运行所需的库表和数据,例如:用户、商品、优惠券、订单等,基础数据的规模通常需要与实际业务数据在量级上保持一致;
基础数据的准备方式通常有直接构造和数据迁移两种:
a)直接构造:直接根据业务规则构造出来,一般用在少量数据的准备,例如联调阶段的数据构造;b)数据迁移:对线上数据做清洗、采样、偏移后迁移到影子库表,数据完备性好,仿真度高,省时省力。
2)链路数据:包括需要压测的接口和多样化的接口参数集合,接口请求的参数集合是基于基础数据生成的。
压测隔离
在生产环境进行全链路压测,与测试环境压测最大的不同在于,生产环境压测要保证压测行为安全且可控,压测数据不能污染正常的业务数据,不会影响用户的正常使用。最核心的一点是:压测数据的隔离。而针对压测数据隔离,业界有很多解决方案,常见的有影子表,影子库以及数据偏移。
链路治理
梳理清楚端到端的请求链路、技术架构、分层结构、模块划分,以及RPC、消息、缓存、数据库等中间件的使用情况,就可以进一步分析潜在的瓶颈点,比如容量不足、日志资源耗尽、缓存击穿、缓存热点、数据库连接池耗尽、线程池资源耗尽、触发限流、消费延迟、GC、慢SQL、大对象等,并针对性的增加监控指标、制定应急预案。
全链路压测涉及的环节很多,需要RD支持的工作包括:
数据隔离:需要RD改代码以实现对压测请求的标记,从而写入影子库表实现数据隔离;链路治理:需要和RD沟通,梳理调用链路
QA 可以做包括数据构造、任务调度、压测熔断、压测引擎、压测监控等。
你在测试过程中有遇到什么问题呢?欢迎VX添加Test_Club与我沟通交流。