【软件测试】Jmeter性能测试(性能测试,Jmeter使用与结果分析)

article/2025/9/29 3:37:13

文章目录

  • 前言
  • 一、性能测试
    • 1. 什么是性能测试?
    • 2. 性能测试的重要性
    • 3. 性能指标——QPS和TPS
      • ①QPS
      • ②TPS
  • 二、压测工具Jmeter
    • 1. 什么是Jmeter?
    • 2. Jmeter主要元件
    • 3. 下载安装
  • 三、一个简单的测试案例
      • ①新建一个线程组
      • ②新建一个HTTP请求
      • ③添加HTTP信息头(请求头)
      • ④添加合适的响应断言
      • ⑤添加监听器
      • ⑥点击运行
  • 四、 Jmeter结果分析
    • 1.如何得到可靠的测试报告?
      • ①简单数据写入器
      • ②后端监听器
      • ③其他解决方案
    • 2.简单数据写入器+HTML报告DashBoard案例演示
      • ①修改合适的测试规模
      • ②添加简单数据写入器
      • ③运行生成文件
      • ④生成HTML报表
    • 3.结果分析
      • ①成功率
      • ②响应时间变化
      • ③TPS
    • 4.性能优化方案

前言

性能测试是一个全栈工程师/架构师必会的技能之一,只有学会性能测试,才能根据得到的测试报告进行分析,找到系统性能的瓶颈所在,而这也是优化架构设计中重要的依据。

本文简单讲述了性能测试以及性能测试工具Jmeter。另外,我会将其他测试相关的文章也放在这个系列。

一、性能测试

1. 什么是性能测试?

性能测试就是通过特定的方式对被测试系统按照一定测试策略施加压力,获取该系统的响应时间、TPS、吞吐量、资源利用率等性能指标,来检测系统上线后能否满足用户需求的过程。

2. 性能测试的重要性

性能测试是检验我们系统性能的重要步骤,只有经过性能测试,得到对应的测试报告,才能根据报告中所呈现的现象(成功率、响应时长、TPS等)来进行分析,找出系统的瓶颈所在,优化系统的性能。

3. 性能指标——QPS和TPS

①QPS

QPS,全名 Queries Per Second,意思是“每秒查询率”,是一台服务器每秒能够响应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。

②TPS

TPS 即 Transactions Per Second的缩写,每秒处理的事务数目。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。
客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数,最终利用这些信息作出的评估分。

Qps 基本类似于 Tps,但是不同的是,对于一个页面的一次访问,形成一个 Tps;但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入“Qps”之中。
QPS和TPS都是衡量一个系统性能的重要指标之一。

二、压测工具Jmeter

1. 什么是Jmeter?

ApacheJMeter ,是一个100%纯Java的开源软件,旨在加载测试功能行为和测量性能。它最初设计用于测试Web应用程序,但后来扩展到其他测试功能。
相较于世面上一些其他性能测试工具,Jmeter是为数不多的既好用又开源免费的测试工具。

2. Jmeter主要元件

1、测试计划:是使用 JMeter 进行测试的起点,它是其它 JMeter测试元件的容器

2、线程组:代表一定数量的用户,它可以用来模拟用户并发发送请求。实际的请求内容在Sampler中定义,它被线程组包含。

3、配置元件:维护Sampler需要的配置信息,并根据实际的需要修改请求的内容。

4、前置处理器:负责在请求之前工作,常用来修改请求的设置

5、定时器:负责定义请求之间的延迟间隔。

6、取样器(Sampler):是性能测试中向服务器发送请求,记录响应信息、响应时间的最小单元,如:HTTP Request Sampler、FTP Request Sample、TCP Request Sample、JDBC Request Sampler等,每一种不同类型的sampler 可以根据设置的参数向服务器发出不同类型的请求。

7、后置处理器:负责在请求之后工作,常用获取返回的值。

8、断言:用来判断请求响应的结果是否如用户所期望的。

9、监听器:负责收集测试结果,同时确定结果显示的方式。

10、逻辑控制器:可以自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。

3. 下载安装

