Jmeter的性能测试

性能测试的概念

定义:软件的性能是软件的一种非功能特性,它关注的不是软件是否能够完成特定的功能,而是在完成该功能时展示出来的及时性。

由定义可知性能关注的是软件的非功能特性,所以一般来说性能测试介入的时机是在功能测试完成之后。在系统基础功能测试验证完成、系统趋于稳定的情况下,才会进行性能测试,否则性能测试是无意义的。另外,由定义中的及时性可知性能也是一种指标,可以用时间或其它指标来衡量,通常我们会使用某些工具或手段来检测软件的某些指标是否达到了要求,这就是性能测试。

性能测试定义:指通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。

jmeter性能测试视频教程:字节性能测试工程师视频教程,年薪30W真的很简单_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1N8411y7Wr/?spm_id_from=333.999.0.0

 

性能测试类型

  • 基准测试:在给系统施加较低压力时,查看系统的运行状况并记录相关数做为基础参考
  • 负载测试:是指对系统不断地增加压力或增加一定压力下的持续时间,直到-
    系统的某项或多项性能指标达到安全临界值,不断加压使系统达到瓶颈,为调优提供参考数据。
  • 压力测试:
    (1)稳定性压力测试:在不同的给定的条件下(比如内存的使用,一定时间段内有多少请求等),系统表现出来的处理,反应能力(这里会考虑系统的容错能力,恢复能力)
    (2)破坏性压力测试:不断加压,直至系统崩溃,挂掉,来得出系统的最大承受能力在哪儿
  • 稳定性测试:在给系统加载一定业务压力的情况下,使系统运行一段时间,以此检测系统是否稳定。
  • 并发测试:测试多个用户同时访问同一个应用、同一个模块或者数据记录时是否存在死锁或者其他性能问题,
  • 失效恢复测试:针对有多余备份和负载均衡的系统设计,检测如果系统局部发生故障,系统能否继续使用
  • 配置测试:通过对被测系统软硬件环境的调整,了解各种不同环境对系统性能影响的程度,从而找到系统各项资源的最优分配原则

image.png

性能测试应用场景(领域)

性能测试应用场景(领域)主要有:
能力验证、规划能力、性能调优、缺陷发现、性能基准比较,

下表简单介绍和对比了这几个场景的各自用途和特点:

image.png

下表为性能测试应用领域与测试方法关联:

image.png

性能测试常用的指标

1、响应时间(Response Time)

定义:从用户发送一个请求到用户接收到服务器返回的响应数据这段时间就是响应时间

计算方法:Response time = (网络时间 + 应用程序处理时间)

合理的响应时间 2/5/10 (2秒之内给客户响应被用户认为是非常有吸引力的,5秒之内,比较糟糕,10秒之内,糟糕的用户体验,超过10秒,请求失败)

响应时间-负载对应关系:

image.png

图中拐点说明:

1、响应时间突然增加

2、意味着系统的一种或多种资源利用达到的极限

3、通常可以利用拐点来进行性能测试分析与定位

2、吞吐量

定义:单位时间内系统处理的客户端请求的数量

计算方法:Throughput = (number of requests) / (total time)

吞吐量-负载对应关系:

①上升阶段:吞吐量随着负载的增加而增加,吞吐量和负载成正比;

②平稳阶段:吞吐量随着负载的增加而保持稳定,无太大变化或波动;

③下降阶段:吞吐量随着负载的增加而下降,吞吐量和负载成反比;

image.png

a1面积越大,说明系统的性能能力越强,a2面积越大,说明系统稳定性越好,a3面积越大,说明系统的容错能力越好

吞吐率

吞吐量/传输时间,即单位时间内网络上传输的数据量,也可以指单位时间内处理客户请求数量,它是衡量网络性能的重要指标。

通常情况下,吞吐率用“字节数/秒”来衡量,当然,也可以用“请求数/秒”和“页面数/秒”来衡量;

3、并发数

①狭义上的并发:所有用户在同一时间点进行同样的操作,一般指同一类型的业务场景,比如1000个用户同时登陆系统;

②广义上的并发:多个用户与系统发生了交互,这些业务场景可以是相同的也可以是不同的,交叉请求和处理较多;

4、资源利用率

资源指标与硬件资源消耗直接相关,而系统指标则与用户场景及需求直接相关:

image.png

资源指标:
CPU使用率:指用户进程与系统进程消耗的CPU时间百分比,长时间情况下,一般可接受上限不超过85%;

