JMeter4.x压力测试入门到实战(小D课堂)


一、Jmeter安装

apache ab(单接口压测最方便)

 jmeter需要安装jdk环境;

https://jmeter.apache.org/  jmeter官网;

 

 二、Jmeter基础讲解

Jmeter目录文件讲解
1、目录
bin:核心可执行文件,包含配置
jmeter.bat: windows启动文件:
jmeter: mac或者linux启动文件:
jmeter-server:mac或者Liunx分布式压测使用的启动文件
jmeter-server.bat:mac或者Liunx分布式压测使用的启动文件
jmeter.properties: 核心配置文件

extras:插件拓展的包
lib:核心的依赖包
ext:核心包
junit:单元测试包

调整为中文版本:

创建jmeter计划,压测一个接口

 三、Jmeter核心组件讲解和实战

 Jmeter基础功能组件介绍线程组和Sampler

 一个测试计划下可以创建多个线程组;

 每秒钟2个用户,5秒钟达到10个用户;

 

1、添加->threads->线程组(控制总体并发)
线程数:虚拟用户数。一个虚拟用户占用一个进程或线程

准备时长(Ramp-Up Period(in seconds)):全部线程启动的时长,比如100个线程,20秒,则表示20秒内100个线程都要启动完成,每秒启动5个线程

循环次数:每个线程发送的次数,假如值为5,100个线程,则会发送500次请求,可以勾选永远循环

2、线程组->添加-> Sampler(采样器) -> Http (一个线程组下面可以增加几个Sampler)
名称:采样器名称
注释:对这个采样器的描述

web服务器:
默认协议是http
默认端口是80
服务器名称或IP :请求的目标服务器名称或IP地址

路径:服务器URL

Use multipart/from-data for HTTP POST :当发送POST请求时,使用Use multipart/from-data方法发送,默认不选中。


3、查看测试结果
线程组->添加->监听器->察看结果树

Jmeter断言

 可以创建多个断言

apply to(应用范围):
Main sample only: 仅当前父取样器 进行断言,一般一个请求,如果发一个请求会触发多个,则就有sub sample(比较少用)

jmeter聚合报告

lable: sampler的名称
Samples: 一共发出去多少请求,例如10个用户,循环10次,则是 100
Average: 平均响应时间
Median: 中位数,也就是 50% 用户的响应时间

90% Line : 90% 用户的响应不会超过该时间 (90% of the samples took no more than this time. The remaining samples at least as long as this)
95% Line : 95% 用户的响应不会超过该时间
99% Line : 99% 用户的响应不会超过该时间
min : 最小响应时间
max : 最大响应时间

Error%:错误的请求的数量/请求的总数
Throughput: 吞吐量——默认情况下表示每秒完成的请求数(Request per Second) 可类比为qps
KB/Sec: 每秒接收数据量

放大并发数,qps不涨,说明已经到瓶颈,即得到最大qps值;qps:每秒查询率

一般不以一次测试结果为准,而是多次测试;因为有可能系统正在进行垃圾回收,cpu被其他进程占用等;

 用户自定义变量

 选中线程组,右键start是单独跑这一个线程组;

引用变量${变量名}

CSV可变参数实战

 压测的时候肯定不会单一一个用户去压测

CSV格式:

 TXT格式:

 

CSV的分割符是逗号,txt是竖线;

 CSV文件多参数变量

 

 四、Mysql数据库压测

jdbc request压测mysql select语句

 JDBC Driver class在最外层的测试计划处添加:

运行

 

 insert语句也可以选择上图中的这个;

 在结果树中查看debug sampler,提取值时可以用到

参数讲解:(sql结尾不要加";")
1、variable name of pool declared in JDBC connection configuration(和配置文件同名)
2、Query Type 查询类型
3、parameter values 参数值
4、parameter types 参数类型
5、variable names sql执行结果变量名
6、result variable names 所有结果当做一个对象存储
7、query timeouts 查询超时时间
8、 handle results 处理结果集

五、分布式压测基础知识

分布式压测介绍

简介:讲解什么是分布式压测

普通压测:单台机可以对目标机器产生的压力比较小,受限因素包括CPU,网络,IO等  (好处:操作简单,本机启动一个Jmeter就可以了)
分布式压测:利用多台机器向目标机器产生压力,模拟几万用户并发访问

Jmeter分布式压测

简介:讲解Jmeter分布式压测原理
1、总控机器的节点master,其他产生压力的机器叫“肉鸡” server
2、master会把压测脚本发送到 server上面

3、执行的时候,server上只需要把jmeter-server打开就可以了,不用启动jmeter
4、结束后,server会把压测数据回传给master,然后master汇总输出报告
5、配置详情

master向3台肉鸡发号师令,3台机器上都安装了jdk  jmeter,4个机器都在同一个网段;

把3台机器上的jmeter-server启动,即表明这个节点准备好了,随时等待master发号师令;

master中配置remote_host:server1的ip:端口,server2的ip:端口,server3的ip:端口;

master会把压测脚本发送到 server上面;

结束后,server会把压测数据回传给master,然后master汇总输出报告;

 肉鸡里面启动的就是这个:

 master要配置的是这个:

 

六、阿里云linux服务器压测接口实战 

springboot接口打包,并用jar包方式部署

 可以用上面这个直接打好的包;

阿里云服务器介绍和ECS服务器使用

推荐购买2G内存以上的进行开发学习

 

 可以远程连接,而可以通过ip 使用xshell等工具ssh登录;

阿里云linux下安装启动JDK8并配置环境变量

oracle官网下载对应jdk

 下载一个secureCRT,把下载下来的jdk传到服务器上;

进到服务器jdk所在对应目录并进行解压

 mv 重命名为jdk8 

 -i 输入模式

 wq保存;