进入官网,点击左侧的Download Releases选择和是的版本即可下载。
在这里插入图片描述
下载好后是一个压缩包,将其解压到你想要的目录下(最好不要出现中文)即可。(当然它需要Java运行环境,如果没装可以另外去下个jdk,这里就不赘述了)

进入bin目录,双击运行jmeter.bat启动jmeter,

在这里插入图片描述
这样我们就打开了安装好的Jmeter。
在这里插入图片描述

如果不习惯英文也可以在设置里进行更改
在这里插入图片描述

三、一个简单的测试案例

这里我演示一个测试常规restful接口的例子。演示接口的项目来源于上次参加服创省赛时写的网脉铁塔监测物联网平台,这个接口主要是获取设备列表。正常获取响应结果如下:
在这里插入图片描述

在这里插入图片描述

①新建一个线程组

在这里插入图片描述

(1)线程数:即虚拟用户数。设置多少个线程数也就是设置多少虚拟用户数

(2)Ramp-Up时间(秒):设置虚拟用户数全部启动的时长。如果线程数为20,准备时长为10秒,那么需要10秒钟启动20个线程。也就是平均每秒启动2个线程。

(3)循环次数:每个线程发送请求的个数。如果线程数为20,循环次数为10,那么每个线程发送10次请求。总请求数为20*10=200。如果勾选了“永远”,
那么所有线程会一直发送请求,直到手动点击工具栏上的停止按钮,或者设置的线程时间结束。

这里我们设置30个线程(不要加太多,这里只是为了演示), 启动时间设置为3s,循环次数为3次
在这里插入图片描述

②新建一个HTTP请求

在这里插入图片描述
在这里插入图片描述
把这次要测试的接口信息填入

③添加HTTP信息头(请求头)

这里需要添加对应的消息头信息,在大多数web系统里,往往都对api接口做了权限认证,而这次测试的系统也不例外,是典型的token机制,如果不在请求头里加上合法的token,那么这个测试是会被拦截的,也就没办法对业务接口进行测试。所以这里需要把请求头中token复制过来(不同系统权限设计不同,我这里是X-Access-Token)。
当然如果是使用cookie机制来实现的权限认证,则需新建一个Cookie管理器,这里就不多赘述了。
在这里插入图片描述

在这里插入图片描述
当然这里也可以直接把整个请求头的信息都复制,然后在Jmeter中点击“从剪切板添加”,这样就可以一键把真实请求的请求头信息都复制过来。

④添加合适的响应断言

对相应结果添加合适的断言
在这里插入图片描述
在这次的测试系统中,如果成功响应那么响应结果就会包含success:true的字符串,所以我在断言中就做了相应的设置
在这里插入图片描述
大家可以针对自己的系统设置合适的断言。

⑤添加监听器

JMeter有许多UI Listener,可用于直接在JMeter UI中查看结果:

  • 以树形式查看结果:查看结果树显示所有样本响应的树,允许您查看任何样本的响应。
  • 图形结果:图形结果监听器生成一个简单的图形,绘制所有采样时间,
  • 聚合报告:聚合报告为测试中的每个不同命名的请求创建一个表行,
  • 在表中查看结果:此可视化工具为每个样本结果创建一行。与查看结果树一样,此可视化工具使用大量内存,
  • 聚合图:聚合图与聚合报告类似。主要区别在于聚合图提供了一种生成条形图并将图形保存为PNG文件的简便方法,
  • 生成摘要结果:此测试元素可以放在测试计划中的任何位置。生成到目前为止测试运行的摘要到日志文件和/或标准输出。显示运行和差异总计。

选择合适的结果呈现方式,这里我加了查看结果树、汇总报告和图形结果
在这里插入图片描述

⑥点击运行

点击运行图标便可运行测试了
在这里插入图片描述

运行完成后我们可以点击对应的监听器查看运行结果。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

四、 Jmeter结果分析

1.如何得到可靠的测试报告?

以上我们便完成了一次简单的测试案例,但我们的测试还未结束。我们需要对测试结果进行分析,但是在真实项目中上述的测试结果是不可靠的,只能用作调试。你如果细心的话,应该能在运行Jmeter的命令行里找到这句话
在这里插入图片描述
它这里就直接说明了不建议我们在真实测试中使用gui界面,尤其是图表形式,为什么呢?

