怎样正确做web应用的压力测试?
web应用,通俗来讲就是一个网站,主要依托于浏览器实现其功能。
提到压力测试,我们想到的是服务端压力测试,其实这是片面的,完整的压力测试包含服务端压力测试和前端压力测试。
下文将从以下几部分内容展开:
- web应用压测范围
- 压测流程
- 补充1:前端压力测试
- 补充2:后端压力测试
- 学习资料分享
一、web应用压力测试范围
web应用的最开始是不分前后端的,后来随着网站功能越来越丰富,前后端不分离的架构显得低效和落后,这时候前后端分离的架构应用而生。

在前后端分离的架构模式下,前后端工程师约定好数据交互接口,实现并行开发。所以,一个web应用其实是包含前端和后端两个独立的部分。
另外,Google DoubleClick 研究表明:如果一个网页加载时长每增加 1 秒,用户就会流失 10%,加载时长超过 3 秒,用户就会离开。
因此,对于一个新的web应用来说,除了常见的服务端压力测试,前端的压力测试也是不可或缺的。
一个完整的web应用压力测试流程如下图所示

二、压测流程
1、确定压测范围和压测目标
压测范围:如果是全新的项目,原则上所有的功能和接口基本都要压测。如果是老项目新增的需求,则需要评估影响范围,确定老的功能和接口是否需要压测
压测目标:如果是全新的项目,要根据行业内的基本情况和经验定一个预估目标,如果是老项目,可以根据历史流量峰值作为参考目标。
2、制定压测方案
根据上一步的预期目标,制定压测方案。具体包含:压测环境,压测时间,相关负责人,测试工具或平台,验收标准
压测环境:为了还原真实的压力场景,一般选择预发环境或生产环境进行压测
压测时间:压测一般在功能测试或接口测试完成后介入。
压测工具或平台:前端压测可以使用PageSpeed等平台,后端压测一般会使用 jmeter、loadrunner等工具。(详细内容见补充1,补充2)
验收标准:一般来说要达到压测目标的预估值
3、压测准备
压测机:准备好压测机群,用于发送请求
服务器:由于压测流量会较高,所以需要提前准备服务器集群,用于承接流量或扩容使用
数据准备:准备用于压测的数据,一般来说要和真实数据做区分;准备压测脚本,一般来说,要添加标识,以便于和真实流量区分
4、实施压测
施压:在施压的过程中,从较小流量开始,逐步加压
观察:在逐步加压的过程,需要观察rt、error(报错率)、服务器的cpu、内存使用率等数据,如发现异常要及时停止压测,待排查和解决问题后再进行压测
5、压测观察&瓶颈分析
如何判断应用的承受能力?
在压测过程中观察报错率、响应时间等指标,如出现指标异常,则说明流量达到当前的瓶颈,需要停止压测分析并排查原因。
以下是几种常见异常的分析方法:
- 成功率未达标:查看错误日志,排查错误根本原因,进行性能调优
- 响应时间未达标:对照错误日志、链路追踪结果、服务器性能指标、数据库/中间件监控指标,找到响应时间过长的具体原因
- 吞吐量未达标:如果成功率和响应时间均达标,建议不断增加模拟用户数,重新压测,查看测试结果
什么时候需要增加服务器?
在上一步出现瓶颈调优之后,继续加压,观察各项指标
- 第一种情况:服务器cpu、内存等指标均未达瓶颈(通常以使用率达到70%-80%为瓶颈),qps、rt、报错率等指标出现异常,此时需要重复上一步,排查问题并优化
- 第二种情况:rt、报错率等指标未出现异常,服务器cpu、内存使用率即将达到瓶颈,且未达到预期的压测目标,此时无法通过调优来解决,需要增加服务器

