JMeter性能测试

性能测试前言

老师开局一句话:性能测试和你会不会JMeter一点关系没有……

作者坚持技多不压身的原则,还是多学一点JMeter吧,看老师到底要怎么讲下去,什么并发量、吞吐量啥的……

性能测试的核心思想:在于创造大量并发去访问接口,检查当前接口在极端情况下会出现的问题。

比如访问的人数越多,内存会不会小?CPU会不会高?网络带宽会不会大?这三种指标只要有一项过高,就很有可能会牵连其他两项升高,最终导致服务器停滞。

JMeter创造并发的手段很多很全面(所以性能测试还是可以用到JMeter的,可能老师觉得思想和知识积累才是性能测试最重要的东西吧,要知道核心特征的值对应着什么样的性能……),有丰富的插件,可以对各种场景进行模拟。

怎样学习性能测试:

1.首先明确吞吐量QPS/TPS系统在单位时间内处理的请求/事务数量、并发量、响应时间等核心性能指标;

2.再在实际项目中进行监控/报警,保证服务器维持一个较为稳定的状态,或者能够及时重启服务器把损失降到最低;

3.然后,涉及到软件工程所讲的性能需求分析,怎么压怎么测试要写一个性能测试报告,这是最为重要的一点;

4.最后专家能力:能够及时分析性能瓶颈,跟开发人员提出优化建议。


性能核心概念

下面是一些基本概念的解释和如何利用这些概念来判断性能,图片来自于黑马课程【3天带你搞定Jmeter性能测试!2023新版!全面详细,快速上手!-黑马程序员武汉中心】 https://www.bilibili.com/video/BV12W4y197qU/?p=6&share_source=copy_web&vd_source=3026e1149e1e36cc45042854c30dd20c

1. 吞吐量 (QPS/TPS)

  • 定义: QPS(Queries Per Second) 是每秒查询率,TPS(Transactions Per Second) 是每秒事务数。它们衡量了系统每秒钟能够处理的请求数或事务数。QPS适用于没有写入操作的场景,TPS适用于写入操作的场景。
  • 应用: 通过分析系统的QPS/TPS,可以评估系统能够处理的并发负载量。如果QPS/TPS太低,可能表示系统无法高效处理请求。
  • 如何优化:优化代码和数据库查询、提升服务器硬件性能、使用负载均衡(作者在Redis中有介绍过)和分布式系统架构

这里的RPS和TPS是一样的。完成一个支付操作就相当于一个事务,而一个事务可以包含多个查询操作。

2. 并发量

  • 定义: 并发量指的是系统能够同时处理的用户数量或请求数量
  • 应用: 测量并监控并发量可以帮助确定系统是否能够在高负载下稳定运行。
  • 注意,如果涉及到庞大数据并发,则建议分布式测试并发量。在JMeter中,只要用户数达到上万,个人PC肯定死机,服务器也不可能搞得太多,所以要分担这样的测试。比如10w并发,可以分成20台机器,每台进行5k并发。

3. 响应时间

  • 定义: 响应时间是系统从接收到请求到生成响应所花费的时间。是用户能够直接感受到的,其他的吞吐量啊并发量啊用户都无法直观感受。
  • 应用: 如果响应时间太长,用户可能会对网站或应用感到不满。

响应时间一共分为两种,一种是服务器处理数据(HTTP请求、数据库数据、请求返回值)的处理时间,一种是请求或响应的网络传输时间。

1. 分段指标(Percentile Metrics)

在性能测试中,我们通常不仅关注平均响应时间,还要关注分段指标。分段指标可以帮助我们更全面地了解系统的性能表现。

  • 定义:
    • 分段指标(例如90th percentile, 95th percentile, 99th percentile)表示在所有请求中,有X%的请求的响应时间低于或等于这个指标。例如,如果99th percentile的响应时间是2秒,这意味着99%的请求的响应时间都在2秒以下。
  • 为什么重要:
    • 分段指标可以帮助我们发现系统中的性能瓶颈。
    • 平均响应时间可能隐藏了一些重要的信息,例如少量的非常慢的请求,而分段指标可以帮助揭示这些信息。

2. 九五线(95th Percentile)