使用这个命令让他生效:

 验证:

部署java项目到阿里云服务器和守护进程讲解

 把打包项目上传到服务器;

启动jar包,

 配置阿里云安全策略,让外网可以访问

 设置守护进程,那么终端推出后,服务也不会挂掉

 

阿里云服务器安装jmeter

 jmeter官网,右键复制连接;

登录服务器,下面命令下载Jmeter

解压

 用两台电脑,在同个局域网,安装同个版本的 Jdk 和 jmeter;同个路径,不要带有空格和中文;

Jmeter非GUI界面 参数讲解

GUI模式比较耗性能,所以一般不在gui模式下进行压测;

-h 帮助
-n 非GUI模式
-t 指定要运行的 JMeter 测试脚本文件
-l 记录结果的文件 每次运行之前,(要确保之前没有运行过,即xxx.jtl不存在,不然报错)
-r Jmter.properties文件中指定的所有远程服务器
-e 在脚本运行结束后生成html报告
-o 用于存放html报告的目录(目录要为空,不然报错)

官方配置文件地址 http://jmeter.apache.org/usermanual/get-started.html

jmeter -n -t linux_users_api.jmx -l result.jtl -e -o /usr/local/softwate/jmeter/temp/ResultReport

jmeter -n -t /Users/jack/Desktop/linux_users_api.jmx -l result.jtl -e -o /Users/jack/Desktop/person/jmeter/temp

bin目录下运行

 压测:

实战阿里云linux服务器非GUI执行jmeter压测

1,先把jmeter脚本上传到阿里云服务器

2,进到jmeter脚本所在目录,给他一个777权限,对这个脚本可读可执行

 进到jmeter bin目录执行

 压测完成

 

 公网地址有带宽限制,不适合大流量压测;要用内网压测;

编辑jmx文件,把压测ip改为内网地址:

 找到线程组的位置,修改ip

 再次执行压测

 把服务器上的 jtl 报告下载到本地,然后在jmeter中查看

 

 Jmeter压测接口的性能优化

Jmeter压测减少资源使用的一些建议,即压测结果更准确

1、使用非GUI模式:jmeter -n -t test.jmx -l result.jtl

2、少使用Listener(监听器), 如果使用-l参数,它们都可以被删除或禁用。
3、在加载测试期间不要使用“查看结果树”或“查看结果”表监听器,只能在脚本阶段使用它们来调试脚本。

4、包含控制器在这里没有帮助,因为它将文件中的所有测试元素添加到测试计划中。(可先忽略)
5、不要使用功能模式,使用CSV输出而不是XML(可先忽略)
6、只保存你需要的数据,尽可能少地使用断言(因为需要正则表达式匹配等,耗时)

7、如果测试需要大量数据,可以提前准备好测试数据放到数据文件中,以CSV Read方式读取。
8、用内网压测,减少其他带宽影响压测结果
9、如果压测大流量,尽量用多几个节点以非GUI模式向服务器施压(即分布式压测)

官方推荐 :http://jakarta.apache.org/jmeter/usermanual/best-practices.html#lean_mean

实战之压测生成多维度图形化HTML测试报告

 html测试报告下载到本地打开查看;

1、dashboard讲解

1)Test and Report informations
Source file:jtl文件名
Start Time :压测开始时间
End Time :压测结束时间
Filter for display:过滤器
Lable:sampler采样器名称

2)APDEX(Application performance Index)
apdex:应用程序性能指标,范围在0~1之间,1表示达到所有用户均满意
T(Toleration threshold):可接受阀值
F(Frustration threshold):失败阀值

3)Requests Summary
OK:成功率
KO:失败率
4)Statistics 统计数据
lable:sampler采样器名称

samples:请求总数,并发数*循环次数
KO:失败次数
Error%:失败率

Average:平均响应时间
Min:最小响应时间
Max:最大响应时间
90th pct: 90%的用户响应时间不会超过这个值(关注这个就可以了)
2ms,3ms,4,5,2,6,8,3,9

95th pct: 95%的用户响应时间不会超过这个值
99th pct: 99%的用户响应时间不会超过这个值 (存在极端值)
throughtput:Request per Second吞吐量 qps

received:每秒从服务器接收的数据量
send:每秒发送的数据量

讲解压测报告 html里面Charts的核心指标
1、charts讲解


1)Over Time(随着时间的变化)
Response Times Over Time:响应时间随时间变化趋势:

一开始用户是做多的,需要建立连接,负载、cpu都在上升,所以一开始所用的时间长,趋于稳定后,响应时间也稳定;

所以不能用户在一开始集中爆发式进去;

系统稳定的时候,响应时间是20多秒;
Response Time Percentiles Over Time (successful responses):最大,最小,平均,用户响应时间分布


Active Threads Over Time:并发用户数趋势(分析不出什么指标)


Bytes Throughput Over Time:每秒接收和请求字节数变化,蓝色表示发送,黄色表示接受 (吞吐量)


Latencies Over Time:平均响应延时趋势(和响应时间随时间变化趋势是对应的)


Connect Time Over Time :连接耗时趋势(不用太关注)

1)Throughput
Hits Per Second (excluding embedded resources):每秒点击次数 (不用太关注)


Codes Per Second (excluding embedded resources):每秒状态码数量

 


Transactions Per Second:即TPS,每秒事务数(相当于QPS,每秒查询次数)


Response Time Vs Request:响应时间和请求数对比


Latency Vs Request:延迟时间和请求数对比(和上面是对应的)

1)Response Times
Response Time Percentiles:响应时间百分比(看90%这里)


Response Time Overview:响应时间概述

190多万用户的相应时间都小于500ms


Time Vs Threads:活跃线程数和响应时间(作用不大)


Response Time Distribution:响应时间分布图