内存利用率:内存利用率=(1-空闲内存/总内存大小)*100%,一般至少有10%可用内存,内存使用率可接受上限为85%;

磁盘I/O: 磁盘主要用于存取数据,因此当说到IO操作的时候,就会存在两种相对应的操作,存数据的时候对应的是写IO操作,取数据的时候对应的是是读IO操作,一般使用% Disk Time(磁盘用于读写操作所占用的时间百分比)度量磁盘读写性能;

网络带宽:一般使用计数器Bytes Total/sec来度量,其表示为发送和接收字节的速率,包括帧字符在内;判断网络连接速度是否是瓶颈,可以用该计数器的值和目前网络的带宽比较;

系统指标:
并发用户数:单位时间内与系统发生交互的用户数;

在线用户数:某段时间内访问系统的用户数,这些用户并不一定同时向系统提交请求;

平均响应时间:系统处理事务的响应时间的平均值;事务的响应时间是从客户端提交访问请求到客户端接收到服务器响应所消耗的时间;

事务成功率:性能测试中,定义事务用于度量一个或者多个业务流程的性能指标,如用户登录、保存订单、提交订单操作均可定义为事务,单位时间内系统可以成功完成多少个定义的事务,在一定程度上反应了系统的处理能力,一般以事务成功率来度量;

超时错误率:主要指事务由于超时或系统内部其它错误导致失败占总事务的比率;

资源利用-负载对应关系:

image.png

图中拐点说明:

1、服务器某件资源使用逐渐达到饱和

2、通常可以利用拐点来进行性能测试分析与定位

5、其它常用概念:

TPS

Transaction Per Second:每秒事务数,指服务器在单位时间内(秒)可以处理的事务数量,一般以request/second为单位;

QPS是查询,而TPS是事务,事务是查询的入口,也包含其他类型的业务场景,因此QPS应该是TPS的子集!

QPS

Query Per Second:每秒查询率,指服务器在单位时间内(秒)处理的查询请求速率;

TPS和QPS都是衡量系统处理能力的重要指标,一般和并发结合起来判断系统的处理能力;

Thinking Time

思考时间,在性能测试中,模拟用户的真实操作场景。用户操作的事务与事务之间是有一定间隔的,此时间内是不对服务器产生压力的,引入这个概念是为了并发测试(有交叉业务场景)时,业务场景比率更符合真实业务场景;

PV

Page View:页面浏览量,通常是衡量一个页面甚至网站流量的重要指标;

细分的话,有独立访问者数量、重复访问者数量、单独页面访问数量、用户停留时间等类型;

RT/ART

Response Time/average Response Time:响应时间/平均响应时间,指一个事务花费多长时间完成;

一般来说,性能测试中平均响应时间更有代表意义。细分的话,还有最小最大响应时间,50%、90%用户响应时间等;

 jmeter性能测试视频教程:字节性能测试工程师视频教程,年薪30W真的很简单_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1N8411y7Wr/?spm_id_from=333.999.0.0

性能测试流程

需求分析

需要分析的系统信息

image.png

需要分析的业务信息

image.png

性能需求评估

在实施性能测试之前,我们需要对被测系统做相应的评估,主要目的是明确是否需要做性能测试。如果确定需要做性能测试,需要进一步确立性能测试点和指标,明确该测什么、性能指标是多少,测试通过or不通过的标准?性能指标也会根据情况评估,要求被测系统能满足将来一定时间段的业务压力。
业务角度:
系统是公司内部 or 对外?系统使用的人数的多少?
系统角度:
a)系统架构:b)数据库要求:c)系统特殊要求:

确定性能测试点:

  • 关键业务:
    确定被测项目是否属于关键业务,有哪些主要的业务逻辑点,特别是跟交易相关的功能点。例如转账,扣款等接口。如果项目(或功能点)不属于关键业务(或关键业务点)

  • 日请求量:
    确定被测项目各功能点的日请求量(可以统计不同时间粒度下的请求量如:小时,日,周,月)。如果日请求量很高,系统压力很大,而且又是关键业务,该项目需要做性能测试,而且关键业务点,可以被确定为性能点

  • 逻辑复杂度:
    判定被测项目各功能点的逻辑复杂度。如果一个主要业务的日请求量不高,但是逻辑很复杂,则也需要通过性能测试。原因是,在分布式方式的调用中,当某一个环节响应较慢,就会影响到其它环节,造成雪崩效应。

  • 运营推广活动:
    根据运营的推广计划来判定待测系统未来的压力。未雨绸缪、防患于未然、降低运营风险是性能测试的主要目标。被测系统的性能不仅能满足当前压力,更需要满足未来一定时间段内的压力。因此,事先了解运营推广计划,对性能点的制定有很大的作用。例如,运营计划做活动,要求系统每天能支撑多少 PV、多少 UV,或者一个季度后,需要能支撑多大的访问量等等数据。当新项目(或功能点)属于运营重点推广计划范畴之内,则该项目(或功能点)也需要做性能测试。