九五线或者95th percentile是一种特定的分段指标。

  • 定义:

    • 95th percentile表示在所有请求中,95%的请求的响应时间都低于或等于这个值。它是性能测试报告中的一个关键指标,用来评估系统的性能。
  • 为什么重要:

    • 它帮助我们理解系统在大多数情况下的表现。
    • 如果95th percentile的响应时间是可接受的,这意味着大多数用户将会体验到良好的性能。

4.错误率

  • 注意错误率一定是在负载情况下业务失败的概率,并发数一定要超过一定的数量。

  • 问题诊断: 一个突然增加的错误率可能指示了系统中的一个问题,例如数据库连接丢失、服务瓶颈或其他问题。

  • SLA遵守:对于许多系统,特别是商业系统,可能会有一个服务级别协议(SLA),它规定了最大的可接受错误率。

  • 用户体验:高错误率直接影响用户的体验和满意度。

5.资源使用率

  • 性能瓶颈识别:通过观察哪个资源的使用率达到或接近100%,可以帮助识别系统中的性能瓶颈

  • 成本效益:通过了解资源使用率,组织可以决定是否需要购买更多的硬件资源或者是否可以节省资源。

  • 预测:通过监控资源使用率的趋势,可以预测将来何时可能会出现资源短缺,从而及时进行规划和调整。

  • SLA遵守:与错误率相似,对于某些系统,可能会有SLA规定资源使用率的上限,超出这个上限可能会导致合同违约。

提取性能指标

提取性能指标是为了明确地定义什么是"好的"或"可接受的"性能。明确性能指标可以帮助团队集中精力,提高系统性能,并提供更好的用户体验。以下是三种常用的方法,用于确定这些指标:

1. 直接给出需求

这种方法通常基于业务需求或合同中的服务级别协议(SLA)。

详细介绍:
  • 基于业务:某些业务领域可能对响应时间、可用性或其他性能指标有明确的预期。例如,金融交易平台可能需要在特定的毫秒内完成交易。

  • 合同或SLA:与外部客户的合同中可能会明确写出性能指标,违反这些指标可能会导致经济损失或法律责任。

  • 管理期望:有时,高级管理层可能会基于他们的经验和期望设定性能指标。

2. 历史运营数据分析(重点)

分析过去的性能数据可以为将来提供有价值的见解。

详细介绍:
  • 性能基线:通过对系统在正常运营条件下的性能数据进行分析,可以建立一个性能基线

  • 趋势分析:通过长时间的监控和数据收集,可以识别性能的趋势。例如,如果每个月的响应时间都在增加,那么可能需要采取行动。

  • 异常识别:历史数据可以帮助识别和理解异常性能事件,比如为什么在某一天系统的响应时间突然增加。


日常性能指标计算

登录、搜索、点击商品、放到购物车,都是用户频繁使用的业务功能。下订单就是峰值交易中常见的业务。

PV可以认为是请求量,也就是实际业务量。我们可以根据实际业务量(以4.13万为例),应用二八原则计算性能指标:

因为业务不是时时刻刻都有那么多人的,只是集中在某些时间段产生。所以,也可以利用有效工作时长下的订单总数计算指标:

都是同一个运营数据,一个按天进行计算,一个按小时进行计算,方法都是正确的,当然选后者更为精确。因为前者默认将所有时间包括空闲时间都作为请求分担者,可能会导致白天(请求多的时候)性能不够的情况。


峰值性能指标计算

系数:用于预估将来的峰值变化,系数为n表示预测将来请求数量会达到当前请求的n倍。计算得到吞吐量后,根据经验或实际感受给定响应时间的合理范围。


示例:电商项目性能需求

1.vu可以理解为:这个系统一天需要处理的登录请求。专业术语,可以用于个人网站的性能需求展示。

2.与上个版本保持一致:获取上个版本的已知性能作为基准,让当前项目通过这个基准,这就是下文所讲的基准测试

3.活动当天访问量对应负载测试,整点抢购对应负载测试或压力测试,稳定运行对应稳定性测试。这些测试在下文中都有介绍。

读者可能会想:整点抢购是否应该使用并发测试?