在负载测试期间不得使用图形结果,因为它消耗了大量资源(内存和CPU)。仅用于功能测试或测试计划调试和验证期间。

大多数UI监听器非常适合调试/测试目的。不要期望达到高负荷(> = 500个用户),谨慎使用它们。这些侦听器设计用于在JMeter UI中运行负载测试时快速获取指标,以实现轻负载。(<= 50个并发用户)

即使是中等负载(100-500个并发用户)也可以使用它们,但不要期望使用JMeter UI运行分布式JMeter测试。这不是目的。记住JMeter默认配置512MB堆内存,相当低。虽然你可以增加JMeter分配的内存,但它会感觉不会再漂浮在船上了。

那么在运行实际负载测试时我们可以使用哪些监听器?

①简单数据写入器

简单数据写入器:可以将监听器配置为将不同的项目保存到结果日志文件(JTL)。
这是JMeter中最有用的监听器。它根据外部文件中的配置保存性能指标:JTL文件。JMeter JTL文件是分析结果的最佳方式,但有一个缺点:您需要另一个工具来执行数据挖掘。

一般我们采取以下两种方案

  • 简单数据写入器+excel
  • 简单数据写入器+HTML报告DashBoard

这里推荐使用HTML报告DashBoard,这也是官方支持的方式。后文我也会演示利用HTML报告DashBoard来生成性能测试报告。

②后端监听器

后端监听器:后端监听器是一个异步监听器,使您可以插入BackendListenerClient的自定义实现。默认情况下,提供Graphite实现。

JMeter的Backend Listener允许插入外部数据库来存储测试结果和性能指标。

因此我们可以选择InfluxDB+Grafana+JMeter的后端监听器来实现

  • InfluxData:用作存储性能指标的临时指标存储的数据库
  • Grafana:Grafana是一个时间序列分析的开源平台,允许您根据时间序列数据创建实时图表
  • JMeter的后端监听器:后端监听器收集JMeter指标并将它们发送到临时指标存储

③其他解决方案

kylinTOP测试与监控平台(商用版)
LoadRunner(商用版)
NeoLoad(商用版)
Load impact(免费使用)

当然市场上还有一些解决方案,但是大多都要收费,所以不再赘述了,详情可以了解这篇JMETER结果分析,我很多内容都是参考他的解决方案的。

2.简单数据写入器+HTML报告DashBoard案例演示

这里我还是拿之前的测试案例来演示

①修改合适的测试规模

这里我加大测试压力,将线程数改为1000,循环30次
在这里插入图片描述

②添加简单数据写入器

新增一个简单数据写入器
在这里插入图片描述
修改输出路径到合适的目录下,同时保存的文件以jtl结尾
在这里插入图片描述

③运行生成文件

点击运行图标,运行完成后在对应目录下你应该能找到这个jtl文件
在这里插入图片描述

④生成HTML报表

点击工具->Generate HTML report
在这里插入图片描述
在result files 一栏,我们选择之前导出的jtl文件。

在用户配置文件一栏我们可以选择bin目录下有的user.properties文件,也可以根据官网用户手册去配置一个。这里我们选择bin目录下的文件即可。

输出目录我们选择一个合适的空目录即可。
在这里插入图片描述
点击generate report 即可生成报告
在这里插入图片描述

点击index.html即可看到测试结果
在这里插入图片描述

在这里插入图片描述

3.结果分析

报告图表很多,以下几个我们需要特别注意:

①成功率

在仪表盘,我们可以清楚看到成功请求的占比,在本次测试中,成功率99.9%,这是完全可以接受的
在这里插入图片描述

②响应时间变化

在这里插入图片描述
在这里我们可以看到测试中响应时长的变化,最小值一般不值得参考,值得参考的响应时长一般是90%-99%的响应时长,我们需要保证至少90%的请求响应时长在用户可接受范围内(具体可容忍时长视具体的业务场景而变化)

在这次测试中请求时长达到了恐怖的9000ms,一般用户是没办法忍受的,所以,在1000个用户下(1000个模拟线程),系统响应没法达到用户期望。

③TPS

TPS 即 Transactions Per Second的缩写,每秒处理的事务数目。
这个是我们经常拿来当做系统性能好坏的指标之一,也是在微服务架构中最常提到的词。

