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.rhkb.cn/news/149200.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习基础之参数量(3)

一般的CNN网络的参数量估计代码 class ResidualBlock(nn.Module):def __init__(self, in_planes, planes, norm_fngroup, stride1):super(ResidualBlock, self).__init__()print(in_planes, planes, norm_fn, stride)self.conv1 nn.Conv2d(in_planes, planes, kernel_size3, …

MySQL——使用mysqldump备份与恢复数据

目录 1.mysqldump简介 2.mysqldump备份数据 2.1 备份所有数据库 2.2 备份一个/多个数据库 2.3 备份指定库中的指定表 3.mysqldump恢复数据 3.1 恢复数据库 3.2 恢复数据表 1.mysqldump简介 mysqldump命令可以将数据库中指定或所有的库、表导出为SQL脚本。表的结构和表中…

互联网Java工程师面试题·Elasticsearch 篇·第一弹

目录 1、elasticsearch 了解多少,说说你们公司 es 的集群架构,索引数据大小,分片有多少,以及一些调优手段 。 1.1 设计阶段调优 1.2 写入调优 1.3 查询调优 1.4 其他调优 2、elasticsearch 的倒排索引是什么 3、elastic…

使用Pytorch从零实现Vision Transformer

在这篇文章中,我们将基于Pytorch框架从头实现Vision Transformer模型,并附录完整代码。 Vision Transformer(ViT)是一种基于Transformer架构的深度学习模型,用于处理计算机视觉任务。它将图像分割成小的图像块(patches),然后使用Transformer编码器来处理这些图像块。V…

【单片机】16-LCD1602和12864和LCD9648显示器

1.LCD显示器相关背景 1.LCD简介 (1)显示器,常见显示器:电视,电脑 (2)LCD(Liquid Crystal Display),液晶显示器,原理介绍 (3&#xff…

十天学完基础数据结构-第九天(堆(Heap))

堆的基本概念 堆是一种特殊的树形数据结构,通常用于实现优先级队列。堆具有以下两个主要特点: 父节点的值始终大于或等于其子节点的值(最大堆),或者父节点的值始终小于或等于其子节点的值(最小堆&#xff…

【2023年11月第四版教材】第18章《项目绩效域》(合集篇)

第18章《项目绩效域》(合集篇) 1 章节内容2 干系人绩效域2.1 绩效要点2.2 执行效果检查2.3 与其他绩效域的相互作用 3 团队绩效域3.1 绩效要点3.2 与其他绩效域的相互作用3.3 执行效果检查3.4 开发方法和生命周期绩效域 4 绩效要点4.1 与其他绩效域的相互…

2023/10/4 QT实现TCP服务器客户端搭建

服务器端&#xff1a; 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> #include <QTcpSocket> #include <QList> #include <QMessageBox> #include <QDebug>QT_BEGIN_NAMESPACE namespace Ui { cla…

十天学完基础数据结构-第八天(哈希表(Hash Table))

哈希表的基本概念 哈希表是一种数据结构&#xff0c;用于存储键值对。它的核心思想是将键通过哈希函数转化为索引&#xff0c;然后将值存储在该索引位置的数据结构中。 哈希函数的作用 哈希函数是哈希表的关键部分。它将输入&#xff08;键&#xff09;映射到哈希表的索引位…

Ubuntu使用cmake和vscode开发自己的项目,引用自己的头文件和openCV

创建文件夹 mkdir my_proj 继续创建include 和 src文件夹&#xff0c;形成如下的目录结构 用vscode打开项目 创建add.h #ifndef ADD_H #define ADD_Hint add(int numA, int numB);#endif add.cpp #include "add.h"int add(int numA, int numB) {return numA nu…

实战型开发2/3--架构设计

这里谈及在代码设计阶段以及重构阶段要考虑的架构方面问题&#xff0c;可以说是开发过程中的中层阶段&#xff1b; 主要是将 < the art of unix programming>< clean architecture>< the pragmatic programmer>< design patterns> 等几本书结合实践做…

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

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

[架构之路-231]:计算机硬件与体系结构 - 性能评估汇总,性能优化加速比

目录 一、计算机体系结构 二、计算机性能评估 2.1 分类方法1 2.2 分类方法2 三、常见的专项性能测试工具 3.1 浮点运算性能&#xff08;FLOPS&#xff09; 3.2 综合理论性能法 3.3 历史基准测试&#xff08;跑分软件&#xff09;&#xff1a;通过运行典型的综合性的程序…

毕设-原创医疗预约挂号平台分享

医疗预约挂号平台 不是尚医通项目&#xff0c;先看项目质量&#xff08;有源码论文&#xff09; 项目链接&#xff1a;医疗预约挂号平台git地址 演示视频&#xff1a;医疗预约挂号平台 功能结构图 登录注册模块&#xff1a;该模块具体分为登录和注册两个功能&#xff0c;这些…

想要精通算法和SQL的成长之路 - 最长连续序列

想要精通算法和SQL的成长之路 - 最长连续序列 前言一. 最长连续序列1.1 并查集数据结构创建1.2 find 查找1.3 union 合并操作1.4 最终代码 前言 想要精通算法和SQL的成长之路 - 系列导航 并查集的运用 一. 最长连续序列 原题链接 这个题目&#xff0c;如何使用并查集是一个小难…

R语言教程课后习题答案(持续更新中~~)

R语言教程网址如下 https://www.math.pku.edu.cn/teachers/lidf/docs/Rbook/html/_Rbook/index.html 目录 source()函数可以运行保存在一个文本文件中的源程序 R向量下标和子集 数值型向量及其运算 日期功能 R因子类型 source()函数可以运行保存在一个文本文件中的源程序…

【C语言】动态通讯录(超详细)

通讯录是一个可以很好锻炼我们对结构体的使用&#xff0c;加深对结构体的理解&#xff0c;在为以后学习数据结构打下结实的基础 这里我们想设计一个有添加联系人&#xff0c;删除联系人&#xff0c;查找联系人&#xff0c;修改联系人&#xff0c;展示联系人&#xff0c;排序这几…

快速了解Spring Cache

SpringCache是一个框架&#xff0c;实现了基于注解的缓存功能&#xff0c;只需要简单的加一个注解&#xff0c;就可以实现缓存功能。 SpringCache提供了一层抽象&#xff0c;底层可以切换不同的缓存实现。例如&#xff1a; EHChche Redis Caffeine 常用注解&#xff1a; Enabl…

Vue中如何进行分布式路由配置与管理

Vue中的分布式路由配置与管理 随着现代Web应用程序的复杂性不断增加&#xff0c;分布式路由配置和管理成为了一个重要的主题。Vue.js作为一种流行的前端框架&#xff0c;提供了多种方法来管理Vue应用程序的路由。本文将深入探讨在Vue中如何进行分布式路由配置与管理&#xff0…

全志ARM926 Melis2.0系统的开发指引⑧

全志ARM926 Melis2.0系统的开发指引⑧ 编写目的12.5. 应用程序编写12.5.1. 简单应用编写12.5.1.1. 注册应用12.5.1.2. 创建管理窗口12.5.1.3. 实现管理窗口消息处理回调函数12.5.1.4. 创建图层12.5.1.5. 创建 framewin12.5.1.6. 实现 framewin 消息处理回调函数 -. 全志相关工具…