建立性能指标

a.选取核心业务流程(重要程度/频繁)
b.并发用户数
c.事物吞吐需求
d.响应时间需求
e.系统占用资源需求
f.可扩展性需求

建立系统负载模型

  • 业务层面:
    (a)核心业务流程吞吐率
    (b)高峰期业务分布时段

  • 系统负载:
    (a) 高峰/平常场景吞吐率
    (b)CPU/IO/MEM/NETWORK

  • 数据来源:
    (a)服务器端监控
    (b)数据库日志
    (c)用户提出需求

制定测试计划的实施时间和方案

预设本次性能测试各子模块的起止时间和结束时间
测试环境的配置:局域网,虚拟机,操纵系统,数据库,中间件
参与人员:谁负责哪些任务,测试策略。
产出:测试方案,分析结果

搭建测试环境

测试机环境

执行机环境:这个就是用来生成负载的执行机,通常需要在物理机上运行。
负载工具:JDK/Eclipse/LoadRuner or Jmeter或Galting等
监控工具:准备性能测试时的服务器资源、JVM、数据库监控工具,以便进行后续的性能测试分析与调优

服务器环境

系统运行环境:这个通常就是我们的测试环境,Linux系统/数据库/应用服务/各种监控工具。
大部分公司的测试环境会低于生产环境,同时还需要考虑到不同的硬件配置是否会是制约系统性能的重要因素!因此在测试环境中,需要部署多个不同的测试环境,在不同的硬件配置上检查应用系统的性能,配置大概是如下几类:
①数据库服务器
②应用服务器
③负载模拟器
④软件运行环境,
平台并对不同配置下系统的测试结果进行分析,得出最优结果(最适合当前系统的配置)

测试场景设计

通过和业务部门沟通以及以往用户操作习惯,确定用户操作习惯模式,以及不同的场景用户数量,操作次数,确定测试指标,以及性能监控等

测试用例设计和脚本开发

选择LoadRuner或者Jmeter,我使用的是Jmeter。

我使用Jmeter的工具进行录制,
(PS:能直接写脚本就自己写尽量少录制,录制有时候会有干扰)

对脚本进行修改,增强脚本,让脚本更符合业务逻辑,可用性更强。
(1)参数化用户输入
(2)关联数据
(3)增加事物
(4增加检查点)

调试脚本
(1)Vugen单次回放
(2)Vugen多次回放
(3)Controller单脚本多用户
(4)Controller多脚本多用户
(5)查看回放日志

验证脚本
(1)通过检查点验证
(2)通过查看后台服务器日志验证
(3)通过测试系统查看运行后台变化
(4)利用SQL语句查询/插入/更新/修改,查看效果

测试数据准备

获取数据有两种方式:

(1)拉取生产数据,尽量保持数据一致以及量级足够
(2)利用脚本自动生成数据或者利用测试工具生成数据,(如:利用JDBC预埋数据)

a)负载测试数据:并发测试时需要多少数据?比如登录场景?

b)DB数据量大小:为了尽量符合生产场景,需要模拟线上大量数据情况,那么要往数据库里提前插入一定的数据量。

性能测试执行和管理

执行测试脚本

在已部署好的测试环境中,按照业务场景和编号,按顺序执行我们已经设计好的测试脚本

测试结果记录

根据测试采用的工具不同,结果的记录也有不同的形式;展现方式:折线图,统计图,表格等,现在大多的性能测试工具都提供比较完整的界面图形化的测试结果,当然,对于服务器的资源使用等情况,可以利用一些计数器或第三方监控工具来对其进行记录,执行完测试后,对结果进行整理分析,

image.png

性能测试结果分析与调优

测试环境的系统性能分析

根据之前记录得到的测试结果,经过计算,与预定的性能指标进行对比,确定是否达到了我们需要的结果;如未达到,查看具体的瓶颈点,然后根据瓶颈点的具体数据,

瓶颈定位分析
吞吐量:二八原则 (即:80%的业务在20%的时间内完成/正太分布)
响应时间:2/5/10原则
内存,磁盘,IO,进程,网络分析
硬件,操作系统,中间件,应用瓶颈
进行具体情况具体分析