在这里插入图片描述

这里我们可以看到我们测试的接口TPS大概在138左右。

4.性能优化方案

根据测试报告所表现出来的性能,我们可以结合实际cpu、内存负载率去判断系统瓶颈,针对自己的业务场景进行优化。

由于博主也没有过多调优经验,在此也就不多赘述了,未来如果遇到相关的问题了再回来补充。

最后,
愿大家以梦为马,不负人生韶华!
与君共勉


http://chatgpt.dhexx.cn/article/L2OhvkFX.shtml

相关文章

全网最牛,JMeter性能测试步骤与结果分析(压力 / 负载测试)详全,精品太干了

目录&#xff1a;导读 一、前言二、负载、压力、可靠性&#xff08;非常重要&#xff09;三、压力测试实战四、负载测试实战五、资源监控1、Windows自带的资源监工具2、Jmeter里面的第三方监理插件3、Linux资源监控 一、前言 1、负载&#xff1a;模拟业务操作对服务器造成压力…

【Java】比较器 Comparator Comparable

一、背景 我们在使用 Collections.sort() 对链表进行排序&#xff08;或者使用 Arrays.sort() 对数组进行排序&#xff09;时&#xff0c;常常需要根据不同情况自定义排序规则。比如&#xff1a;当我们存储学生对象时&#xff0c;我们需要按照学生年龄进行排序&#xff0c;这时…

Java 解惑:Comparable 和 Comparator 的区别

读完本文你将了解到&#xff1a; Comparable 自然排序Comparator 定制排序总结 Java 中为我们提供了两种比较机制&#xff1a;Comparable 和 Comparator&#xff0c;他们之间有什么区别呢&#xff1f;今天来了解一下。 Comparable 自然排序 Comparable 在 java.lang 包下&am…

【Java】Comparable和Comparator接口

活动地址&#xff1a;CSDN21天学习挑战赛 ✨博客主页: XIN-XIANG荣 ✨系列专栏:【Java SE】 ✨一句短话: 难在坚持,贵在坚持,成在坚持! 文章目录 一. Comparable接口1. Comparable简介2. 为什么要实现Comparable接口3. Comparable的实际应用 Comparator接口1. Comparator简介2.…

一篇告诉你Comparator.comparing的使用

Comparator.comparing用处 很多情况下sql不好解决的多表查询,临时表分组,排序,尽量用java8新特性stream进行处理,使用java8新特性 //返回 对象集合以类属性一升序排序 list.stream().sorted(Comparator.comparing(类::属性一));//返回 对象集合以类属性一降序排序 注意两种写法…

详解Comparable和Comparator

目录 Comparable接口 Comparator接口 Comparable接口 Comparable接口在源码中的声明&#xff1a; public interface Comparable<T> {public int compareTo(T o); } 可以看到&#xff0c;只要一个compareTo方法&#xff0c;也就是说&#xff0c;实现Comparable接口的类…

Java Comparator的使用

这是啥&#xff1f; Comparator是个接口&#xff0c;是一个比较器&#xff0c;常用内部类的方式实现&#xff0c;常用于实现某个类的比较规则 怎么用&#xff1f; 场景&#xff1a;假如有一个字符串集合list&#xff0c;一共有10个元素&#xff0c;乱序的。现有排序规则orde…

Comparable与Comparator浅析

欢迎支持笔者新作&#xff1a;《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》&#xff0c;同时欢迎关注笔者的微信公众号&#xff1a;朱小厮的博客。 欢迎跳转到本文的原文链接&#xff1a;https://honeypps.com/java/comparable-and-comparator-analysis/ 今天…

Comparator和Comparable的区别

一、概述 Comparable和Comparator都是两个接口&#xff0c;接口都可以用来实现集合中元素的比较、排序&#xff0c;Comparator位于包java.util下&#xff0c;而Comparable位于包java.lang下&#xff0c;Comparable接口将比较代码嵌入自身类中&#xff0c;而Comparator既可以嵌入…

Comparator使用简介

