卷麻了,00后Jmeter用的比我还熟练,简直没脸见人......

news2024/9/25 13:20:36

经常看到无论是刚入职场的新人,还是工作了一段时间的老人,都会对测试工具的使用感到困扰?

前言

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

本文简单讲述了性能测试以及性能测试工具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://www.coloradmin.cn/o/399832.html

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

相关文章

Allegro如何快速查看差分对是否等长的方法

在用Allegro进行PCB设计时&#xff0c;用快速查看差分对是否等长的方法&#xff0c;可以提高效率。那如何操作呢&#xff1f;具体操作方法如下&#xff1a;&#xff08;1&#xff09;选择菜单栏Route选择Timing Vision&#xff08;时序视图&#xff09; 然后在Options选项卡Tim…

陀螺和加计有关参数部分说明

部分参数计算一、零偏二、随机游走三、Allan方差分析使用要点一、零偏 如果只用一个指标来代表一款IMU的精度的话&#xff0c;那毫无疑问是陀螺零偏。这是因为&#xff1a;1) 惯导系统的精度主要取决于IMU中的陀螺器件精度&#xff0c;而不是加速度计精度&#xff1b;2) 陀螺的…

黑客入门教程【非常详细】从零基础入门到精通,看这一篇就够了!

首先要明白啊&#xff0c;我们现在说的黑客不是那种窃取别人信息、攻击别人系统的黑客&#xff0c;说的是调试和分析计算机安全系统的网络安全工程师。 黑客技术的核心就是渗透攻防技术&#xff0c;是为了证明网络防御按照预期计划正常运行而提供的一种机制。就是通过模拟恶意…

C#:Krypton控件使用方法详解(第十三讲) ——kryptonDomainUpDown

今天介绍的Krypton控件中的kryptonDomainUpDown。下面介绍控件的外观属性和Item属性&#xff1a;Cursor属性&#xff1a;表示鼠标移动过该控件的时候&#xff0c;鼠标显示的形状。属性值如下图所示&#xff1a;Text属性&#xff1a;表示控件的显示文本内容&#xff0c;属性值为…

Apache HTTP Server <2.4.56 mod_proxy_uwsgi 模块存在请求走私漏洞(CVE-2023-27522)

漏洞描述 Apache HTTP Server 是一个Web服务器软件。 该项目受影响版本存在请求走私漏洞。由于mod_proxy_uwsgi.c 中uwsgi_response方法对于源响应头缺少检查&#xff0c;当apache启用mod_proxy_uwsgi后&#xff0c;攻击者可利用过长的源响应头等迫使应转发到客户端的响应被截…

单例模式(设计模式详解)

单例模式 描述 单例模式是一种创建型模式&#xff0c;它的目的是确保一个类只有一个实例&#xff0c;并提供全局访问点。这个实例可以被多个客户端共享&#xff0c;从而避免创建多个实例所带来的资源浪费和不必要的复杂性。 实现 懒汉模式 public class LasySingleton {priv…

数以千计的网站使用的FTP凭证被劫持

云安全初创公司 Wiz 警告说&#xff0c;一场广泛的重定向活动已经导致数千个针对东亚受众的网站使用合法的 FTP 凭据遭到破坏。 在许多情况下&#xff0c;攻击者设法获得高度安全的自动生成的 FTP 凭据&#xff0c;并使用它们劫持受害网站&#xff0c;将访问者重定向到成人主题…

[学习笔记] 3. 算法进阶

算法进阶视频地址&#xff1a;https://www.bilibili.com/video/BV1uA411N7c5 1. 贪心算法 贪心算法&#xff08;又称贪婪算法&#xff09;&#xff0c;是指在对问题求解时&#xff0c;总是做出在当前看来是最好的选择。也就是说&#xff0c;不从整体最优上加以考虑 —— 所做…

java零基础入门(1)

java零基础入门一、JRE和JDK1.1 JRE1.2 JDK1.3 IDK&#xff0c;JRE&#xff0c;JVM三者的包含关系二、CMD2.1 打开CMD2.2 常用CMD命令2.2.1 盘符名称 冒号2.2.2 dir2.2.3 cd 目录2.2.4 cd ..2.2.5 cls2.2.6 exit2.2.7 cd \2.2.8 cd \目录\目录\目录\目录2.3 利用快捷cmd打开 Q…

