【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 节点多网卡的时候,一般都要设置

 

 

posted @ 2021-09-15 14:50  情调丶  阅读(378)  评论(0编辑  收藏  举报