6、验收
达到预期目标:达到预期目标,一般可以认为压测通过
未达到预期目标:如因各方面原因(资源、预算等)未达预期目标,需要产品经理和研发经理对压测结果确认
7、发送压测报告
如何写一份好的压测报告,可以参考这里 如何做一份精致的性能测试报告? - 知乎
8、项目上线
前面的步骤都完成之后,项目可以发布上线。
补充1:前端压测
google 开发者提出了一种 RAIL 模型来衡量应用的前端性能,即 response(响应)、animation(动画)、idle(空闲)与load(加载)。
RAIL 模型的广泛使用关键指标如下:

工具使用:PageSpeed
PageSpeed 是 google 一个开源的自动化工具,安装 PageSpeed 扩展程序运行即可
报告结果如图:
该工具功能丰富,报告也非常详细,并给出了优化建议,根据测试报告做对应的优化即可。
补充2:后端压测
后端即指服务端,后端压测就是服务端压测,也可以称为服务器压力测试。
在压测过程中,一般关注下面几个指标:qps(处理的请求量)、rt(响应时间)、error(报错率)、cup(cpu使用率)、mem(内存占用情况)、load(负载)、traffic(网络速率)。
通过观察qps、rt、error等关键指标,找到服务器的性能瓶颈,如果低于预期,则需要调优。

通过压力测试,提前发现服务器瓶颈,及时优化,避免网站一上线就奔溃。
工具:压测常用的工具有loadrunner和jmeter(文末有学习视频)
Jmeter 是一款使用Java开发的,开源免费的测试工具, 主要用来做性能测试,JMeter 可以用于对服务器、网络或对象模拟巨大的负载,有丰富的图形界面+脚本配置,方便易用。
LoadRunner 是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题。
相关文章:

怎样正确做web应用的压力测试?
web应用,通俗来讲就是一个网站,主要依托于浏览器实现其功能。 提到压力测试,我们想到的是服务端压力测试,其实这是片面的,完整的压力测试包含服务端压力测试和前端压力测试。 下文将从以下几部分内容展开:…...
Hibernate的持久化类
Hibernate是一个开源的ORM(对象关系映射)框架,用于将Java程序中的对象映射到数据库中的关系型数据。在Hibernate中,持久化类是用来映射Java对象和关系型数据库表的类。 编写Hibernate持久化类需要遵循以下规则: 持久…...

【c语言】enum枚举类型的定义格式 | 基本用法
创作不易,本篇文章如果帮助到了你,还请点赞支持一下♡>𖥦<)!! 主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ…...
Python数据挖掘与机器学习
近年来,Python编程语言受到越来越多科研人员的喜爱,在多个编程语言排行榜中持续夺冠。同时,伴随着深度学习的快速发展,人工智能技术在各个领域中的应用越来越广泛。机器学习是人工智能的基础,因此,掌握常用…...
Java有用的书籍2
. 1.《Effective Java》是由Joshua Bloch撰写的一本Java编程规范和最佳实践指南,第三版是最新版。它涵盖了Java编程中一些常见问题和技巧,以及如何编写更加优雅、健壮和高效的Java代码。 该书共分为15章,每一章都涵盖了Java编程中的一个关键…...

CTA进网测试《5G消息 终端测试方法》标准依据:YDT 3958-2021
GB 21288-2022 强制国标要求变化 与GB 21288-2007相比, 新国标主要有以下变化: 1. 增加职业暴露定义: 2. 增加吸收功率密度定义: 3. 增加不同频率、不同人体部位适用的暴露限值: 4. 增加产品说明书的注释:…...

[LeetCode复盘] LCCUP‘23春季赛 20230422
[LeetCode复盘] LCCUP23春季赛 20230422 一、总结二、 1. 补给马车1. 题目描述2. 思路分析3. 代码实现 三、2. 探险营地1. 题目描述2. 思路分析3. 代码实现 四、 3. 最强祝福力场1. 题目描述2. 思路分析3. 代码实现 五、 4. 传送卷轴1. 题目描述2. 思路分析3. 代码实现 六、 5…...
传统燃油车的智控App远控响应速度优化方向几点思考
一、分析当前问题及其影响因素 网络延迟:燃油车的App远控响应速度受到网络延迟的影响。网络延迟可能是由于网络拥堵或服务器响应速度慢等原因导致的。 用户设备:用户设备的性能也会影响燃油车的App远控响应速度。例如,设备的内存不足或存在故…...

