Jmeter的使用
一、Jmeter元件
1.测试计划
测试计划可以对线程组进行控制
2.线程组
线程组参数详解
- 线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
- Ramp-Up Period(in seconds)准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为10,准备时长为2,那么需要2秒钟启动10个线程,也就是每秒钟启动5个线程。
- 循环次数:每个线程发送请求的次数。如果线程数为10,循环次数为100,那么每个线程发送100次请求。总请求数为10*100=1000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。
- Delay Thread creation until needed:直到需要时延迟线程的创建。
- 调度器:设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远)
持续时间(秒):测试持续时间,会覆盖结束时间
启动延迟(秒):测试延迟启动
3.取样器
3.1http请求
4.逻辑控制器
4.1switch控制器
跳转到其中一个子节点执行
Switch Value:0 执行第一个子节点
4.2仅一次控制器
在每个线程内,该控制器下的内容只会被执行一遍,无论循环多少次,都只执行一遍。嵌套在循环控制器之内时是个例外,每个线程组循环都会被执行一遍
4.3吞吐量控制器
比如说有一种场景是,10个并发里,有2个事操作业务A,有8个是操作业务B,要模拟这种业务场景,则可以通过吞吐量控制器来模拟(还可以通过两个线程组进行控制)
5.前置处理
5.1用户参数
一般很少用,通常使用CSV参数化代替
6.后置处理
正则表达式提取器
常用正则表达式:(.+?)
7.配置原件
http信息头管理器
配置请求头:
例如:User-Agent、Cookie等
http请求默认值
一般情况下,我们在一个项目中调用的接口中域名、端口等都是相同的。当我们创建多个HTTP 请求时,由于这些数据是必填项,所以,我们就需要不停地填写相同的数据。如果项目进行过程中出现了更改域名、更改端口号等情况,我们又需要把每一个请求中的数据都做更改,这样看上去似乎有些麻烦了,这时可以使用http请求默认值。
CSV数据文件设置
http cookie管理器
- Cookie 管理器就像一个 web 浏览器那样存储并发送 cookie。
如果你有一个 HTTP 请求,其返回结果里包含一个 cookie,那么 Cookie 管理器会自动将该 cookie 保存起来,而且以后所有的对该网站的请求都使用同一个 cookie。每个 JMeter 线程都有自己独立的"cookie 保存区域"。因此,如果你在测试网站的时候使用了 Cookie 管理器来存储 session 信息的话,那么每个 JMeter 线程将会拥有自己独立的 session。注意这些 cookie 不会显示在 Cookie 管理器里,你可以通过察看结果树来对其进行察看。 - 手工添加一个 cookie 到Cookie 管理器。注意如果这么做,这个 cookie 将被所有 JMeter 线程所共享。这种方式用于创建有很长过期日期的 cookie。
用户定义的变量
用户自定义变量可以让我们随机选取变量,从而达到在性能测试过程中可以随机选取变量的目的。但是在实际使用中发现一个问题,并不试用于所有场景,比如登录
8.定时器
同步定时器
每次释放的线程数量。如果设置为0,等同于设置为线程租中的线程数量。
超时时间为0时,默认无超时限制。
定时器的作用域
1、定时器是在每个sampler(采样器)之前执行的,而不是之后(无论定时器位置在sampler之前还是下面);
2、当执行一个sampler之前时,所有当前作用域内的定时器都会被执行;
3、如果希望定时器仅应用于其中一个sampler,则把定时器作为子节点加入;
4、如果希望在sampler执行完之后再等待,则可以使用Test Action;
固定定时器
作用:通过ThreadDelay设定每个线程请求之前的等待时间(单位为毫秒)。注意:固定定时是有作用域的,放到线程组下其作用域是所有请求都会延迟固定器设置的时间,如果放到请求内,作用域是单个请求延迟时间(常用)。
9.断言
响应断言
10.监听器
查看结果树
聚合报告
用表格查看结果
11.非测试原件
http代理服务器
二、Jmeter常用技巧
1.脚本录制
1)测试计划中添加非配置元件-http代理服务器
2)http代理服务器设置Jmeter代理端口
3)测试计划中添加线程组,并在http代理服务中选择该线程组作为目标控制器
4)浏览器中设置代理服务器,ip为Jmeter所在主机的ip地址,端口为http代理服务器设置的端口
5) 启动http代理,浏览器中访问相关页面,jmeter会自动录制该操作过程的请求信息。
2.参数化
CSV数据文件设置、用户参数、随机数
随机数的使用
3.关联技术
参见前文正则表达式提取器
4.插件的使用
插件的安装
jmeter官网下载jmeter-plugins-manager.jar放在jmeter的lib/ext目录下,启动Jmeter在选项中即可看到插件功能
服务器性能检测
1.Jmeter安装插件PerMon
2.服务器(有JDK环境)安装ServerAgent
启动ServerAgent: ./startAgent.sh
常见问题:
1.权限
2.端口
3.防火墙
解决方法:
- chmod 775 startAgent.sh
- 2.更改启动端口:java -jar ./CMDRunner.jar --tool PerfMonAgent --udp-port 7777 --tcp-port 7777
- 关闭防火墙:service iptables stop
防火墙设置一下白名单,打开配置文件命令:vi /etc/sysconfig/iptables
添加这行命令:-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 7777 -j ACCEPT
3.生成测试报告
添加环境变量
JMETER_HOME:C:\Program Files\Java\jdk1.8.0_221
path:%JMETER_HOME%\bin
CMD输入(例如):
jmeter -n -t D:\test.jmx -l D:report.jtl -e -o D:report.html
三、Jmeter分布式
jmeter内存溢出解决:jemter.bat下:
set HEAP=-Xms512m -Xmx512m set NEW=-XX:NewSize=256m -XX:MaxNewSize=256m #将其修改为: set HEAP=-Xms512m -Xmx4096m set NEW=-XX:NewSize=256m -XX:MaxNewSize=512m
同样的csv文件在所有机器上路径一致
代理机与主机设置:bin目录下jemter.propreties
remote_hosts=127.0.0.1,192.168.1.4 # ip地址 server_port=1099 # 端口一致 server.rmi.ssl.disable=true
代理机启动:jmeter-server.bat
主机启动:先启动jmeter-server.bat,然后启动ApacheJMeter.jar