其实,“整点抢购”确实与并发用户有关,这种情况下的测试常被称为并发测试但实际上,它更类似于一个特定的负载测试或压力测试场景,这取决于测试的负载是否超出了正常预期。模拟的用户数量、频率和行为模式将决定这是负载测试还是压力测试。

  1. 负载测试:通常会设定一个预期的负载,例如期望的正常用户访问量。在这个负载下,希望系统能够正常、稳定地运行。所以,在负载测试中,目的是确保系统在预期负载下工作正常。

  2. 压力测试目标是找出系统的瓶颈和上限。因此,我们会逐渐增加负载,超出正常的预期,直到系统出现问题或崩溃。在这个测试中,我们想知道系统能够承受多少负载,并且在达到极限时,系统的反应是怎样的。

所以,区分负载测试和压力测试主要是看测试目标和选择模拟的负载。如果已经知道系统预期要承受的负载,那么就进行负载测试。如果想要知道系统的极限和瓶颈在哪里,那就进行压力测试。

但在实际操作中,这两种测试可能会有所重叠。例如,可能首先进行负载测试,然后继续增加负载进行压力测试。因此,有时候确实需要根据测试的结果和系统的反应来进一步分析和定义测试的类别

3. 竞品分析

通过评估竞争对手或类似产品的性能,可以获得对行业标准或用户期望的见解。

详细介绍:
  • 性能比较:可以使用工具或第三方服务测试和比较竞争对手的网站或应用的性能。这可以提供一个基准,告诉我们在哪里我们可能落后,或者哪里我们有优势。

  • 用户期望:如果大多数竞品的加载时间都在2秒以下,而我们的产品需要5秒,那么用户可能会对我们的产品感到失望。

  • 特性与性能的权衡:竞品分析也可以揭示特性与性能之间的权衡。例如,一个竞品可能加载得非常快,但它提供的功能比较少。

性能测试计划

给个例子: 

用户管理系统测试计划

  1. 目标

    • 确保用户管理系统的所有功能都按照需求正常工作。
    • 识别并修复所有关键和主要缺陷。
    • 确保系统在预期的用户负载下稳定运行。
  2. 测试范围

    • 登录功能:用户登录、密码重置、记住密码、登出等。
    • 用户管理:创建用户、删除用户、编辑用户、搜索用户、分配角色等。
  3. 测试策略

    • 单元测试:每个功能模块的单元测试。
    • 集成测试:确保各个模块之间的交互没有问题。
    • 系统测试:完整的系统功能测试。
    • 性能测试:模拟多用户同时访问,检查系统的响应时间和稳定性。
  4. 测试环境

    • 测试服务器、数据库和相关配置。
    • 测试数据准备。
  5. 进度和分工

    • 第一阶段:需求分析和测试用例设计

      • 提交成果:需求分析报告、测试用例文档。
    • 第二阶段:单元测试和集成测试

      • 提交成果:单元测试脚本、集成测试脚本、测试日志、缺陷报告。
    • 第三阶段:系统测试

      • 提交成果:系统测试脚本、测试日志、缺陷报告、测试覆盖率报告。
    • 第四阶段:性能测试

      • 提交成果:性能测试脚本、性能测试报告、系统瓶颈分析报告。
    • 第五阶段:回归测试

      • 提交成果:回归测试脚本、测试日志、最终缺陷报告。
  6. 风险评估

    • 可能的技术挑战、人力或时间限制等。
  7. 资源

    • 需要的硬件、软件、人力资源列表。
  8. 总结与审计

    • 在测试结束后进行的回顾会议,总结本次测试的经验教训。

个人开发网站的指标要求

作者将来需要开发一个小的不能再小的网站。根据这个场景,下面是一些合理的性能期望:

  • 吞吐量(QPS): 一个小型的网站,QPS可以是10-100之间
  • 并发量: 并发用户可能在10-100之间
  • 响应时间: 响应时间应该少于2秒

如果网站QPS超过100,这是很好的,但也要确保服务器和数据库等可以处理这种负载。如果响应时间超过2秒,用户可能会觉得网站速度慢,应该考虑优化网站,比如通过减少图片大小、使用缓存等方法。如果QPS低于10,可能表示网站性能存在问题。如果并发量无法达到10或响应时间超过3秒,也表示网站可能需要优化和改进。