回炉重造九---DNS服务器
1、DNS服务器的相关概念和技术 1.1 DNS服务器的类型 主DNS服务器从DNS服务器缓存DNS服务器(forward DNS服务器{转发器}) 1.1.1 主DNS服务器的作用 管理和维护所负责解析的域内解析库的服务器1.1.2 从DNS服务器的作用 从主服务器或从服务器“复制”解…...

UE4/5多人游戏详解(七、自定义委托,实现寻找会话和加入会话的函数,通过Steam进行两台电脑的联机)
目录 可能出现问题(在六部分的测试可能无法连接的问题【在末尾加上了,怕有人没看见在这里写一下】) 自定义委托 调整位置 创建更多的委托和回调函数给菜单: 多播和动态多播 代码: 委托变量 代码: 回…...

【数据库多表操作】sql语句基础及进阶
常用数据库: 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它是长期存储在计算机内、有组织、有结构的数据集合。数据库是信息系统的核心部分,现代软件系统中大量采用了数据库管理系统(DBM…...
DPDK和RDMA的区别
网络的发展好像在各方面都是滞后于计算和存储,时延方面也不例外,网络传输时延高,逐渐成为了数据中心高性能的瓶颈。因为传统两个节点间传输数据的网络路径上有大量的内存拷贝,导致网络传输效率低下,网络数据包的收发处…...

体验 Google Bard
环境 windows 10 64bitGoogle Bardpython 3.8 简介 本篇介绍一个开源的 Google 聊天机器人Bard 的 API 逆向工程,使用它,可以免费的使用 Bard 服务,项目地址:https://github.com/acheong08/Bard 安装及使用 通过 pip 来安装 pip &…...

MITA触摸屏维修WP4053米塔工控机控制屏维修
MITA-TEKNIK米塔触摸屏维修工控机工控屏控制器维修DISPLAY 2COM全系列型号 Mita-Teknik触摸屏维修常见故障:上电无显示,运行报故障,无法与电脑通讯,触摸无反应,触控板破裂,触摸玻璃,上电黑屏&a…...

Nacos简介 安装 配置
简介 什么是注册中心 注册中心在微服务项目中扮演着非常重要的角色,是微服务架构中的纽带,类似于通讯录,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,…...

五、MyBatis各种查询功能
MyBatis的各种查询功能 如果查询出的数据只有一条,可以通过 实体类对象接收List集合接收Map集合接收 如果查询出的数据有多条,一定不能用实体对象接收,会抛TooManyResultsException,可以通过 实体类类型的List集合接收Map类型…...
uni-app——picker组件的用法、时间、日期、地区选择器等
1、uniapp–picker组件 <template><view class"signUp"><view class"signUp_dv1"><u-form :model"form" ref"uForm" label-width"95px"><u-form-item label"日期" :required"tr…...
什么情况需要考虑 mysql 分表
最近看到公司的其中一个数据库用户表每个月都要几百万的新用户数据增加,目前单表已经是两千多万了。所以找了 DBA 讨论,发现以前学的知识,以及网上的一些资料其实说的并不是很正确,比如 mysql 单表不建议超过一千万,我…...
系统架构师02-架构设计 20分
1.架构基本概念 *质量属性效用树:是对系统质量属性进行识别和优先级排序的重要工具 。 包括: 性能:效率指标,处理任务所需时间或单位时间内的处理量。 可用性: 可靠性: 容错:出现错误后人能保…...

【python视图3】networkx图操作示例
一、说明 根据定义,图是节点(顶点)以及已识别的节点对(称为边、链接等)的集合。在 NetworkX 中,节点可以是任何可哈希对象,例如文本字符串、图像、XML 对象、另一个图形、自定义节点对象等。 如…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...

基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...