Jmeter压测工具使用手册
简介
Apache公司用java开发的一款开源测试工具
免安装操作简单,运行以来jdk
可做接口测试和压力测试
安装
1、需要机器先安装jdk
2、jmeter官网地址:http://jmeter.apache.org/download_jmeter.cgi
解压缩即可使用
如果想操作方便可配置环境变量
```
【变量名】JMETER_HOME jmeter解压路径 【变量名】CLASSPATH 【变量值】%JMETER_HOME\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-2.0.jar; 启动:双击Jmeter解压路径(apache-jmeter-4.0\bin)的bin下面的jmeter.bat
实战用法
创建线程计划和线程组
设置线程数
线程组:
测试里每个任务都要线程去处理,所有我们后来的任务必须在线程组下面创建。 可以在“Test Plan(鼠标右击) -> 添加 ->Threads(Users) -> 线程组”来建立它,然后在线程组面板里有几个输入栏: 线程数、Ramp-Up Period(in seconds)、 循环次数,其中Ramp-Up Period(in seconds)表示在这时间内创建完所有的线程。如有8个线程,Ramp-Up = 200秒,那么线程的启动时间间隔为200/8=25秒,这样的好处是:一开始不会对服务器有太大的负载。
Number of Threads(users): 一个用户占一个线程, 100个线程就是模拟100个用户
Ramp-Up Period(in seconds): 设置线程需要多长时间全部启动。如果线程数为200 ,准备时长为10 ,那么需要1秒钟启动20个线程。也就是每秒钟启动20个线程。
Loop Count: 每个线程发送请求的次数。如果线程数为200 ,循环次数为10 ,那么每个线程发送10次请求。总请求数为200*10=2000 。如果勾选了“永远”,那么所有线程会一直发送请求,直到选择停止运行脚本。
添加请求:
设置请求方法
请求报文的路径,也可以直接把要输入的内容到请求方法中
选取监听的方式
jmeter指标说明
表格显示,属性说明
Sample:每个请求的序号
Start Time:每个请求开始时间
Thread Name:每个线程的名称
Label:Http请求名称
Sample Time:每个请求所花时间,单位毫秒
Status:请求状态,如果为勾则表示成功,如果为叉表示失败。
Bytes:请求的字节数
样本数目:也就是上面所说的请求个数,成功的情况下等于你设定的并发数目乘以循环次数
平均:每个线程请求的平均时间
最新样本:表示服务器响应最后一个请求的时间
偏离:服务器响应时间变化、离散程度测量值的大小,或者,换句话说,就是数据的分布
聚合报告显示属性说明
Label:每个JMeter的element的Name值。例如HTTP Request的Name
#Samples:样本数量。多少个请求
Average:平均响应时间(单位:)。默认是单个Request的平均响应时间,当使用了TransactionController时,也可以以Transaction为单位显示平均响应时间
Median:中位数,也就是50%用户的响应时间
90%Line:90%用户的响应时间
95%Line:95%用户的响应时间
99%Line:99%用户的响应时间
注:为什么要有*%用户响应时间?因为在评估一次测试的结果时,仅仅有平均事物响应时间是不够的。假如有一次测试,总共有100个请求被响应,其中最小响应时间为0.02秒,最大响应时间为110秒,平均事务响应时间为4.7秒,你会不会想到最小和最大响应时间如此大的偏差是否会导致平均值本身并不可信?
我们可以在95 th之后继续添加96/ 97/ 98/ 99/ 99.9/ 99.99 th,并利用Excel的图表功能画一条曲线,来更加清晰表现出系统响应时间的分布情况。这时候你也许会发现,那个最大值的出现几率只不过是千分之一甚至万分之一,而且99%的用户请求的响应时间都是在性能需求所定义的范围之内的;如下图则是最低响应时间的值出现几率是很小的,实际99%的用户请求响应时间都要20000+。
Min:最小响应时间
Max:最大响应时间
Error%:本次测试中出现错误的请求的数量/请求的总数
Throughput:吞吐量。默认情况下标示每秒完成的请求数(具体单位如下图)
KB/sec:每秒从服务器端接收到的数据量。
Summary Report界面属性说明
所有数据写入一个文件:保存测试结果到本地。
文件名:指定保存结果。
仅日志错误:仅保存日志中报错的部分。
Successes:保存日志中成功的部分。
Configure:设置结果属性,即保存哪些结果字段到文件。一般保存必要的字段 信息即可,保存的越多,对负载机的IO会产生影响。
Label:取样器名称(或者是事务名)。
#Samples:取样器运行次数(提交了多少笔业务)。
Average:请求(事务)的平均响应时间,单位为毫秒。
Min:请求的最小响应时间,单位为毫秒。
Max:请求的最大响应时间,单位为毫秒。
Std.Dev:响应时间的标准方差。
Error%:事务错误率。
Throughput:吞吐率(TPS)。
KB/sec:每秒数据包流量,单位是KB。
Avg.Bytes:平均数据流量,单位是Byte。
功能测试 设置
1、Jmeter-http接口脚本
(1)添加线程组
(2)添加http请求
(3)在http请求中写入接入url、路径、请求方式和参数
(4)添加查看结果树
2、jmeter 操作数据库
(1)导入mysql的jdbc的jar包
(2)创建数据库的连接配置,线程组里添加配置元件-JDBC Connection Configuration
(3)线程组里添加jdbc request,写sql语句
(4)添加察看结果树,点击启动按钮,就能看到执行的SQL。
压力测试
1、压力测试场景
单场景:压测一个接口
混合场景:压测多个关联的接口
2、压测任务需求的确认
压测前要明确压测功能和指标,一般需要确定几个问题
1)固定接口参数进行压测还是进行接口参数随机化测试?
2)要求支持多少个并发数?
3)TPS(每秒钟处理事务数)目标多少?相应时间要达到多少?
4)压服务器名称还是压服务器ip,一般都是压测指定的服务器。
3、压测设置
1)线程数:并发数量,能跑多少量。具体说是一次存在多少用户同时访问
2)Rame-Up period(in seconds):表示jmeter每隔多少秒发动并发。
3)循环次数:Z这个设置不会改变并发数,可以延长并发时间。总请求数=线程数*循环次数
4)调度器:设置压测的启动时间、结束时间、持续时间和启动延迟时间
4、压测结果查看
压测结束主要看:samples、average、error、throughput
1)samples:表示一共发出的请求数
2)average:平均响应时间,默认情况下是单个request的平均响应时间
3)error%:测试出现的错误请求数量百分比
4)throughput:简称tps吞吐量,默认情况下表示每秒处理的请求数,也指服务器的处理能力,tps越高说明服务器处理能力越好。
5、压测结果的分析
1)、throughput吞吐量每秒请求的数大于并发数,则可以慢慢往上面增加;
若在压测的机器性能很好的情况下,出现吞吐量小于并发数,说明并发数不能再增加了,可以慢慢的网下减,找到最佳的并发数;压测结束,登录响应的web服务器查看cpu等性能指标,进行数据的分析;
2)、最大的tps不断地增加并发数,加到tps达到一定值开始出现下降,那么那个值就是最大的tps
3)最大并发数,最大的并发数和最大的tps是不同的概率,一般不断增加并发数,达到一个值后,服务器出现请求的超时,则可以认为该值为最大并发数。
4)压测过程出现性能瓶颈,若压力机任务管理器查看到的cpu、网络和cpu都正常,未带到90%以上,则可以说明服务器有问题,压力机没问题
5)性能考虑点:数据库、应用程序、中间件、网络、操作系统等方面。