【初识JMeter】
JMeter是一个开源的压力测试工具,由Apache组织开发,基于Java编写。它最初被设计用于Web应用测试,但现在已经扩展到其他测试领域,可以用于测试静态和动态资源,如静态文件、Java小服务程序、CGI脚本、Java对象、数据库、FTP服务器等。
Apache JMeter TM是纯Java 开源软件,最初由Apache Software Foundation的Stefano Mazzocchi开发,旨在负载测试功能行为和测量性能。 您可以使用JMeter分析和测量Web应用程序或各种服务的性能。 性能测试意味着针对重负载,多个和并发用户流量测试Web应用程序。 JMeter最初用于测试Web应用程序或FTP应用程序。 如今,它也用于功能测试,数据库服务器测试等。
【JMeter优点】
开源 :JMeter完全免费,允许开发人员使用源代码进行开发
友好的GUI :JMeter非常易于使用,并且不需要时间来熟悉它
独立于平台 :JMeter是100%纯Java桌面应用程序。 所以它可以在多个平台上运行
完整的多线程框架 。 JMeter允许通过单独的线程组同时和同时采样不同的函数
可视化测试结果:测试结果可以以不同的格式显示,如图表,表格,树和日志文件
易于安装 :您只需复制并运行* .bat文件即可运行JMeter。 无需安装。
高度可扩展 :您可以编写自己的测试。 JMeter还支持可视化插件,允许您扩展测试
多种测试策略 :JMeter支持许多测试策略,如负载测试 ,分布式测试和功能测试 。
模拟 :JMeter可以使用并发线程模拟多个用户,对正在测试的Web应用程序造成沉重负担
支持多协议 :JMeter不仅支持Web应用程序测试,还评估数据库服务器性能。 JMeter支持所有基本协议,如HTTP,JDBC,LDAP,SOAP,JMS和FTP
录制和回放 - 在浏览器上记录用户活动,并使用JMeter在Web应用程序中模拟它们
脚本测试 :Jmeter可以与groovy, Bean Shell和Selenium集成进行自动化测试。
【JMeter也是一种性能测试工具:性能测试指标】
性能测试是一个全栈工程师/架构师必会的技能之一,只有学会性能测试,才能根据得到的测试报告进行分析,找到系统性能的瓶颈所在,而这也是优化架构设计中重要的依据。
性能测试就是通过特定的方式对被测试系统按照一定测试策略施加压力,获取该系统的响应时间、TPS、吞吐量、资源利用率等性能指标,来检测系统上线后能否满足用户需求的过程。
性能指标(TPS QPS RPS形容服务器,HPS形容客户端(用户每秒点击率))
(1)虚拟用户数
(2)并发数
(3)事务
(4)场景:性能测试的用例
(5)响应时间
(6)TPS:一定时间能处理的事务数(如果事务只有一个接口,TPS=吞吐量)
(7)QPS:每一秒的查询率(针对查询接口,增删改跟他没关系,一般是用来描述数据库的)
(8)吞吐量:衡量网络成功传输的数量
(9)资源利用率:CPU 内存 硬盘 网络
①QPS
QPS,全名 Queries Per Second,意思是“每秒查询率”,是一台服务器每秒能够响应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。②TPS
TPS 即 Transactions Per Second的缩写,每秒处理的事务数目。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。
客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数,最终利用这些信息作出的评估分。Qps 基本类似于 Tps,但是不同的是,对于一个页面的一次访问,形成一个 Tps;但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入“Qps”之中。
QPS和TPS都是衡量一个系统性能的重要指标之一。
【JMeter也是一种接口测试工具:接口测试基础】
目前市面上的三类接口
(1)基于webservice协议接口,通过xml传输数据(比较老)
(2)基于dubbo协议接口,通过json传输数据(微服务)
(3)基于http协议接口(Restful大部分是这种协议),传输json数据(最多)
http协议:请求和响应
(1)请求:请求方式,请求路径,请求头,请求数据
(2)响应:响应码,响应信息,响应头,响应数据
接口约定
(1)请求数据通过json格式传递,需要添加一下请求头
列如:Content-Type:application/json(Postman默认是这样的,Jmeter需要我们手动设置)
(2)除注册登录接口外,请求时需要提供token
(3)token通过登录获取,需要添加以下请求头
列如:Authorization:Bearer abc 其中abc为token值
(4)2XX状态码表示请求成功
(5)4XX状态码表示请求失败,并通过detail字段返回原因
【JMeter工作流程】
JMeter的基本工作流程如下图所示
JMeter模拟一组用户向目标服务器发送请求,并通过图形图表返回目标服务器的统计信息
Introduction to JMeter
完成JMeter的工作流程,如下图所示
【安装JMeter】
一、安装前必要的配置
1.桌面点击菜单栏搜索【cmd】,然后打开命令提示符
在安装Jmeter之前,需要检查电脑是否有java的JDK,需要JDK1.8以上的版本支持。
2.输入java -version命令
可以看到我这里安装的是java JDK23.0.1最新的版本。
没有安装JDK的可以看我的这篇文章:JAVA最新版本详细安装教程(附安装包)_java安装-CSDN博客
二、安装:Jmeter
下载地址:Apache JMeter - Download Apache JMeter
1.首先在D盘创建【Jmeter】文件夹,把下载的【Jmeter】压缩包移动到此文件夹
2.右键选择解压到【apache-jmeter-5.6.3\(E)】
3.解压之后会有【apache-jmeter-5.6.3】文件夹
以下是JMeter目录的描述及其重要性 JMeter目录包含许多文件和目录
/bin: 包含JMeter脚本文件,用于启动JMeter
/docs: JMeter文档文件
/extras:与ant相关的额外文件
/lib/: 包含JMeter所需的Java库
/lib/ext:包含JMeter和协议的核心jar文件
/lib/junit: 用于JMeter的Junit库
/printable_docs:
4.右键桌面【此电脑】,点击【属性】
5.下滑找到并点击【高级系统设置】
6.点击环境变量
7.点击【系统变量(S)】下面的【新建】
8.新建变量和变量名
JMETER_HOME
D:\Jmeter\apache-jmeter-5.6.3
9.确认无误后点击【确定】
10.再次点击【系统变量(S)】下面的【新建】
11.新建变量和变量名
CLASSPATH
;%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar; %JMETER_HOME%\lib\jorphan.jar;
12.确认无误后点击【确定】
13.在系统变量(S)下滑找到变量【Path】,并点击【编辑】
14.点击【新建】
15.新建变量名
%JMETER_HOME%\bin
16.确认无误后点击【确定】
17.点击确定保存更改
三、验证:Jmeter
1.桌面开始菜单搜索【cmd】,打开命令提示符
2.输入【jmeter】并按下回车键(Enter)
3.如果是下图提示则表示安装成功
四、启动:Jmeter【我用的方法是配置好环境变量后直接cmd>jmeter】
你可以用3种模式启动JMeter
1、GUI模式
如果你使用的是Windows,只需运行/bin/jmeter.bat文件,即可在GUI模式下启动JMeter。
2、服务器模式服务器模式用于分布式测试。这种测试的工作方式是客户端-服务器模式。在这种模式下,JMeter以服务器模式运行在服务器计算机上。在客户端计算机上,JMeter以GUI模式运行。
要启动服务器模式,需要运行bin\jmeter-server.bat文件,如下图所示
3、命令行模式
在GUI模式下,JMeter会消耗很多计算机内存。为了节省资源,你可以选择在没有GUI的情况下运行JMeter。要做到这一点,请使用以下命令选项
$jmeter -n -t testPlan.jmx -l log.jtl -H 127.0.0.1 -P 8000
以上内容有待考证
五、怎么把Jmter设置为中文
1.关闭打开的Jmeter软件和所以命令提示符
进入以下安装目录并找到【jmeter.porperties】文件:
D:\Jmeter\apache-jmeter-5.6.3\bin
2.右键选中【打开方式(H)】
3.点击【更多应用】
4.选中记事本,然后点击【确定】
5.按住Ctrl+F搜索【language=en】
6.把【en】修改成【zh_CN】
7.删除【language=zh_CN】前面的#号
一定要删除#号配置才会生效。
7.按住Ctrl+S保存,确认无误之后关闭窗口
8.重新打开命令提示符,重新输入【jmeter】并按下回车键(Enter)
9.配置中文界面成功
原文链接:https://blog.csdn.net/ZHOUPUYU/article/details/144102542
【使用JMeter】
JMeter组件
(1)测试计划:JMeter测试的起点,容器。是使用 JMeter 进行测试的起点,它是其它 JMeter测试元件的容器。
(2)线程组:代表一定的用户,可以用来模拟用户并发发送请求。实际的请求内容在Sampler中定义,它被线程组包含。
(3)配置元件:配置请求。维护Sampler需要的配置信息,并根据实际的需要修改请求的内容。
(4)前置处理器:请求之前的操作。负责在请求之前工作,常用来修改请求的设置
(5)定时器:演示请求。负责定义请求之间的延迟间隔。
(6)逻辑控制器:处理请求逻辑。可以自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。
(7)取样器:是性能测试中向服务器发送请求,记录响应信息、响应时间的最小单元,如:HTTP Request Sampler、FTP Request Sample、TCP Request Sample、JDBC Request Sampler等,每一种不同类型的sampler 可以根据设置的参数向服务器发出不同类型的请求。
(8)后置处理器:请求之后的操作。负责在请求之后工作,常用获取返回的值。
(7)断言:判断请求结果是否正常。用来判断请求响应的结果是否如用户所期望的。
(10)监听器:收集测试结果。负责收集测试结果,同时确定结果显示的方式。
组件的作用域
(1)组件可以作用于同级组件
(2)组件可以作用于同级组件下的子组件
(3)组件可以作用于父组件
线程组可以等价为PostMan里面的Collections,也就是集合,那么在一个线程组里面可以有很多的API测试用例
添加一个线程组的方法:
可根据需求设置线程属性的线程数、线程次数
添加HTTP请求(取样器)
根据需求填写服务器IP、端口号、请求方式、路径,内容编码一般用utf-8及参数信息
添加HTTP信息头管理器
添加对应参数
添加查看结果数、汇总报告、聚合报告(监听器)
查看结果
响应内容显示乱码解决方法
路径:apache-jmeter-5.5\bin\jmeter.properties文件的
sampleresult.default.encoding参数,此行默认是注释的修改为utf-8重启Jmeter
2024最新最全jmeter工具使用:jmeter 命令行用法、文件解读、生成报告_jmeter命令-CSDN博客
JMeter 5.5 使用详解(持续更新中......)-CSDN博客(非常详细↓)
引言
Jmeter 核心组件
Jmeter 程序设计通用规范
测试计划
一、线程(用户)
1.1、线程组
1.2、setUP 线程组
1.3、tearDown 线程组
二、配置元件
2.1、CSV 数据文件设置(CSV Data Set Config)
2.2、HTTP信息头管理器
2.3、HTTP Cookie管理器(HTTP Cookie Manager)
2.4、HTTP缓存管理器
2.5、HTTP请求默认值
2.6、计数器(Counter)
2.7、随机变量(Random Variable)
2.8、用户定义的变量(User Defined Variables)
2.9、Java默认请求(Java Request Defaults)
2.10、HTTP授权管理器(HTTP Authorization Manager)
2.11、DNS缓存管理器(DNS Cache Manager)
2.12、FTP默认请求(FTP Request Defaults)
2.13、JDBC Connection Configuration
2.14、总结
2.13.1、Jmeter 变量作用域和规则
2.13.2、配置元件使用小结
三、监听器
3.1、查看结果树(View Results Tree)
3.2、汇总报告(Summary Report)
3.3、聚合报告(Aggregate Report)
3.4、后端监听器(Backend Listener)
3.5、汇总图(Aggregate Graph)
3.6、断言结果(Assertion Results)
3.7、生成概要结果(Generate Summary Results)
3.8、图形结果(Graph Results)
3.9、响应时间图(Response Time Graph)
3.10、保存响应到文件(Save Responses to a file)
3.11、简单数据写入器(Simple Data Writer)
3.12、用表格查看结果(View Results in Table)
3.13、比较断言可视化器(Comparison Assertion Visualizer)
3.14、邮件观察仪(Mailer Visualizer)
3.15、总结
3.15.1、主要监听器的场景使用比较
3.15.2、监听器输出 Jtl 文件详解
3.15.3、Jtl 文件的 html 格式输出
四、定时器
4.1、固定定时器(Constant Timer)
4.2、统一随机定时器(Uniform Random Timer)
4.3、准确的吞吐量定时器(Precise Throughput Timer)
4.4、常数吞吐量定时器(Constant Throughput Timer)
4.5、高斯随机定时器(Gaussian Random Timer)
4.6、泊松随机定时器(Poisson Random Timer)
4.7、同步定时器(Synchronized Timer)
五、前置处理器
5.1、用户参数(User Parameters)
5.2、正则表达式用户参数(RegEx User Parameters)
5.3、取样器超时(Sample Timeout)
六、后置处理器
6.1、正则表达式提取器(Regular Expression Extractor)
6.2、JSON提取器(JSON Extractor)
6.3、边界提取器(Boundary Extractor)
6.4、JSON JMESPath Extractor
6.5、CSS/JQuery提取器(CSS Selector Extractor)
6.6、XPath提取器(XPath Extractor)
6.7、XPath2 提取器(XPath2 Extractor)
6.8、结果状态处理器(Result Status Action Handler)
6.9、调试后置处理程序(Debug PostProcessor)
6.10、后置处理器小结
七、断言
7.1、响应断言(Response Assertion)
7.2、JSON断言(JSON Assertion)
7.3、大小断言(Size Assertion)
7.4、XPath2 断言(XPath2 Assertion)
7.5、断言持续时间(Duration Assertion)
7.6、HTML断言(HTML Assertion)
7.7、JSON JMESPath 断言(JSON JMESPath Assertion)
7.8、MD5Hex断言(MD5Hex Assertion)
7.9 XML断言(XML Assertion)
7.10 Xpath断言(XPath Assertion)
7.11 总结
八、取样器
8.1、HTTP请求(HTTP Request)
8.2、调试取样器(Debug Sampler)
8.3、JSR223 Sampler
8.4、WebSocket Sampler
8.5、测试活动(Flow Control Action)
九、逻辑控制器
9.1、IF 控制器(If Controller)
9.2、事务控制器(Transaction Controller)
9.3、循环控制器(Loop Controller)
9.4、While 控制器(While Controller)
9.5、临界部分控制器(Critical Section Controller)
9.6、ForEach控制器(ForEach Controller)
9.7、包含控制器(Include Controller)
9.8、交替控制器(Interleave Controller)
9.9、仅一次控制器(Once Only Controller)
9.10、随机控制器(Random Controller)
9.11、随机顺序控制器(Random Order Controller)
9.12、录制控制器(Recording Controller)
9.13、简单控制器(Simple Controller)
9.14、运行时间控制器(Runtime Controller)
9.15、吞吐量控制器(Throughput Controller)
9.16、模块控制器(Module Controller)
9.17、开关控制器(Switch Controller)
十、非测试元件
10.1、HTTP代理服务器(HTTP(S) Test Script Recorder)
总结
原文链接:https://blog.csdn.net/qq_45138120/article/details/124056704
【JMeter脚本的编写及使用】
一、jmeter脚本编写及使用
下面是jmeter编写脚本的一些详细步骤:
1、测试计划全局变量设置
进入jmeter点击已创建的测试计划,看到jmeter右方对应的测试计划全局变量的设置
【host】:被测集群对应的公网地址为:47.113.116.224,图中为内网host,推荐使用内网host进行
【thread】:定义的压测线程的大小,根据需求修改值,全局生效,即所有线程组的线程数由该值控制
【holdime】:定义的压测持续时间大小,单位为秒(s),根据需求修改值,全局生效,即所有线程组的运行时间由该值控制
【port】:接口对应的请求端口号,若请求端口不变无需修改
2、线程组参数设置
在已创建的jmeter测试计划下选中对应已创建的线程组
【线程数】:根据需求可以使用默认的全局变量设置的线程数,上一步在测试计划全局变量中设置的thread线程数默认作为这里的线程数入参,若对当前线程组有特殊需求,可以直接输入具体值作为该线程组的线程数
【Ramp-Up时间】:根据场景需求设定该参数,默认为1。这个参数的意义即接下来花费多少时间将所有测试用户(线程)添加到测试执行中,若为1000个目标线程,Ramp-up时间为1000秒: JMeter将每秒添加一个线程(User);若为1000个目标线程,Ramp-up时间为100秒: JMeter将每秒添加10个用户。
【循环次数】默认勾选永远,若不勾选,需要传入循环次数的具体值,传入了需要进行的线程时间,必勾选循环次数为永远,这样才能按照需求的时间运行完相应的线程
【持续时间】:默认为全局变量的hostTime设定的值,也可根据自己的需求更改,使用【持续时间】前提是点击勾选了【调度器】
3、请求入参设置
点击线程组展开箭头展开具体线程组的内容
【HTTP信息头管理器】:选中并右击线程组,点击添加,选择配置元件,选择【HTTP信息头管理器】
根据请求的接口设置默认不变,若接口请求头Header有变动,根据需求添加
【CSV数据文件设置】:选中并右击线程组,点击添加,选择配置元件,选择【CSV Data Set Config 】
对于某些请求的入参,需要通过读取csv文件中的数据作为接口请求的入参,需要设置文件地址,若默认禁用,则该线程此接口入参无需csv文件,若需使用自己的csv文件作为入参,请确保csv文件路径及相关参数赋值正确,关于每个组件的禁用和启用,就是鼠标选中并右击对应组件,弹出操作框会有对应的禁用/启用选项若组件被禁用即不适用该组件
【HTTP请求】:选中并右击线程组,点击添加,选择取样器,选择【HTTP请求】
在HTTP请求设置中填入全局设置中的host及port,以及需要请求的接口路径和请求方式
4、断言设置
选中需要添加断言的HTTP请求,然后鼠标右击添加,选中断言,点击JSON断言,用的比较多的为json断言,常用的json断言为断言接口返回的code参数是否为0来判断是否通过断言。
如有特殊需求还可选择其他断言方式,根据接口返回参数和压测需求进行断言。
对于dubbo接口的断言,可以使用beanshell断言,这次测试的dubbo接口都不会返回code,可以观察接口返回的错误提示,使用beanshell断言可以比较灵活捕捉到接口返回的异常信息
可以看到只要接口返回的json数据包含exceptionMessage字段则认为接口失败
然后打印出exceptionMessage字段的报错信息。
二、jmeter脚本运行及查看结果
对于jmeter脚本的运行,你可以设置所有线程组一起运行,也可以启用具体的线程组进行运行
发压的线程数取决于全局变量设置的线程数,也可以单独给具体线程设置具体线程数
1、点击测试计划的名字进入对应的测试计划设置页面,设置想要的线程数和发压时间
2、点击jmeter中的运行图标:
然后等待运行时间结束
想要查看jmeter脚本的运行结果,主要依赖这两个监听器,添加方法是选中测试计划,然后右击点击添加--->选择监听器--->点击【查看结果树】和【聚合报告】就可以看到对应的元件已经生成
3、【查看结果树】:结果树中有每个请求的结果,默认是Text,可以看到通过断言的请求是绿色✔状态的,未通过断言的请求是红色❌状态的,点击具体的请求,可以看到取样器结果,请求,和响应数据,点击响应数据即可看到接口返回的响应的具体信息;若为错误请求,我们也可以通过返回的响应数据,通过复制返回的一些报错信息,排查是请求入参的问题还是接口本身的问题
4、【聚合报告】:运行结束后会生成聚合报告
聚合报告详细展示了每个线程组请求的样本数,平均值,99线,95线,异常率等信息,一般重点关注99线,95线,tps,qps,异常率。生成的聚合报告,只有在异常率为0或者极小异常率可忽略情况下才有参考意义,聚合报告中的样本数即脚本运行时间内请求的总数,平均值是每次请求响应的平均时间,99%百分位即99线,即99%的请求响应的时间为这个,95%百分位即95线,即95%的请求响应的时间为这个,吞吐量即为单位时间内服务器能够处理的请求数量,计算qps的方法为总请求数/运行时间,或者线程数/平均响应时间。