性能调优
时间资源,人力资源
硬件资源,扩展性,影响

硬件设备对系统性能表现的影响分析

配置几个不同的测试环境,故可以根据不同测试环境的硬件资源使用状况图进行分析,确定瓶颈是再数据库服务器、应用服务器抑或其他方面,然后针对性的进行优化等操作

其他影响因素分析

影响系统性能的因素很多,可以从用户能感受到的场景分析,哪里比较慢,哪里速度尚可,这里可以根据2\5\8原则对其进行分析;
至于其他诸如网络带宽、操作动作、存储池、线程实现、服务器处理机制等一系列的影响因素,具体问题具体分析,

测试中发现的问题

在性能测试执行过程中,可能会发现某些功能上的不足或存在的缺陷,以及需要优化的地方,需要多次执行测试。

测试报告和跟踪

性能测试报告是性能测试的里程碑,通过报告能展示出性能测试的最终成果,展示系统性能是否符合需求,是否有性能隐患

性能测试报告中需要阐明:
性能测试目标、
性能测试环境、
性能测试数据构造规则、
性能测试策略、
性能测试结果、
性能测试调优说明、
性能测试过程中遇到的问题和解决办法等。

性能测试工程师完成该次性能测试后,需要将测试结果进行备案,并做为下次性能测试的基线标准,具体包括性能测试结果数据、性能测试瓶颈和调优方案等。同时需要将测试过程中遇到的问题,包括代码瓶颈、配置项问题、数据问题和沟通问题,以及解决办法或解决方案,进行知识沉淀。

 jmeter性能测试视频教程:字节性能测试工程师视频教程,年薪30W真的很简单_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1N8411y7Wr/?spm_id_from=333.999.0.0

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

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

相关文章

Python---练习:while循环嵌套(用两次while三步走--里外各一次)

1、循环嵌套的引入 案例: 有天女朋友又生气了,惩罚:说3遍“老婆大人, 我错了”,这个程序是不是循环即可?但如果女朋友说:还要刷今天晚饭的碗,这个程序怎么书写? 思考&…

MOSFET(五):DrMos

一、简介 DrMos(Driver MOSFET)技术是 Intel 于2004年推出的服务器主板节能技术,即把 2 个MOSFET和 1 个MOS驱动器 三合一,集成在一个封装中。集成后的 DrMos 面积是分离MOSFET的 ,功率密度是其 倍,通过搭…

android 13/14高版本SurfaceFlinger出现VSYNC-app/VSYNC-appSf/VSYNC-sf剖析

问题背景: 了解surfaceflinger的vsync同学都可能知道vsync属于一个节拍器,主要用来控制有节奏的渲染,不至于会产生什么画面撕裂等现象。 一般vsync都有会有2部分: app部分vsync,控制各个app可以有节奏的上帧 surfacef…

UVM-什么是UVM方法学

概念简介 百度对UVM的解释如下: 通用验证方法学(Universal Verification Methodology, UVM)是一个以SystemVerilog类库为主体的验证平台开发框架,验证工程师可以利用其可重用组件构建具有标准化层次结构和接口的功能验证环境 UVM…

UE4 AI群集实现

逻辑就不用说了,就是计算对应图形位置让每个Pawn移动到该位置 因为有时候AI与AI会卡住 所以加上这个Bool为true,以及设置两个AI之间至少隔的距离,设置在一个合理的参数即可 有时候AI群集,AI与AI会比较紧密,可以将Caps…

初始 c++(1)

目录: 目录 1: 命名空间的详解 2:c的输入与输出关键字及理解 3:详细讲解第一个c程序(每段代码的意思) 4:缺省参数的理解 5:函数重载 引言:从今天开始我们就开始学习c了,让我们一起开始新的知识吧! 1:命名空间 所谓的命名空间…

分类预测 | MATLAB实现SSA-CNN-LSTM-Attention数据分类预测(SE注意力机制)

分类预测 | MATLAB实现SSA-CNN-LSTM-Attention数据分类预测(SE注意力机制) 目录 分类预测 | MATLAB实现SSA-CNN-LSTM-Attention数据分类预测(SE注意力机制)分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.MATLAB实…

用 pytorch 训练端对端验证码识别神经网络并进行 C++ 移植

文章目录 前言安装安装 pytorch安装 libtorch安装 opencv(C) 准备数据集获取训练数据下载标定 编码预分析 数据集封装格式 神经网络搭建神经网络训练神经网络测试神经网络预测C 移植模型转换通过跟踪转换为 Torch Script通过注解转换为 Torch Script 编写…

