web应用,通俗来讲就是一个网站,主要依托于浏览器实现其功能。
提到压力测试,我们想到的是服务端压力测试,其实这是片面的,完整的压力测试包含服务端压力测试和前端压力测试。
下文将从以下几部分内容展开:
web应用的最开始是不分前后端的,后来随着网站功能越来越丰富,前后端不分离的架构显得低效和落后,这时候前后端分离的架构应用而生。
在前后端分离的架构模式下,前后端工程师约定好数据交互接口,实现并行开发。所以,一个web应用其实是包含前端和后端两个独立的部分。
另外,Google DoubleClick 研究表明:如果一个网页加载时长每增加 1 秒,用户就会流失 10%,加载时长超过 3 秒,用户就会离开。
因此,对于一个新的web应用来说,除了常见的服务端压力测试,前端的压力测试也是不可或缺的。
一个完整的web应用压力测试流程如下图所示
1、确定压测范围和压测目标
压测范围:如果是全新的项目,原则上所有的功能和接口基本都要压测。如果是老项目新增的需求,则需要评估影响范围,确定老的功能和接口是否需要压测
压测目标:如果是全新的项目,要根据行业内的基本情况和经验定一个预估目标,如果是老项目,可以根据历史流量峰值作为参考目标。
2、制定压测方案
根据上一步的预期目标,制定压测方案。具体包含:压测环境,压测时间,相关负责人,测试工具或平台,验收标准
压测环境:为了还原真实的压力场景,一般选择预发环境或生产环境进行压测
压测时间:压测一般在功能测试或接口测试完成后介入。
压测工具或平台:前端压测可以使用PageSpeed等平台,后端压测一般会使用 jmeter、loadrunner等工具。(详细内容见补充1,补充2)
验收标准:一般来说要达到压测目标的预估值
3、压测准备
压测机:准备好压测机群,用于发送请求
服务器:由于压测流量会较高,所以需要提前准备服务器集群,用于承接流量或扩容使用
数据准备:准备用于压测的数据,一般来说要和真实数据做区分;准备压测脚本,一般来说,要添加标识,以便于和真实流量区分
4、实施压测
施压:在施压的过程中,从较小流量开始,逐步加压
观察:在逐步加压的过程,需要观察rt、error(报错率)、服务器的cpu、内存使用率等数据,如发现异常要及时停止压测,待排查和解决问题后再进行压测
5、压测观察&瓶颈分析
如何判断应用的承受能力?
在压测过程中观察报错率、响应时间等指标,如出现指标异常,则说明流量达到当前的瓶颈,需要停止压测分析并排查原因。
以下是几种常见异常的分析方法:
什么时候需要增加服务器?
在上一步出现瓶颈调优之后,继续加压,观察各项指标
6、验收
达到预期目标:达到预期目标,一般可以认为压测通过
未达到预期目标:如因各方面原因(资源、预算等)未达预期目标,需要产品经理和研发经理对压测结果确认
7、发送压测报告
如何写一份好的压测报告,可以参考这里 如何做一份精致的性能测试报告? - 知乎
8、项目上线
前面的步骤都完成之后,项目可以发布上线。
google 开发者提出了一种 RAIL 模型来衡量应用的前端性能,即 response(响应)、animation(动画)、idle(空闲)与load(加载)。
RAIL 模型的广泛使用关键指标如下:
工具使用:PageSpeed
PageSpeed 是 google 一个开源的自动化工具,安装 PageSpeed 扩展程序运行即可
报告结果如图:
该工具功能丰富,报告也非常详细,并给出了优化建议,根据测试报告做对应的优化即可。
后端即指服务端,后端压测就是服务端压测,也可以称为服务器压力测试。
在压测过程中,一般关注下面几个指标:qps(处理的请求量)、rt(响应时间)、error(报错率)、cup(cpu使用率)、mem(内存占用情况)、load(负载)、traffic(网络速率)。
通过观察qps、rt、error等关键指标,找到服务器的性能瓶颈,如果低于预期,则需要调优。
通过压力测试,提前发现服务器瓶颈,及时优化,避免网站一上线就奔溃。
工具:压测常用的工具有loadrunner和jmeter(文末有学习视频)
Jmeter 是一款使用Java开发的,开源免费的测试工具, 主要用来做性能测试,JMeter 可以用于对服务器、网络或对象模拟巨大的负载,有丰富的图形界面+脚本配置,方便易用。
LoadRunner 是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题。