作者:军军CJJ_317 | 来源:互联网 | 2023-08-15 14:30
本文是_《PerformanceTestTogether》(简称PTT)_系列专题分享的第二期,该专题将从性能压测的设计、实现、执行、监控、问题定位和分析、应用场景等多个纬度对性能
本文是 _ 《Performance Test Together》(简称PTT)_
系列专题分享的第二期,该专题将从性能压测的设计、实现、执行、监控、问题定位和分析、应用场景等多个纬度对性能压测的全过程进行拆解,以帮助大家 _
构建完整的性能压测的理论体系,并提供有例可依的实战。_
该系列专题分享由 阿里巴巴 PTS 团队 出品,欢迎在文末处加入性能压测交流群,参与该系列的线上分享。
**第一期:《
压测环境的设计和搭建》**,点击这里。
本文致力于给出性能压测的概念与背景介绍,同时针对市场上的一些性能压测工具,给出相应的对比,从而帮助大家更好地针对自身需求实现性能压测。
为什么要做性能压测
在介绍性能压测概念与背景之前,首先解释下为什么要做性能压测。从09年的淘宝双十一大促导致多家合作银行后台系统接连宕机,到春运期间12306购票难,再到前不久聚美优品促销活动刚开始就遭秒杀。根据Amazon统计,每慢100毫秒,交易额下降1%。这些事件和统计数据为大家敲响了警钟,也客观说明了性能压测对于企业应用的重要性。
从具体的作用上讲,性能压测可以用于新系统上线支持、技术升级验证、业务峰值稳定性保障、站点容量规划以及性能瓶颈探测。
1. 新系统上线支持
在新系统上线前,通过执行性能压测能够对系统的负载能力有较为清晰的认知,从而结合预估的潜在用户数量保障系统上线后的用户体验。
2. 技术升级验证
在系统重构过程中,通过性能压测验证对比,可以有效验证新技术的高效性,指导系统重构。
3. 业务峰值稳定性保障
在业务峰值到来前,通过充分的性能压测,确保大促活动等峰值业务稳定性,保障峰值业务不受损。
4. 站点容量规划
通过性能压测实现对站点精细化的容量规划,指导分布式系统机器资源分配。
5. 性能瓶颈探测
通过性能压测探测系统中的性能瓶颈点,进行针对性优化,从而提升系统性能。
综上所述,性能压测伴随着系统开发、重构、上线到优化的生命周期,因此有效的性能压测对系统的稳定性具有重要的指导意义,是系统生命周期中不可或缺的一部分。
性能压测的基本概念
性能压测是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
从测试目的上性能压测又可以划分为负载测试、压力测试、并发测试、配置测试以及可靠性测试。
负载测试是测试当负载逐渐增加时,系统各项性能指标的变化情况。
压力测试是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。
并发测试通过模拟用户并发访问,测试多用户并发访问同一个软件、同一个模块或者数据记录时是否存在死锁等性能问题。
配置测试是通过对被测系统的软/硬件环境的调整,了解各种不同方法对软件系统的性能影响的程度,从而找到系统各项资源的最优分配原则。
可靠性测试是在给系统加载一定业务压力的情况下,使系统运行一段时间,以此检测系统是否稳定。
总的来说,性能压测是在对系统性能有一定程度了解的前提下,在确定的环境下针对压测需求进行的一种测试。
如何选取 性能压测工具
在选取合适的性能压测工具之前,我们需要先了解执行一次完整的性能压测所需要的步骤:
1. 确定性能压测目标: 性能压测目标可能源于项目计划、业务方需求等
2. 确定性能压测环境: 为了尽可能发挥性能压测作用,性能压测环境应当尽可能同线上环境一致
3. 确定性能压测通过标准:
针对性能压测目标以及选取的性能压测环境,制定性能压测通过标准,对于不同于线上环境的性能压测环境,通过标准也应当适度放宽
4. 设计性能压测: 编排压测链路,构造性能压测数据,尽可能模拟真实的请求链路以及请求负载
5. 执行性能压测: 借助性能压测工具,按照设计执行性能压测
6. 分析性能压测结果报告: 分析解读性能压测结果报告,判定性能压测是否达到预期目标,若不满足,要基于性能压测结果报告分析原因
由上述步骤可知,一次成功的性能压测涉及到多个环节,从场景设计到施压再到分析,缺一不可。工欲善其事,必先利其器,而一款合适的性能工具意味着我们能够在尽可能短的时间内完成一次合理的性能压测,达到事半功倍的效果。
工具选型对比
在论述了性能压测必要性之后,如何选取性能压测工具成为一个重要的议题。本文选取了市场上主流性能压测工具: Apache Bench
(ab)、LoadRunner、JMeter、阿里云PTS,并从多个方面出发分析了各个工具的优缺点,汇总后的优缺点如下表所示:
压测工具
|
Apache Bench(ab)
|
LoadRunner
|
JMeter
|
PTS
---|---|---|---|---
学习成本
|
低
|
高
|
高
|
低
安装部署成本
|
低
|
高
|
高
|
低
是否免费
|
是
|
否
|
是
|
否
是否支持多协议
|
否
|
是
|
是
|
是
压测结果是否能够图形化展示
|
否
|
是
|
是
|
是
是否支持TPS模式
|
否
|
否
|
否
|
是
是否有链路、场景编排管理支持
|
否
|
是
|
是
|
是
是否支持场景录制
|
否
|
是
|
是
|
是
生态环境强弱
|
弱
|
弱
|
弱
|
强
监控指标是否完备
|
否
|
否
|
否
|
是
是否原生支持流量地域定制
|
否
|
否
|
否
|
是
Apache Bench(ab)
Apache Bench(ab)是一款用来针对HTTP协议做性能压测的命令行工具,支持在本地环境发起测试请求,验证服务器的处理性能。它主要具有以下特点:
首先,作为一款开源工具,ab具有较好的扩展性,测试开发人员可以基于自身需求对其进行二次开发,同时它对HTTP协议支持度较好,比如支持设定HTTP请求头、支持COOKIE以及HTTP的多种方法。
来霍格沃兹测试开发学社,学习更多软件测试与测试开发的进阶技术,知识点涵盖web自动化测试 app自动化测试、接口自动化测试、测试框架、性能测试、安全测试、持续集成/持续交付/DevOps,测试左移、测试右移、精准测试、测试平台开发、测试管理等内容,课程技术涵盖bash、pytest、junit、selenium、appium、postman、requests、httprunner、jmeter、jenkins、docker、k8s、elk、sonarqube、jacoco、jvm-sandbox等相关技术,全面提升测试开发工程师的技术实力
QQ交流群:484590337
公众号 TestingStudio
点击获取更多信息