一、gui
jmeter的gui主要用来调试脚本
1、先gui创建脚本
先做一个脚本
演示:如何做混合场景的脚本?
用211的业务比例
①启动数据库服务
数据库服务:包括mysql、redis
mysql端口默认3306
bash
netstat -lntp | grep 3306
处于监听状态,6379是redis的默认端口
bash
netstat -lntp | grep 6379
项目服务端口18089
bash
netstat -lntp | grep 18089
②访问接口文档swagger
211可以转换出两个压测的业务
一个是注册,一个是注册登录添加商品两个分别是50%
③添加线程组
jmeter---添加线程组--添加--线程--用户--线程组
转换出两个压测业务
④添加吞吐量控制器
jmeter---添加-逻辑控制器--吞吐量控制器
转换出两个压测业务.第一个压测业务是包括注册、登录、添加商品
第二个压测时业务是注册
各自50%
⑤添加取样器http请求
jmeter---添加-取样器--http请求
转换出两个压测业务
第一个压测业务是包括注册、登录、添加商品
第二个业务是注册
根据注册swagger、来写,入参
一般插入id可以不用填写
addtime也可以不用填写
复制粘贴入参数据到jmeter中
路径根据url
⑥添加http信息头管理器、
都是传json
⑦添加http请求默认值
根据接口文档填写ip和端口
⑧添加监听器,查看结果树
⑨添加断言
断言最好都添加上
二、非gui
-n非gui模式执行jmeter
-t执行测试文件所在的位置,指定要运行jmeter的脚本,不在当前路径,需要将完整路径写出
-l指定生成的结果文件,即就是jtl文件
-e测试结束后,生成测试报告
-o指定测试报告html的存放位置
-r远程启动
1.单机压力机
①申请压力机
linux压力机上安装jdk、jmeter
在usr/local下安装
直接将window上的jmeter上传到linux压力机上,因为调试脚本涉及到的插件也可用上
②脚本上传到压力机
注:如果脚本涉及到csv参数文件,需要将csv'参数文件上传至linux下jmeter的bin目录下
上传前需要将聚合报告,监听器禁用
5个线程,每30s加一个,即就是150
持续时间需要大于Rang up时间150,再运行50秒,就设置200
jmeter上传成功后验证一下jmeter版本、是否可用
③初始化
有两个地方
第一个,存放测试脚本的路径需要创建一个存放html报告的目录
在运行脚本之前,res目录下必须为空
第二,再不考虑存量数据的情况下,将数据库表中的数据清理
④执行脚本
⑤查看结果
结果
在13s内完成548次请求
打开聚合报告
ko失败的请求数量
resopntime响应时间
tps
怎么查看jtl文件?
jtl可以在任意监听器打开,如查看结果树、聚合报告、tps、响应时间。
如在聚合报告中打开,点击浏览
如tps、响应时间
先看tps
添加tps
点击浏览
响应时间
2.分布式
有的时候一个压力机达不到目标,就需要用到分布式
毕竟单机资源有限,比较难以支持较大的并发,单机的压力机也是有瓶颈
2.1分布式原理
官网:https://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.html
一台服务机作为控制机
其余机器都是作为负载机
targe请求的服务
控制器通过发送信号远程控制负载机的启动和停止,同时收集负载机数据及汇总
负载机主要是启动线程来访问服务器,及被压测服务器target
一般在worker一般是启动jmeter-server控制机远程控制负载机,负载机启动线程请求target获取数据后回传给控制机
分布式时脚本放在哪里?
一个controller多个worker
执行非gui时,脚本传到服务器上,现在是分布式,脚本应该传到哪里?
会将脚本传到controller控制机上,执行时会把脚本发到每个负载机即每个worker,负载获取到脚本后开始执行脚本,执行完后将数据传给控制机进行汇总。
2.2分布式压测注意事项
防火墙需要进行关闭,防火墙若不关闭,端口需要打开。
所有的客户端要在同一子网上。
确保jmeter可以访问server
确保jmeter与java版本一样
禁用ssl
2.3环境准备
需要3个虚拟机
用 181做Controller(控制机)
用182,183做Worker (负载机)
同时这三个虚拟机都要安装jdk,jmeter
查看jdk版本
三台虚拟机安装jmeter
本机的jmeter传到虚拟机的usr/local目录下
上传完后查看jmeter版本
2.4 分布式配置
①Worker
182、182
先备份配置文件jmeter.properties
server_port可以修改,也可以不修改默认为1099
禁用ssl
server.rmi.ssl.disable=false,将false改为true
启动jemter
./jmeter-server
在182上看端口是否处于监听状态
验证
控制机telnet负载机,看端口通不通
②Controller
配置控制机前先在window上的jmeter上进行调试
win:用于调试
先备份配置文件jmeter.properties
默认是本机作为负载机
现在的负载机是远程负载机,将remote_hosts=127.0.0.1改成remote_hosts=192.168.117.182:1099
这里必须写远程负载机的ip和端口,多个就以逗号分隔
禁用ssl
将server.rmi.ssl.disable=false改成server.rmi.ssl.disable=true
先通过本机调试一下
jmeter重启一下,重新读取配置文件
在window上调试完后就去linux下进行配置
181上进行配置
先备份配置文件jmeter.properties
现在的负载机是远程负载机,将remote_hosts=127.0.0.1
改成remote_hosts=192.168.117.182:1099
这里必须写远程负载机的ip和端口,多个就以逗号分隔
server.rmi.ssl.disable=false
将server.rmi.ssl.disable=false
改为server.rmi.ssl.disable=true
脚本传到控制机上,会自动将脚本分发到各个负载机上。
单独的测试单场景登录
上传完脚本、执行脚本
通过远程负载去进行执行
bash
/usr/local/apache-jmeter-5.1.1/bin/jmeter -n -r -t test.jmx
每个work负载机(压力机)5个线程,到总的控制机汇总10个线程
环境准备
两个虚拟机。1个master,两个slave,Windows本机作为1个master,slave就用虚拟机。
原理:https://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.html
出现的问题:
java.rmi.RemoteException: Cannot start. localhost.localdomain is a loopback address
Created remote object: UnicastServerRef2 [liveRef: [endpoint:127.0.0.1:43474,objID:[-5a8dd143:17e2852fe88:-7fff, 3673082414768940798]]]
Server failed to start: java.rmi.RemoteException: Cannot start. localhost.localdomain is a loopback address.
An error occurred: Cannot start. localhost.localdomain is a loopback address.
异常信息:服务器启动异常:java远程方法调用抛出异常:无法启动服务。localhost.localdomain是一个本地环回地址
通过hostname命令获取到的主机名是localhost
通过命令cat /etc/hosts查看hosts配置,localhost localhost.localdomain localhost4...指向的是127.0.0.1
解决方法:
指定远程服务器主机的IP地址(rmi.server.hostname)
通过终端命令指定来启动
./jmeter-server -Djava.rmi.server.hostname=192.168.2.2