数据结构 排序

数据结构 排序 文章目录 数据结构 排序1. 排序的概念及引用1.1 排序的概念1.2 常见的排序算法 2.常见排序算法的实现2.1 插入排序2.1.1 基本思想2.1.2 直接插入排序2.1.3 希尔排序(缩小增量排序) 2.2 选择排序2.2.1 基本思想2.2.2 直接选择排序2.2.3 堆排序 2.3 交换排序2.3.1 …

Java后端模拟面试 题集④

1.你先作个自我介绍吧 面试官您好,我叫张睿超,来自湖南长沙,大学毕业于湖南农业大学,是一名智能科学与技术专业的统招一本本科生。今天主要过来面试贵公司的Java后端开发工程师岗位。 大学里面主修的课程是Java、Python、数字图…

使用QT实现http里面的get和post

#1024程序员节|参与投稿,赢限定勋章和专属大奖# #假如你有一台服务器,你最想做哪些事?# #你被什么样的BUG困扰过一周以上?# 在http里面下面这些方法和服务器的响应代码一起用于HTTP协议中的请求和响应交互。请注意&…

Spring Boot + EasyUI 创建第一个项目(一)

创建一个Spring Boot和EasyUI相结合的项目。 一、构建一个Spring Boot项目 Spring Boot之创建一个Spring Boot项目(一)-CSDN博客 二、配置Thymeleaf Spring Boot Thymeleaf(十一)_thymeleaf 设置字体_人……杰的博客-CSDN博客…

mybatisplus开启sql打印的三种方式

1、在application.yml文件中添加mybatisplus的配置文件 使用mybatisplus自带的log-impl配置,可以在控制台打印出sql语句、执行结果的数据集、数据结果条数等详细信息,这种方法适合再调试的时候使用,因为这个展示的信息详细,更便于…

【算法练习Day25】 重新安排行程N 皇后 解数独

​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 重新安排行程N 皇后解数独总…

C# Socket通信从入门到精通(2)——多个同步TCP客户端C#代码实现

前言: 我们在开发Tcp客户端程序的时候,有时候在同一个软件上我们要连接多个服务器,这时候我们开发的一个客户端就不够使用了,这时候就需要我们开发出来的软件要支持连接多个服务器,最好是数量没有限制,这样我们就能应对任意数量的服务器连接,由于我们开发的Tcp客户端程…

使用 Visual Studio Code (VS Code) 作为 Visual C++ 6.0 (VC6) 的编辑器

使用 Visual Studio Code (VS Code) 作为 Visual C 6.0 (VC6) 的编辑器 由于一些众所周知的原因,我们不得不使用经典(过时)的比我们年龄还大的已有 25 年历史的 VC 6.0 来学习 C 语言。而对于现在来说,这个经典的 IDE 过于简陋&a…

Leetcode1833. 雪糕的最大数量

Every day a Leetcode 题目来源:1833. 雪糕的最大数量 解法1:贪心 排序 本题唯一的难点在于计数排序。 计数排序详解:C算法之计数排序 为了尽可能多的买到雪糕,我们选择从价格低的雪糕开始买,统计能够买到的雪糕…

Java学习_day03_变量数据类型运算符

文章目录 变量定义声明赋值使用简化 数据类型基本数据类型整型浮点型布尔型字符型空型 引用数据类型数据类型转换自动类型转换强制类型转换 运算符算术运算符赋值运算符比较运算符逻辑运算符位运算符条件运算符一元运算符二元运算符三元运算符运算符优先级 变量 变量类似于数学…

计算机算法分析与设计(12)---贪心算法(最优装载问题和哈夫曼编码问题)

文章目录 一、最优装载问题1.1 问题表述1.2 代码编写 二、哈夫曼编码2.1 哈夫曼编码概述2.2 前缀码2.3 问题描述2.4 代码思路2.5 代码编写 一、最优装载问题 1.1 问题表述 1. 有一批集装箱要装上一艘载重量为 c c c 的轮船,已知集装箱 i ( 1 ≤ i ≤ n ) i(1≤i≤…

昇腾CANN 7.0 黑科技:大模型训练性能优化之道

目前,大模型凭借超强的学习能力,已经在搜索、推荐、智能交互、AIGC、生产流程变革、产业提效等场景表现出巨大的潜力。大模型经过海量数据的预训练,通常具有良好的通用性和泛化性。用户基于“大模型预训练微调”开发范式即可在实际业务场景取…