JMeter使用概述
一、JMeter脚本录制
1)添加线程组
2)添加HTTP代理服务器
-
名称和注释可以自行修改
-
端口:JMeter代理服务器监听的端口,默认是8080,可自行修改
-
HTTP Domains:可默认留空
-
目标控制器:可下拉选择:测试计划>线程组,录制下来的HTTP请求会保存在测试计划>线程组下面
-
分组:可下拉选择每个组放入一个新的控制器,JMeter会将HTTP请求适当的分组
-
记录HTTP信息头、添加断言、Regex matching可保持默认配置
-
HTTP Sampler settings和Content-type filter保持默认配置
-
包含模式:只有请求的url,匹配包含模式中的正则表达式,这条请求才会被录制
-
排除模式:更常用,只要请求的url,匹配排除模式中的正则表达式,这条请求就会被过滤;一般情况下,访问一些静态资源需要被过滤:
3)添加本机的本地代理
进入chrome的设置—>更改代理服务器的设置—>Internet选项—>局域网设置,配置好地址和刚才设置的JMeter服务器端口
4)启动JMeter代理服务器
5)在浏览器中操作需要录制的相关操作
6)停止JMeter代理服务器
7)保存为.jmx测试计划文件
8)打开该.jmx测试计划文件,即可进行相关测试
二、JMeter测试脚本
1)线程组,管理执行脚本的JMeter线程
JMeter线程,用来执行测试脚本里面的操作
参数:
线程数越大,对被测服务器所施加的压力就越大
-
Ramp-up Period(in seconds):JMeter启动所有的JMeter线程所花费的时间,比如线程数为10,Ramp-up Period设置为10,那么JMeter用100秒使所有10个线程启动并运行。每个线程会在上一个线程启动后10秒(100/10)启动;
-
循环次数:指重复执行该线程组的次数
调度器:
采样器:告诉JMeter线程向服务器发送一次请求,并等待服务端的响应
请求的地址、协议、内容等信息,都是在采样器设置的
2)Http请求:
-
端口号默认80
-
Timeouts:
-
Connect Timeouts:指JMeter在发送请求时,会等待多久直到跟服务器的连接正确地建立起来,如果超过这个时间连接还未建立,JMeter就会判断这次请求是失败的。
-
Response Timeouts:指JMeter会等待多久直到,如果超过这个时间连接还未建立,JMeter就会判断这次请求是失败的。
-
单位是毫秒,一般直接留空,JMeter会使用默认值
-
Implementation:JMeter的实现方式:Java原生,HttpClient4……一般直接选择HttpClient4或者留空
-
协议:Http、Https
方法:GET、POST、DELETE、PUT等等
3)断言:
要测试的响应字段:指断言要检查的目标
4)参数化
1. 添加CSV Data Set Config
2. 创建需要读取的文件,写入数据后保存
3. 配置读取数据的相关参数
4. 对数据参数化
5)HTTP Cookie管理器
1)Cookie自动管理:模拟浏览器行为,自动存储服务器端返回的cookie信息,后续向这个服务端发送的HTTP请求,会自动带上这些cookie。Cookie管理器为每个JMeter线程管理独立的cookie。
2)Cookie人工管理。
三、JMeter测试执行
1. JMeter测试流程
2. 测试结果收集和展示
1)监听器的作用
2)常用的监听器
1. 添加查看结果树:
2. 查看结果树:
请求成功或失败是由断言来决定的
3. 取样器结果中的数据:
- Thread Name:指这次请求的线程组
- Sample Start:指这次请求触发的时间
- Load time:指这次请求从发出到接收到完整返回结果的时间段,也就是响应时间
- Connect Time:指JMeter和服务端建立连接所花费的时间,已经包含在Load time中了
- Latency:指这次请求从发出到开始接收到响应的时间段,一般会略小于Load time
- Size in bytes:指请求总大小,大小等于Headers size in bytes+Body size in bytes
- Headers size in bytes:指请求头大小
- Body size in bytes:指请求体大小
- Response code:这次请求的响应码
- Response message:这次请求的响应信息
- Response headers:这次请求完整的header信息
4. 请求中的数据:
- 完整的url
- cookie信息
- POST会有完整的body信息
- Headers
5. 响应数据中的数据:
服务端返回的数据,完整的html页面或者是JSON格式的字符串,如果这个请求发送失败,还可能会给出一个完整的错误对照
还可以定制特殊的查看方式,默认是text:
1. 添加聚合报告:
2. 查看聚合报告:
聚合报告里的数据是随着测试的进行实时更新的
-
Label:指请求的名称
-
#Samples:指每个请求到目前为止测试了多少次
-
Avarage:指这些请求的平均响应时间
-
Median:指这些请求的响应时间的50值,中位值
-
90% Line:指这些请求的响应时间的90值,即90%用户响应的时间
-
95% Line:指这些请求的响应时间的95值,即95%用户响应的时间
-
99% Line:指这些请求的响应时间的99值,即99%用户响应的时间
-
Min:指这些请求的最小响应时间
-
Max:指这些请求的最大响应时间
-
Error %:指这些请求的失败率,就是执行了这么多次请求之后,有多少请求是失败的
-
Throughput:指这些请求的吞吐率
-
KB/sec:指这些请求每秒传输的字节数
-
响应时间曲线
响应时间曲线,展示响应时间的变化趋势
1. 添加响应时间曲线图:
2. 查看响应时间曲线图:
点击Display Graph按钮:
展示趋势图:
- 图上的曲线根据不同的颜色代表不同的请求
- 趋势图的横坐标:时间
- 趋势图的纵坐标:这些请求的平均响应时间,单位是毫秒
3. 响应时间曲线图的相关配置:
- Interval(ms):指横坐标的统计间隔,默认为10000ms即10s打一个点,JMeter会在10s里对同一个请求多次执行的结果做一下聚合,拿到平均的响应时间,显示在图上。
统计间隔需要合理设置,设置的过小,会导致曲线点太多太密,影响分析;如果设置的过大,又会掩盖掉一些信息 - Sample label selection:可以对这些请求进行过滤,只显示一部分的请求,用正则表达式来过滤
- 下面关于绘制图的配置项保持默认即可
3. 常见问题定位
1)小压力执行脚本时,发现请求返回错误怎么办?
思路:
1. 查看结果树
- ####### 个别请求失败,还是全部请求都失败?
- ####### 报错的HTTP请求,请求和响应分别是什么?是否符合预期?
2. 检查测试脚本
- ####### HTTP请求的设置是否正确:检查IP、端口、协议、方法、路径、参数、body等
- ####### 断言设置是否正确?是否存在误判?
3. 检查被测服务器是否正常运行
- 服务端进程是否存在?监听端口是否打开?
- 服务端日志是否报错?是否业务逻辑存在bug?
2)小压力下请求全部成功,但是在压力变大时,请求出现失败怎么办?
思路:
1. 服务端日志是否报错?
- #######前端服务器日志、业务服务器日志、操作系统日志
2. 服务器软硬件资源使用情况是否正常?
- ####### cpu、内存、磁盘IO、网络、文件句柄……是否有资源已经成为瓶颈?
3. 进程状态是否正常?
- ####### 进程崩溃?假死?
- ####### 进程级别资源使用是否正常?
- ####### 如果是JAVA应用,JVM线程状态、内存使用、GC?