性能测试工具JMeter学习总结

412 阅读8分钟

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线程,用来执行测试脚本里面的操作

在这里插入图片描述

参数:
  • 线程数: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等等

  • Content encoding:如果方法是POST、PUT、TRACE、HEAD时的编码方式:默认留空
  • 路径:URL
  • 下面的多选框保持默认
  • 下面可以添加参数

3)断言:

  • 断言,用来判断采样器的请求响应结果是否正确
  • 响应断言:

    1)响应码
    2)响应信息
    3)响应文本
    4)响应Header

  • 名称和注释可以任意修改
  • Apply to:指定断言的作用范围,一般保持默认。

要测试的响应字段:指断言要检查的目标

  • 响应文本:指服务端返回的数据

在这里插入图片描述

  • 响应代码:指Http响应Code,比如200、500、404等等
  • 响应信息:指Http响应的Message,比如ok、error等字符串

在这里插入图片描述

  • 响应断言例子:在这里插入图片描述
4)参数化
  • 需要对用户名、密码进行参数化。
1. 添加CSV Data Set Config

在这里插入图片描述

2. 创建需要读取的文件,写入数据后保存

在这里插入图片描述

3. 配置读取数据的相关参数

在这里插入图片描述

4. 对数据参数化

在这里插入图片描述

5)HTTP Cookie管理器
  • HTTP Cookie管理器,为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?
4. 数据库、缓存、其他中间件……