【Jmeter 性能测试】
下载与安装
Jdk
下载(官网):https://www.oracle.com/java/technologies/javase-downloads.html
下载(国内):http://www.sousou88.com/spec/java_openjdk.html
安装:一直下一步即可,安装位置可以自定义
Jmeter
下载:https://jmeter.apache.org/download_jmeter.cgi
安装:解压即可
环境配置
Jdk
新建JAVA_HOME
变量名:JAVA_HOME
变量值:D:\testapp\Java\jdk1.8.0_201;(JDK的安装路径)
新建CLASSPATH
变量名:CLASSPATH
变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\lib\servlet-api.jar;(注意:前面的点表示当前目录,变量之间用分号隔开)
编辑Path
变量值:%JAVA_HOME%\bin;
Jmeter
新建JMETER_HOME
变量名:JMETER_HOME
变量值: D:\testapp\apache-jmeter-5.3; (jmeter的安装路径)
编辑CLASSPATH变量
变量值:%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-2.0.jar;
编辑Path
变量值:%JMETER_HOME%\bin;
基本使用
启动
在bin目录下找到“jmeter.bat”文件双击启动,或者在cmd命令窗口输入jmeter回车启动
启动后此窗口不要关闭,否则jmeter图形界面也会关闭
创建测试任务
创建线程组
创建取样器-HTTP请求
添加被测接口
添加“察看结果树”和“聚合报告”,以便分析结果
添加响应断言
参数化:CSV、用户参数、用户定义变量、函数助手
为什么要做参数化?
1、我们在测试过程中需要考虑不同的输入组合,来覆盖不同的测试范围
2、系统中往往存在一些有唯一性校验的接口,不允许重复录入关键字段(比如: 用户名,身份证…),针对这些有唯一性校验的接口,需要在每次运行时动态输入不同的数据
关联:正则表达式提取器、边界提取器
什么是关联:关联就是上一个接口的返回值用于下一个接口的请求中。在应用业务接口中,完成一个业务功能时,有时候一个接口可能不满足业务的整个流程逻辑,需要多个接口配合使用,并且在A接口调用后,我们需要在A接口的返回数据中拿到需要的字段,并且在调用B接口的时候,作为B接口请求参数传递给B接口,拿到后续响应的返回数据。
Jmeter性能测试
安装插件
下载地址:https://jmeter-plugins.org/install/Install/
此jar包作用是在jmeter中增加Plugins Manager模块,可以在里面下载所有扩展的插件jar包,同时也可以对插件进行管理。下载后将包放入D:\testapp\apache-jmeter-5.3\lib\ext路径中:
重启Jmeter出现Plugins Manager模块说明安装成功
Installed Plugins(已安装的插件):即插件jar包中已经包含的插件,可以通过选中勾选框,来使用这些插件;
Available Plugins(可下载的插件):即该插件扩展的一些插件,可以通过选中勾选框,来下载所需要的插件;
Upgrades(可更新的插件):即可以更新到最新版本的一些插件,可以通过点击截图右下角的Apply Changes and Restart Jmeter按钮来下载更新;
需要安装的插件
在可选择安装的插件中勾选需要安装的插件后,选择右下角的:Apply Changes and Restart JMeter,等待安装完成就可以了(注意:最好一次安装一个,如果勾选过多会安装失败,此外安装成功后Jmeter会自动重启,我们等它重启后继续安装就行)
创建性能测试任务
创建Stepping Thread Group线程
Transactions per Second:每秒事务数,服务器每秒处理的事务数
Hits per Second:每秒点击量
PerfMon Metrics Collector:服务器性能监测控件,该插件可以在性能测试中实时监控服务器的各项资源使用,包括CPU,Memory,Network,I/O等等
需要下载三个文件,其中JMeterPlugins-Standard和JMeterPlugins-Extras是客户端的,ServerAgent是服务端的。
客户端的下载地址:https://jmeter-plugins.org/downloads/old/
服务端的下载地址:https://github.com/undera/perfmon-agent
JMeterPlugins-Standard和JMeterPlugins-Extras包放到jmeter安装文件中的lib/ext中,将ServerAgent上传到被测服务器,Windows环境双击ServerAgent.bat启动(注意:必须在服务器上启动ServerAgent,我们在JMeter上使用PerfMon Metrics Collector才能收集到数据)
Jmeter分布式压测
简介
在工作中使用jmeter做大并发压力测试的场景下,单机受限内存、CPU、网络IO,会出现服务器压力还没有上去,但是压测服务器已经由于模拟的压力太大死机了。为了让jmeter工具提供更强大的负载能力,jmeter提供了多台机器同时产生负载的机制。
原理
比如我在控制机配置线程数为10,循环次数为100,也就是会对测试服务器发起1000次请求,我有3台负载机,如果我在server端选择远程启动压力测试,那么每台负载机都会对测试服务器发起1000次请求,那么这次压力测试产生的请求就是1000*3=3000
配置控制机和负载机
负载机上bin目录下打开 jmeter.properties 文件修改 server.rmi.ssl.disable=true;server_port = 1099;server.rmi.localport = 1099(1099是默认端口,建议自定义,避免端口被占用)
控制机上 jmeter.properties 文件修改 server.rmi.ssl.disable=true ;remote_hosts = slave机的ip地址加端口,如果是多台,则用逗号分隔
在负载机上启动jmeter-server服务
在控制机 运行-->远程启动
如果你的环境在选择全部启动之后,没有报错,且发起请求数量和负载机服务器数量一致,说明jmeter分布式压力测试环境搭建成功(也可以通过查看聚会报告样本数和通过查看日志判断是否成功)
注意
事项
(1)master统计的结果是所有slave的数据之和,分布式测试总样本数=线程数 x 循环次数 x 负载机数量
(2)若master和slave无法连接,可能是防火墙的问题,要关闭系统防火墙
(3)做为控制机本身是有消耗的,如果加入测试会影响结果,所以控制机只做收集不施压
(4)分布式多台机器最好都在同一子网下,而且时间要同步
(5)每台机器的jdk、jmeter版本要同步
(6)如果测试有参数化,需要将脚本复制一份到每台负载机上,且读取路径保持一致
踩过的坑
1、负载机能够starting和finished,有日志输出,但控制机拿不回结果,窗口没有日志输出
解决:双击控制机的jmeter-server.bat文件,检查endpoint后的IP地址是否是本地物理机的ip地址,如果不是物理机的IP,则很有可能是虚拟网卡IP,去windows master机上,运行-->cmd-->ipconfig,找到这个ip地址,查看它对应的网卡叫什么名字,根据对应的名字去windows master网络连接中去找 打开 网络和Internet > 更改适配器选项 > 选择虚拟网卡 > 禁用
也可以通过执行机 jmeter-server.log 文件检查原因
2、控制端和执行端网络要互通,能ping通才行
解决:(1)检查各机器防火墙是否关闭,如果开启请关闭
以管理员身份运行cmd:
关闭防火墙:NetSh Advfirewall set allprofiles state off
查看防火墙状态:Netsh Advfirewall show allprofiles
(2)查看一下路由器设置是否禁用了Ping
3、没有设置“java.rmi.server.hostname”导致远程异常
解决:打开jmeter-server文件,在倒数第二行“Djava.rmi.server.hostname”处加上负载机的IP地址,在负载机上加上控制机的IP地址。根据对 jmeter master/slave 通信机制的理解,不仅 master 主动向 slave 通信, slave 也向 master 主动通信,所以自然要知道彼此的地址,尤其在 slave 节点多网卡的时候,一般都要设置