JMeter作用
JMeter是Apache旗下的一个桌面应用,用于压力测试和性能测量。开源免费起初就是用于性能测试,主要Web端的性能。后来扩展到其他测试领域,拥有完善的界面。可以用于对服务器(静态的和动态的资源)、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。
运行原理
JMeter通过线程组来驱动多个线程,运行测试脚本对被测试服务器发起负载,每一个负载机上都可以运行多个线程组,比如两个、三个线程组。·JMeter运行场景不仅可以在GUI方式中完成,还可以使用命令行,而且命令行运行的方式对于负载机的资源消耗会更小
JMeter主要元件:
测试计划(Test Plan):用来管理一个脚本代码。
线程组(ThreadGroup):用来产生负载,管理测试任务线程数等数据
取样器(Sampler): 向服务器发送请求任务,接受返回的响应结果
监听器(Listener):用来记录测试结果
配置元件(Config Element):实现参数化等需求使用
部署 JMeter 环境
安装JMeter软件包
安装JDK
设置环境变量
调整软件设置
设置变量找到此电脑图标->右键菜单里选择“属性”->高级系统设置->环境变量
检测变量,在cmd命令行窗口依次输入
set JAVA_HOME用来检查java路径,
set JMETER_HOME用来检查jmeter路径,
set Path用来检查java和jmeter路径,
java -version用来检查java版本,
jmeter -v用来检查jmeter版本
调整软件设置
运行软件,双击apache-jmeter-5.6.3\bin中的jmeter.bat或者在cmd命令行输入jmeter即可,注意软件弹出的cmd窗口不要关闭
软件默认是英文,汉化可以到apache-jmeter-5.6.3\bin\jmeter.properties文件中,添加language=zh_CN,然后重启软件
设置背景颜色
web 服务器基本测试
实现以下要求:
使用新的测试计划
添加线程组、取样器、监听器
测试web服务并查看结果
打开JMeter,新建测试计划,添加线程组、取样器、监听器
线程数:
线程数,虚拟用户数,也可以理解为并发请求数。一个虚拟用户占用一个线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
Ramp-Up时间(秒):
用于告知JMeter设置的虚拟用户数需要多长时间全部启动。如果线程数为10,Ramp-Up时间为2,那么需要 2秒钟启动10个线程,也就是平均每秒钟启动5个线程,也就是每隔0.2秒启动一个线程。值是0,代表JMeter将立即启动所有线程。
循环次数:
每个线程发送请求的次数(每个虚拟用户执行几次)如果线程数为10,循环次数为 100,那么每个线程发送100次请求。总请求数为10*100=1000。如果勾选了“永远”,那么所有线程会一直发送请求,直到选择停止运行脚本或调度器里设置的持续时间到期。
HTTP请求
HTTP请求方法是指客户端发送给服务器的请求类型,表示客户端想要对服务器资源执行的操作类型。
常见的HTTP请求方法包括:
GET方法:
请求获取服务器资源,比如查看某网页,GET 把参数包含在URL中。
POST方法:
请求向服务器提交要被处理的数据,POST一般通过Request Body传递参数将请求整体提交给服务器。
聚合报告
参数解释:
样本数(Samples):已执行的请求数量,即发送给服务器的请求数量。
平均值(Average):所有样本的响应时间的平均值。
中位数(Median):所有样本的响应时间的中位数,即将所有样本的响应时间按大小排序后位于中间的值。
90%响应时间(90% Line):所有样本中的 90%的响应时间都小于此值。
95%响应时间(95% Line):所有样本中的 95%的响应时间都小于此值。
99%响应时间(99% Line):所有样本中的 99%的响应时间都小于此值。
最小值(Min):所有样本的响应时间中的最小值。
最大值(Max):所有样本的响应时间中的最大值。
异常百分比(Error%):错误数占总样本数的百分比。
吞吐量(Throughput):每秒完成的样本数,表示服务器的处理能力。
接收KB/秒(Received KB/sec):每秒接收的数据量,单位为 KB。
发送KB/秒(Sent KB/sec):每秒接收的数据量,单位为 KB。
补充知识:
RT(Response Time)(响应时间),从发起请求到完全接收到应答的时间消耗
QPS(QueriesPer Second):每秒查询率,表示系统每秒处理的请求数量,反映了系统的负载能力和性能。
TPS(TransactionsPer Second):每秒事务处理量,表示系统每秒处理的事务数量,用于衡量系统的吞吐量和性能。
web服务器并发测试
实现以下要求:
对web服务进行压力测试
将结果生成HTML报告
打开JMeter,新建测试计划,添加线程组、取样器、监听器
添加线程组,参数设置如下
线程数:10000(可以由小至大逐步测试)其他未提及参数为默认
添加取样器,参数设置如下
协议:http IP:192.168.99.5端口号:80
HTTP请求方法:GET 路径:index.html 内容编码:utf-8
提高并发测试效率
可采用命令行的方式:
jmeter-n -t [jmxfile]-l [resultsfile]-e -o[Pathto web report folder]
说明:
-n:以非GUI形式运行Jmeter
-t:jmx 脚本路径
-l:运行结果保存路径
-e:在脚本运行结束后生成html报告
-o:保存html报告的路径, 此文件夹必须为空或者不存在
[jmx file]指定.jmx文件的路径和文件名称,要求该脚本必须要存在
[results file]指定.jtl格式的测试结果文件的存储路径和文件名称,要求该文件一定不存在,存储路径位置要求存在,运行后能自动生成该文件
[Path to web report folder]指定.html 格式的测试结果报告文件的存储路径,这是一个不存在的文件夹的路径。
注意事项:
如果[jmxfile]不存在,就会报错
如果[resultsfile]或[Path to web report folder]存在,就会报错。
按上述说明,可在C:盘创建 jmeter文件夹后执行:
jmeter-n -tc:\jmeter\HTTP01.jmx-lc:\jmeter\HTTP01.jtl-e -oc:\jmeter\HTTP01
HTTP Cookie管理器
实现以下要求:
使用JMeter测试登录页面
配置HTTP Cookie管理器
抓包分析登录页面
部署登录页面
拷贝带登录效果的测试页面页
注:在html目录下,index.php 是登录前页面 ,home.php 是登录后才能看的页面,其中login.php是使用POST方法的后台页面,此页面被index.php自动调用
Session:存储在服务器端,保存用户名、登陆状态等信息。通常默认位置是/var/lib/php/session/
Cookies:由服务器下发给客户端,保存在客户端的一个文件里。保存的内容主要包括:SessionID。
使用JMeter测试登录页面
1.使用JMeter测试页面,在线程组中添加http请求取样器,参数设置如下协议:httpIP:192.168.99.5端口号:80HTTP请求方法:GET 路径:index.php内容编码:utf-8
2.启动测试脚本后,查看结果树中可以正常看到登录前页面
3.在JMeter中将请求方法改成POST,然后按图添加参数启动测试脚本后,查看结果树中依然只可以看到登录前页面,而不是登录后页面,因为JMeter默认状态下不会保存Cookie
4.添加HTTP Cookie管理,再次启动测试脚本后,可以看到登录后页面