Web项目测试专题(六)压力测试

  • 概述:

压力测试检验Web应用在高并发、高负载情况下的表现,帮助预估系统承载能力和发现瓶颈

  • 步骤:

并发用户测试:增加虚拟用户数测试系统在多人同时使用时的表现

负载测试:模拟高负载情况测试系统的稳定性和响应时间

峰值测试:测试系统在瞬时高峰负载下的表现,观察系统是否崩溃或性能显著下降

持久性压力测试:长时间持续高负载运行,观察系统性能随时间的变化趋势,有无内存泄漏或性能退化现象

  • 1. 并发用户测试

  • 目标:

确定Web应用能够同时处理的最大用户数量,并观察在高并发情况下的表现。

  • 步骤:

确定测试场景

选择关键业务场景,如用户登录、浏览商品、提交订单等。定义并发用户数量,从低到高逐步增加,观察系统的响应情况。

模拟并发用户

使用压力测试工具模拟大量用户同时访问系统。分阶段增加并发数,例如从50、100、200、500用户逐步增加。

监控性能指标

记录每个阶段的响应时间、成功率、吞吐量和错误率。监控服务器资源利用情况(CPU、内存、磁盘I/O、网络流量等)。

  • 工具:

Apache JMeter:开源性能测试工具,可以模拟高并发用户请求。

LoadRunner:企业级性能测试工具,支持多种协议和复杂场景。

  • 关键点:

确认并发用户数增加时,系统响应时间和错误率是否在可接受范围内。

找到系统处理高并发请求的瓶颈位置。

  • 2. 负载测试

  • 目标:

负载测试的目标是通过模拟不同程度的负载条件,评估系统的性能极限、稳定性与可靠性,识别性能瓶颈,为性能优化和容量规划提供数据支持,以保障系统在各种负载下都能提供良好的用户体验和服务质量。

  • 步骤:

定义负载条件:

根据实际生产环境,设定模拟的负载条件,如持续访问、峰值访问等。确定测试的持续时间(如1小时、4小时、24小时)

创建负载脚本:

使用压力测试工具编写负载测试脚本,模拟实际用户行为。设置合理的请求频率和并发用户数

执行负载测试:

运行负载测试脚本,模拟高负载条件下系统的工作情况。实时监控系统性能指标和服务器资源利用情况

  • 工具:

BlazeMeter:基于JMeter的云端负载测试平台,适合大规模负载测试

Gatling:高性能负载测试框架,支持DSL编写负载脚本

  • 关键点:

确认系统在长期高负载条件下没有出现性能下降或资源耗尽的情况

观察负载测试期间是否有异常错误或崩溃

  • 3. 峰值测试

  • 目标:

评估Web应用在瞬时高峰访问量下的表现,观察系统是否能稳定处理突发流量。

  • 步骤:

定义峰值条件

设定短时间内的高峰流量,如模拟抢购、秒杀活动等场景。确定高峰流量的模拟时间段(如几分钟至10分钟)。

创建峰值脚本

使用压力测试工具编写峰值测试脚本,快速增加并发用户数量。设置高频率请求,使并发用户数在短时间内骤增。

执行峰值测试

运行峰值测试脚本,观察系统在瞬时高流量情况下的响应和性能。监控系统的负载变化和资源利用情况。

  • 工具:

k6:现代开源负载测试工具,支持编写复杂测试场景。

Locust:分布式用户负载测试工具,使用Python编写测试脚本。

  • 关键点:

验证系统在高峰流量下是否保持稳定,响应时间和错误率是否在可接受范围内。

确认系统对突发流量是否有良好的弹性处理能力。

  • 4. 持久性压力测试

  • 目标:

评估Web应用在长时间持续高负载下的性能表现,发现潜在的问题和稳定性瓶颈。

  • 步骤:

定义持久性压力条件

设定长期持续高负载的测试场景,模拟实际生产环境中的持续访问情况。确定测试持续的时间段(如一周、一个月)。

创建持久性压力脚本

使用压力测试工具编写压力测试脚本,模拟长时间高负载的用户行为。确保测试脚本能灵活应对不同负载情况。

执行持久性压力测试

连续运行持久性压力测试脚本,观察系统在长时间高负载下的表现。定期记录和分析性能数据、系统日志、错误日志等。

  • 工具:

Grafana + Prometheus:用于监控和记录长时间测试的系统性能指标。

Elastic Stack (ELK):用于收集和分析日志数据,发现潜在问题。

  • 关键点:

观察系统是否存在性能退化现象,如资源使用逐渐增加、响应时间变长。

确认在长时间高负载下系统能保持稳定,无内存泄漏等问题。

5.负载测试和峰值测试、持久性压力测试的关系

