怎样正确做 Web 应用的压力测试?

devtools/2024/12/26 15:16:59/

Web应用,通俗来讲就是一个网站,主要依托于浏览器来访问其功能。

那怎么正确做网站的压力测试呢?

提到压力测试,我们想到的是服务端压力测试,其实这是片面的,完整的压力测试包含服务端压力测试前端压力测试

一、Web应用(网站)压力测试范围,包含前后端

Web应用(网站)最开始是不分前后端的(所以,那段时间PHP这门专门用于建站的语言非常火),后来随着网站功能越来越丰富,前后端不分离的架构显得低效和落后,这时候前后端分离的架构应用而生(PHP从此衰弱了)。

在前后端分离的架构模式下,前后端工程师约定好数据交互接口,实现并行开发。所以,一个Web应用(网站)其实是包含前端和后端两个独立的部分。

前后端分离

GoogleDoubleClick 研究表明:如果一个网页加载时长每增加 1 秒,用户就会流失 10%,加载时长超过 3 秒,用户就会离开。

因此,对于一个新的Web应用来说,除了常见的服务端压力测试前端压力测试也是不可或缺的。一个完整的web应用压力测试流程如下图所示:

二、前后端压测流程

step1、确定压测范围和压测目标

压测范围:如果是全新的项目,原则上所有的功能和接口基本都要压测。如果是老项目新增需求,则需要评估影响范围,以便确定老的功能和接口是否需要压测。

压测目标:如果是全新的项目,要根据行业内的基本情况和经验定一个预估目标;如果是老项目,可以根据历史流量峰值作为参考目标。

step2、制定压测方案

根据上一步的预期目标,制定压测方案。具体包含:压测环境,压测时间,相关负责人,测试工具或平台,验收标准。

压测环境:为了还原真实的压力场景,一般选择预发环境或生产环境进行压测。

压测时间:压测一般在功能测试接口测试完成后介入。

压测工具或平台:前端压测可以使用PageSpeed等平台,后端压测一般会使用jmeterloadrunner等工具。(详细内容见补充1,补充2)

验收标准:一般来说要达到压测目标的预估值。

3、压测准备

压测机:准备好压测机群(后端用),用于发送请求。

服务器:由于压测流量会较高,所以需要提前准备服务器集群,用于承接流量或扩容使用

数据准备:准备用于压测的数据,一般来说要和真实数据做区分。准备压测脚本,添加标识,以便于和真实流量区分。

4、实施压测

施压:在施压的过程中,从较小流量开始,逐步加压。

观察:在逐步加压的过程,需要观察rt、error(报错率)、服务器的cpu、内存使用率等数据,如发现异常要及时停止压测,待排查和解决问题后再进行压测。

5、压测观察&瓶颈分析

如何判断应用的承受能力?

在压测过程中观察报错率、响应时间等指标,如出现指标异常,则说明流量达到当前的瓶颈,需要停止压测分析并排查原因。

以下是几种常见异常的分析方法:

**·**成功率未达标:查看错误日志,排查错误根本原因,进行性能调优

**·**响应时间未达标:对照错误日志、链路追踪结果、服务器性能指标、数据库/中间件监控指标,找到响应时间过长的具体原因

**·**吞吐量未达标:如果成功率和响应时间均达标,建议不断增加模拟用户数,重新压测,查看测试结果

什么时候需要增加服务器?

在上一步出现瓶颈调优之后,继续加压,观察各项指标:

**·**第一种情况:服务器cpu、内存等指标均未达瓶颈(通常以使用率达到70%-80%为瓶颈),qps、rt、报错率等指标出现异常,此时需要重复上一步,排查问题并优化

**·**第二种情况:rt、报错率等指标未出现异常,服务器cpu、内存使用率即将达到瓶颈,且未达到预期的压测目标,此时无法通过调优来解决,需要增加服务器。

服务器指标监控

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 是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题。


http://www.ppmy.cn/devtools/145557.html

相关文章

音视频入门知识(五):流媒体篇

⭐五、流媒体篇 ES流(基本流) 在视频或音频编码后,最初得到的就是ES流。例如H.264、H.265、AAC、MP3等编码格式 单一性:每个ES流只包含一种类型的数据,如编码后的视频帧或音频帧。 无时间戳:ES流本身不包含…

探秘 DNS 服务器:揭开域名解析的神秘面纱

嘿,小伙伴们!在我们畅游互联网的奇妙世界时,有没有想过,当我们在浏览器中输入那些熟悉的网址,比如b站,是如何瞬间就能访问到对应的网站呢?这背后的魔法就来自于一个超级重要的网络基础设施 ——…

02-18.python入门基础一基础算法

(一)排序算法 简述: 在 Python 中,有多种常用的排序算法,下面为你详细介绍几种常见的排序算法及其原理、实现代码、时间复杂度以及稳定性等特点,并对比它们适用的场景。 冒泡排序(Bubble Sor…

aws(学习笔记第十九课) 使用ECS和Fargate进行容器开发

aws(学习笔记第十九课) 使用ECS和Fargate进行容器开发 学习内容: 使用本地EC2中部署docker应用使用ECS的EC2模式进行容器开发使用ECS的Fargate模式进行容器开发 1. 使用本地EC2中部署docker应用 docker整体 这里展示了docker的整体流程。 开发阶段 编写dockerfile…

【最后203篇系列】003 - 填坑DogPile

也不知道咋回事,怎么坑这么多。 问题现象:一个程序获取拎一个服务的缓存时,数据格式报错。 找了很久,发现是Dogpile的问题:数据还在,但是结构变了。如原来缓存的是{a: 111, b_list:[1,2,3]},再次获取缓存…

excel中如何筛选一列中重复的内容,相同的内容只保留一次

1. 目的 筛选excel中一列中重复出现的值,统计里面的类别有多少,即相同的内容,只保留一次。以下图为例,我想筛选出左边这些人最喜欢的水果都有哪些,即相同的水果只保留一次。 2. 步骤实现 以上面的最喜欢的水果为例&…

Day50 图论part01

图论理论基础 大家可以在看图论理论基础的时候,很多内容 看不懂,例如也不知道 看完之后 还是不知道 邻接矩阵,邻接表怎么用, 别着急。 理论基础大家先对各个概念有个印象就好,后面在刷题的过程中,每个知识…

Hive其五,使用技巧,数据查询,日志以及复杂类型的使用

目录 一、关于Hive使用的一些技巧 二、表的数据查询 三、Hive默认的日志 四、复杂数据类型 1、Array的使用 2、展开函数的使用 explode 3、Map的使用 4、Struct结构体 一、关于Hive使用的一些技巧 1、可以直接不进入hive的情况下执行sql语句 通过shell的参数 -e 可以执…