泰山众筹电商模式的分析

泰山众筹模式是电商平台营销玩法&#xff0c;市场上高活跃度的现象也证实了众筹模式的口碑&#xff0c;结合社交电商的模型&#xff0c;会员和产品销量都会得到飞跃&#xff0c;并且这样结合以后&#xff0c;泰山众筹模式也会更长久、合理&#xff0c;以及可持续。 泰山众筹模…

传输层——TCP协议

目录 一.TCP协议介绍 1.1简介 1.2TCP协议格式 32位序号/32位确认号 标志位 1.3tcp的发送和接收缓冲区 1.3.1介绍 1.3.2窗口大小 1.4超时重传 二.连接管理 2.1三次握手 2.2三次握手的状态变化 2.3为什么是三次握手&#xff1f; 2.4套接字与三次握手关系 2.5四次挥手…

C++11:类的新功能和可变参数模板

文章目录1. 新增默认成员函数1.1 功能1.2 示例2. 类成员变量初始化3. 新关键字3.1 关键字default3.2 关键字delete补充3.3 关键字final和override4. 可变参数模板4.1 介绍4.2 定义方式4.3 展开参数包递归展开参数包优化初始化列表展开参数包逗号表达式展开参数包补充5. emplace…

华为OD机试用Python实现 -【报数游戏】2023Q1 A卷

华为OD机试题 本篇题目:报数游戏题目输入输出示例 1输入输出示例 2输入输出Code代码编写思路最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解

会声会影2023旗舰版新功能介绍,Corel VideoStudio Ultimate2023以及电脑系统配置要求

会声会影2023中文旗舰版功能非常强大的视频编辑软件&#xff0c;非常专业的使用效果&#xff0c;会声会影2023中文版可以针对剪辑电影进行使用&#xff0c;非常强大的色彩校正方式&#xff0c;无论什么光线下进行拍摄&#xff0c;都可以通过后期进行调整&#xff0c;并且里面超…

Python SEO采集海量文本标题,用倒排索引找出“类似的标题“代码实现

Python SEO采集海量文本标题,用倒排索引找出“类似的标题“代码实现 作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!😄 一、说明 假设这个是采集到的海量文本标题: 现在要判断找到的这个标题 title = "拜登称特朗普拒绝承认选举…

C语言实验小项目实例源码大全订票信息管理系统贪吃蛇图书商品管理网络通信等

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;c项目 获取完整源码源文件视频讲解环境资源包文档说明等 包括火车订票系统、学生个人消费管理系统、超级万年历、学生信息管理系统、网络通信编程、商品管理系统、通讯录管理系统、企业员工管理系统、贪吃蛇游戏、图书管理…

再见 ETHDenver 2023

我们来一起回顾Web3中规模最大&#xff0c;持续时间最长的以太坊史诗级建造周我们正在庆祝#YearoftheSpork&#xff0c;并借助 Web3 中最大的以太坊社区活动之一拉开了黑客马拉松赛季的序幕。ETH Denver 旨在围绕一个共同的目标聚集了志同道合的人&#xff0c;我们非常高兴今年…

开学新装备 - 学生党是否该入手 MacBook

学生党是否该入手 macbook 这个问题&#xff0c;相信许多人在许多社区都有看到过类似讨论。只不过&#xff0c;许多讨论都掺杂了信仰、智商税、不懂、不熟悉未来需求等各种因素&#xff0c;导致内容空洞价值不大。这篇文章&#xff0c;抛开了所有非理性因素&#xff0c;详细的告…

创建第一个QT程序

系列文章目录 QT学习与实战 创建第一个QT程序系列文章目录一、创建第一个QT程序1.1Location(项目简介和位置)1.2Kits(构建套件)1.3Details(类的信息)1.4汇总二、常用操作2.1显示文件分类2.2代码分栏三、代码分析四、总结一、创建第一个QT程序 1.1Location(项目简介和位置) 创…

2.进程和线程

1.进程1.1 终止正常退出(自愿)出错退出(自愿)严重错误(非自愿)被其他进程杀死(非自愿)1.2 状态就绪态&#xff1a;可运行&#xff0c;但因为其他进程正在运行而暂时停止阻塞态&#xff1a;除非某种外部事件发生&#xff0c;否则进程不能运行1.3 实现一个进程在执行过程中可能被…