联系

  • 目的具有一致性:三者的主要目的都是评估系统在不同负载条件下的性能表现,以发现系统可能存在的性能问题,如响应时间过长、吞吐量不足、资源利用不合理、系统不稳定等,进而为系统的优化和改进提供依据,确保系统能够满足实际业务需求。
  • 相互补充验证:负载测试可以为峰值测试和持久性压力测试提供基础数据和参考。例如,通过负载测试确定系统的正常负载范围和性能基准后峰值测试可以在此基础上进一步探索系统在极限峰值负载下的表现持久性压力测试则可以验证系统在长期处于一定负载水平(可能是正常负载、也可能是接近峰值的负载)时的稳定性和可靠性三者相互配合,能更全面地了解系统性能。
  • 部分测试方法重叠:在实施过程中,它们都需要通过工具模拟不同的用户行为和负载场景来对系统进行施压。比如都可能会使用到 JMeter、LoadRunner 等性能测试工具,通过设置不同的参数和场景来模拟各种负载情况,对系统的响应时间、吞吐量、资源利用率等性能指标进行监测和分析。

区别

  • 测试重点不同
    • 负载测试:重点在于通过逐步增加负载,考察系统在不同负载级别下的性能变化情况,确定系统的性能拐点、最大承载能力以及性能瓶颈所在。
    • 峰值测试:主要关注系统在短时间内承受峰值负载时的运行情况,检验系统能否在瞬间高并发或大数据量等极端条件下正常工作,是否会出现崩溃、数据丢失等严重问题。
    • 持久性压力测试:侧重于验证系统在较长时间内持续处于一定负载压力下的稳定性和可靠性,观察系统是否会出现内存泄漏、性能逐渐下降、资源耗尽等问题。
  • 测试时间和负载模式不同
    • 负载测试:测试时间可长可短,负载通常是逐步递增的,以观察系统在不同负载阶段的性能表现。
    • 峰值测试:测试时间一般较短,通常是在短时间内让系统承受极高的负载,模拟系统可能遇到的最极端的使用情况。
    • 持久性压力测试:测试时间较长,一般会持续数小时、数天甚至更长时间,负载相对稳定,保持在一个较高的水平或者根据业务场景有一定的规律波动。

  • 工具推荐

  • 自动化测试工具:

Apache JMeter:支持模拟并发用户、负载测试、大规模测试

LoadRunner:企业级工具,适合复杂的性能测试场景

k6:轻量级高效工具,适合开发过程中的性能测试

  • 性能监控工具:

New Relic:实时监控应用性能,识别性能瓶颈

Grafana + Prometheus:开源监控解决方案,支持可视化性能数据

Elastic Stack (ELK):集日志收集、存储、分析于一体,适合长期压力测试的数据分析

  • 关键指标

在进行压力测试时,重点关注以下关键性能指标:

响应时间(Response Time):从请求发出到收到响应的时间。包括平均响应时间、百分位响应时间(90th,95th,99th)等

吞吐量(Throughput):单位时间内系统处理的请求数量,如每秒事务数(TPS)

错误率(Error Rate):请求失败的比例,反映系统在高负载下的稳定性

资源利用率(Resource Utilization):服务器资源的使用情况,包括CPU使用率、内存使用率、磁盘I/O、网络带宽等

会话数据(Session Data):包括并发用户数、活跃会话数等,观察系统对并发会话的处理能力

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/968555.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【全球人口数据集】全球人口密度数据集GPWv4

目录 数据概述数据处理方法数据下载参考GPWv4: Population Density, Revision 11 是由 NASA Socioeconomic Data and Applications Center (SEDAC) 提供的全球人口密度数据集,旨在支持社会经济和环境研究。 数据概述 Gridded Population of the World, Version 4 (GPWv4): Po…

PyTorch 中 `torch.cuda.amp` 相关警告的解决方法

在最近的写代码过程中,遇到了两个与 PyTorch 的混合精度训练相关的警告信息。这里随手记录一下。 警告内容 警告 1: torch.cuda.amp.autocast FutureWarning: torch.cuda.amp.autocast(args...) is deprecated. Please use torch.amp.autocast(cuda, args...) i…

NLP面试之-激活函数

一、动机篇 1.1 为什么要有激活函数? 数据角度:由于数据是线性不可分的,如果采用线性化,那么需要复杂的线性组合去逼近问题,因此需要非线性变换对数据分布进行重新映射;线性模型的表达力问题:由于线性模型…

四、自然语言处理_08Transformer翻译任务案例

0、前言 在Seq2Seq模型的学习过程中,做过一个文本翻译任务案例,多轮训练后,效果还算能看 Transformer作为NLP领域的扛把子,对于此类任务的处理会更为强大,下面将以基于Transformer模型来重新处理此任务,看…

关于conda换镜像源,pip换源

目录 1. 查看当前下载源2. 添加镜像源2.1清华大学开源软件镜像站2.2上海交通大学开源镜像站2.3中国科学技术大学 3.删除镜像源4.删除所有镜像源,恢复默认5.什么是conda-forge6.pip换源 1. 查看当前下载源 conda config --show channels 如果发现多个 可以只保留1个…

因果机器学习(CausalML)前沿创新思路

结合了传统因果推断与机器学习的因果机器学习是目前AI领域的前沿研究方向,其核心优势在于将因果逻辑融入数据驱动模型,从根本上解决了传统方法的缺陷。因此,它也是突破传统机器学习瓶颈的关键方向,不仅当下热度高,在未…