1、Lambda表达式 2、Comparator使用简介 文章目录 一、使用方式1、Stream中sorted()方法2、Stream中max()方法3、Stream中排序JSONObject方法 二、具体方法1、 compare2、 equals3、 naturalOrder4、 comparing5、 comparingInt6、 comparingLong7、 comparingDouble8、 nullsF…

Comparator详解

前面我们讲过Java提供了一个用于比较的接口Comparable,提供了一个比较的方法,所有实现该接口的类,都动态的实现了该比较方法。实际上Java中除了比较一个接口外&#xff0c;还提供了一个接口&#xff0c;该接口也是具有比较的功能&#xff0c;但该接口注重的却是比较容器&#x…

Hough变换的理解

Hough变换&#xff1a; 原理&#xff1a;将一个空间映射到另一个空间。这里是将X&#xff0c;Y空间映射到R,Φ空间。看下图&#xff1a;左图是X,Y空间的直线&#xff0c;该直线方程&#xff1a;ykx b&#xff0c;确定方程的参数k,b也可以组成一个空间&#xff0c;这个空间中的…

matlab hough变换检测平行直线,浅谈Hough变换的平行直线检测改进方案

在遥感图像中,对江河上桥梁目标的识别具有重要意义。由于桥梁的最突出特征在于桥体的平行直线,所以对平行直线的实时检测十分重要。经典的Hough变换是一种常用的检测直线的方法,Hough变换的研究及应用动态:Hough变换于1962年由Paul Hough提出,并在美国作为专利被发表。它所…

Hough变换检测直线与圆的原理

霍夫变换的基本原理 霍夫变换(Hough Transform)可以理解为图像处理中的一种特征提取技术&#xff0c;通过投票算法检测具有特定形状的物体。霍夫变换运用两个坐标空间之间的变换将在一个空间中具有相同形状的曲线或直线映射到另一个坐标空间中的一个点形成峰值&#xff0c;从而…

Hough变换圆检测定位

Hough变换基本原理 Hough变换是由Paul Hough于1962年提出的一种检测圆的算法&#xff0c;它的基本思想是将图像从原图像空间变换到参数空间&#xff0c;在参数空间中&#xff0c;使用大多数边界点都满足的某种参数形式作为图像中的曲线的描述&#xff0c;它通过设置累加器对参…

【图像处理——hough变换那些事】

#老板的每一次点赞&#xff0c;都是对小编精神上的支持&#xff0c;愿各位老板一路长虹&#xff0c;学习进步。 点赞点赞&#xff01;&#xff01;&#xff01;&#xff01; #author&#xff1a;yyt time:2023.5.5 #机器学习—图像处理 #本文为小编第一次写文章&#…

基于Hough变换的直线检测(Matlab)

点击上方“3D视觉工坊”&#xff0c;选择“星标” 干货第一时间送达 作者丨无敌三脚猫 来源丨 古月居 1、引言 该程序实现了一些基本的图像处理算法&#xff0c;并将它们组合在一起&#xff0c;构建了一个基于霍夫变换的直线检测器。该程序能够在图像中找到直线段的起始点和结束…

Hough变换原理

霍夫变换在识别方程式已知的曲线是常用的一种方法&#xff0c;本文通过识别直线方程为向导&#xff0c;说明霍夫变换的原理。 话不多说&#xff0c;开始今天的主题&#xff0c;我们处理的对象是二值黑白图像&#xff0c;如下图&#xff1a; 上图是我自绘的五个点&#xff0c;考…

图像处理算法 之 Hough变换

Hough变换 一、标准Hough线变换(SHT)1.1 原理1.2 SHT步骤1.3 缺点 二、渐进概率Hough变换(PPHT)2.1 原理及步骤2.2 缺点 三、Hough圆变换3.1 原理及步骤3.2 缺点 四、实验代码 一、标准Hough线变换(SHT) 1.1 原理 标准Hough变换&#xff08;standard hough transform&#xf…

MATLAB中的Hough变换

下面来介绍一下关于Hough变换的原理及其如何在MATLAB中实现。 Hough变换&#xff1a;Hough变换是一种使用表决原理的参数估计技术。其原理是利用图像空间和Hough参数空间的点&#xff0d;线对偶性&#xff0c;把图像空间中的检测问题转换到参数空间。国内外对Hough变换的研究及…