负载测试

  • 定义: 负载测试是指通过模拟多个用户同时访问应用来评估应用的性能。
  • 应用: 通过负载测试,可以找到系统在高负载下的性能瓶颈和问题。

压力测试

  • 定义: 压力测试是将系统压力推至极限,以确保系统在极端条件下的稳定性和可靠性。
  • 应用: 通过压力测试,可以了解系统的极限性能和确定系统的稳定性。

总结

每个系统和应用都有自己的性能需求和标准。重要的是定期进行性能测试,监控系统性能指标,并根据测试结果和监控数据进行优化和调整,以确保系统能够满足用户和业务的需求。


JMeter停更,作者实在是学不动了,性能测试太庞大了,等作者准备面试或者丰富简历的时候再深入学习吧。

抱歉各位,作者先用apipost去完成作业了……这些是一通百通的,所以,所有的学习都是有用的!

停更个屁,是男人就继续学下去!

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

[NSSRound#1 Basic]sql_by_sql - 二次注入+布尔盲注||sqlmap

进入注册界面后   假设sql:update user set password ‘’ where username ‘’ and password ‘’     此时如果我们注册的用户名是admin’–、admin’#、admin’–的话   update user set password ‘123’ where username ‘admin’#’ and passwor…

Hive SQL初级练习(30题)

前言 Hive 的重要性不必多说,离线批处理的王者,Hive 用来做数据分析,SQL 基础必须十分牢固。 环境准备 建表语句 这里建4张表,下面的练习题都用这些数据。 -- 创建学生表 create table if not exists student_info(stu_id st…

第七章 查找 八、B树

目录 一、定义 二、B树的核心特性 1、B树各个结点的子树数和关键字数 2、子树高度 3、关键字的值 4、B树高度 三、B树的插入 四、B树的删除 一、定义 B树,又称多路平衡查找树,B树中所有结点的孩子个数的最大值称为B树的阶,通常用m表示…

Gorsonpy的计算器

Gorsonpy的计算器 0.页面及功能展示1. PSP表格2.解题思路描述3.设计实现过程4.程序性能改进5.异常处理6.单元测试展示7.心路历程和收获 这个作业属于哪个课程https://bbs.csdn.net/forums/ssynkqtd-05这个作业要求在哪里https://bbs.csdn.net/topics/617294583这个作业的目标完…

基于JavaWeb技术的在线考试系统设计与实现

目录 前言 一、技术栈 二、系统功能介绍 用户信息管理 考试统计管理 专业列表管理 忘记密码人员登记管理 修改密码 试卷信息 考试信息管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用,管理…

卷积神经网络-卷积层

卷积神经网络 卷积神经网络(convolutional neural network,CNN)是一类包含卷积计算且具有深度结构的前馈神经网络,是深度学习的代表算法之一。卷积神经网络具有表征学习能力,能够按其阶层结构对输入信息进行平移不变分…

Folium笔记:HeatMap

在地图上生成热力图 0 举例 import folium from folium.plugins import HeatMap# 创建一个地图对象 m folium.Map(location(1.34084, 103.83637), zoom_start13)# 创建一个坐标点的数据集 data [(1.431656, 103.827896),(1.424789, 103.789902),(1.325781, 103.860446),(1.…

Java编程技巧:swagger2、knif4j集成SpringBoot或者SpringCloud项目

目录 1、springbootswagger2knif4j2、springbootswagger3knif4j3、springcloudswagger2knif4j 1、springbootswagger2knif4j 2、springbootswagger3knif4j 3、springcloudswagger2knif4j 注意点: Api注解:Controller类上的Api注解需要添加tags属性&a…

NEFU数字图像处理(1)绪论

一、简介 1.1什么是数字图像 图像是三维场景在二维平面上的影像。根据其存储方式和表现形式,可以将图像分为模拟图像和数字图像两大类 图像处理方法:光学方法、电子学方法 模拟图像:连续的图像数字图像:通过对时间上和数值上连续…

Hive【Hive(六)窗口函数】

窗口函数(window functions) 概述 定义 窗口函数能够为每行数据划分 一个窗口,然后对窗口范围内的数据进行计算,最后将计算结果返回给该行数据。 语法 窗口函数的语法主要包括 窗口 和 函数 两个部分。其中窗口用于定义计算范围…

Seata 源码篇之AT模式启动流程 - 下 - 04

Seata 源码篇之AT模式启动流程 - 下 - 04 全局事务提交分支事务全局提交全局事务回滚分支事务全局回滚小结 本系列文章: Seata 源码篇之核心思想 - 01Seata 源码篇之AT模式启动流程 - 上 - 02Seata 源码篇之AT模式启动流程 - 中 - 03 上一篇文章,我们看了Seata AT…

maven 初学

1. maven 安装 配置安装 路径 maven 下载位置: D:\software\apache-maven-3.8.6 默认仓库位置: C:\Users\star-dream\.m2\repository 【已更改】 本地仓库设置为&#xff1a;D:\software\apache-maven-3.8.6\.m2\repository 镜像已更改为阿里云中央镜像仓库 <mirrors>…

数据结构与算法(一):概述与复杂度分析

参考引用 Hello 算法 Github 仓库&#xff1a;hello-algo 1. 初识算法 1.1 算法无处不在 1.1.1 二分查找&#xff1a;查阅字典 在字典里&#xff0c;每个汉字都对应一个拼音&#xff0c;而字典是按照拼音字母顺序排列的。假设我们需要查找一个拼音首字母为 r 的字&#xff0…

常见的软件脱壳思路

单步跟踪法 1.本方法采用OD载入。 2.跟踪F8&#xff0c;实现向下的跳。 3.遇到程序回跳按F4。 4.绿色线条表示跳转没实现&#xff0c;不用理会&#xff0c;红色线条表示跳转已经实现&#xff01; 5.刚载入程序有一个CALL的&#xff0c;我们就F7跟进去&#xff0c;不然程序很容…

AUTOSAR通信篇 - CAN网络通信(六:CanNm)

文章目录 功能介绍协调算法工作模式网络模式Repeat Message State&#xff08;重复消息状态&#xff09;Normal Operation State&#xff08;正常运行/工作状态&#xff09;Ready Sleep State&#xff08;就绪睡眠状态&#xff09; Prepare Bus Sleep Mode&#xff08;预休眠模…

新款UI动态壁纸头像潮图小程序源码

新款UI动态壁纸头像潮图小程序源码&#xff0c;不需要域名服务器&#xff0c;直接添加合法域名&#xff0c;上传发布就能使用。 可以对接开通流量主&#xff0c;个人也能运营&#xff0c;不需要服务器源码完整。整合头像&#xff0c;动态壁纸&#xff0c;文案功能齐全。 源码…

H5移动端购物商城系统源码 小型商城全新简洁风格全新UI 支持易支付接口

一款比较简单的 H5 移动端购物商城系统源码&#xff0c;比较适合单品商城、小型商城使用。带有易支付接口。 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/88391704 源码下载2&#xff1a;评论留言或私信留言

微服务的初步使用

环境说明 jdk1.8 maven3.6.3 mysql8 idea2022 spring cloud2022.0.8 微服务案例的搭建 新建父工程 打开IDEA&#xff0c;File->New ->Project&#xff0c;填写Name&#xff08;工程名称&#xff09;和Location&#xff08;工程存储位置&#xff09;&#xff0c;选…

arm代码

RISC精简指令集 长度和执行周期固定 长度为一条机器指令在计算机占用的内存大小 指令周期为CPU执行一条机器指令所发费的时间(时钟周期由CPU工作频率决定) CISC复杂指令集 其架构一般用于PC端 X86和X64都是负载指令集CPU 更注重指令的功能性 指令周期和长度都不固定 ar…

斯坦福数据挖掘教程·第三版》读书笔记(英文版)Chapter 10 Mining Social-Network Graphs

来源&#xff1a;《斯坦福数据挖掘教程第三版》对应的公开英文书和PPT。 Chapter 10 Mining Social-Network Graphs The essential characteristics of a social network are: There is a collection of entities that participate in the network. Typically, these entiti…