网络防御高级02-综合实验

web页面: [FW]interface GigabitEthernet 0/0/0 [FW-GigabitEthernet0/0/0]service-manage all permit 需求一,接口配置: SW2: [Huawei]sysname SW2 1.创建vlan [sw2]vlan 10 [sw2]vlan 20 2.接口配置 [sw2]interface GigabitEther…

【devops】 Git仓库如何fork一个私有仓库到自己的私有仓库 | git fork 私有仓库

一、场景说明 场景: 比如我们Codeup的私有仓库下载代码 放入我们的Github私有仓库 且保持2个仓库是可以实现fork的状态,即:Github会可以更新到Codeup的最新代码 二、解决方案 1、先从Codeup下载私有仓库代码 下载代码使用 git clone 命令…

一竞技瓦拉几亚S4预选:YB 2-0击败GG

在2月11号进行的PGL瓦拉几亚S4西欧区预选赛上,留在欧洲训练的YB战队以2-0击败GG战队晋级下一轮。双方对阵第二局:对线期YB就打出了优势,中期依靠卡尔带队进攻不断扩大经济优势,最终轻松碾压拿下比赛胜利,以下是对决战报。 YB战队在天辉。阵容是潮汐、卡尔、沙王、隐刺、发条。G…

ATF系统安全从入门到精通

CSDN学院课程连接:https://edu.csdn.net/course/detail/39573

Linux内核实时机制x - 中断响应测试 Cyclictest分析1

Linux内核实时机制x - 中断响应测试Cyclitest 1 实时性测试工具 rt-test 1.1 源码下载 1.下载源码: ~/0-code/5.15$ git clone git://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git 正克隆到 rt-tests... remote: Enumerating objects: 5534, done. remot…

实现限制同一个账号最多只能在3个客户端(有电脑、手机等)登录(附关键源码)

如上图,我的百度网盘已登录设备列表,有一个手机,2个windows客户端。手机设备有型号、最后登录时间、IP等。windows客户端信息有最后登录时间、操作系统类型、IP地址等。这些具体是如何实现的?下面分别给出android APP中采集手机信…

如何获取,CPU,GPU,硬盘,网卡,内存等硬件性能监控与各项温度传感器

首先需要下载 OpenHardwareMonitorServer 这是一个基于OpenHardwareMonitor 的 Web 服务器。可以让任何语言都可以获取硬件信息和值,OpenHardwareMonitorServer 是没有UI界面的因此它可以当成控制台程序使用。 该程序可用参数如下 参数:需要管理员权限…

解锁大语言模型潜能:KITE 提示词框架全解析

大语言模型的应用日益广泛。然而,如何确保这些模型生成的内容在AI原生应用中符合预期,仍是一个需要不断探索的问题。以下内容来自于《AI 原生应用开发:提示工程原理与实战》一书(京东图书:https://item.jd.com/1013604…

C++STL容器之map的使用及复现

map 1. 关联式容器 vector、list、deque、forward_list(C11) 等STL容器,其底层为线性序列的数据结构,里面存储的是元素本身,这样的容器被统称为序列式容器。而 map、set 是一种关联式容器,关联式容器也是用来存储数据的&#xf…

网络工程师 (30)以太网技术

一、起源与发展 以太网技术起源于20世纪70年代,最初由Xerox公司的帕洛阿尔托研究中心(PARC)开发。最初的以太网采用同轴电缆作为传输介质,数据传输速率为2.94Mbps(后发展为10Mbps),主要用于解决…

30天开发操作系统 第 20 天 -- API

前言 大家早上好,今天我们继续努力哦。 昨天我们已经实现了应用程序的运行, 今天我们来实现由应用程序对操作系统功能的调用(即API, 也叫系统调用)。 为什么这样的功能称为“系统调用”(system call)呢?因为它是由应用程序来调用(操作)系统中的功能来完…

Java面试题及答案整理( 2023年 6 月最新版,持续更新)

秋招金九银十快到了,发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全~ 这套互联网 Java 工程师面试题包括了:MyBatis、ZK、Dubbo、EL、Redis、MySQL、并发编程、Java面试、Spring、微服务、Linux、Spri…

查询语句来提取 detail 字段中包含 xxx 的 URL 里的 commodity/ 后面的数字串

您可以使用以下 SQL 查询语句来提取 detail 字段中包含 oss.kxlist.com 的 URL 里的 commodity/ 后面的数字串&#xff1a; <p><img style"max-width:100%;" src"https://oss.kxlist.com//8a989a0c55e4a7900155e7fd7971000b/commodity/20170925/20170…

管式超滤膜分离技术都可以应用到哪些行业?

管式超滤膜分离技术由于其高效、稳定和适应性强的特点&#xff0c;在多个行业都有广泛的应用&#xff1a; 1. 生物制药与医药行业 纯化与浓缩&#xff1a;在生物药品的下游处理阶段&#xff0c;管式超滤膜被用来纯化抗体、疫苗、蛋白质等生物大分子&#xff0c;通过精确筛选分子…