性能测试总结

一、概念了解

1. 性能测试的维度和类型

编号 类型 概念 标准 举例
1 基准测试 给系统施加较低压力,查看系统运行状况并记录相关数据作为基础参考 10%~20% 软件最多只给100个人使用,先用10~20人测试一下
2 负载测试 不断增加压力或增加一定压力下的持续时间,直到找到达成多项性能指标的安全临界值 找到最佳性能点 某种资源已经达到饱和状态
3 压力测试 测试系统超载时的运行情况,关注系统在峰值或超载时的处理能力 150% 允许20000人排队,测试第20001个人请求时的处理(应该将请求拦截下来,避免系统崩溃)
4 稳定性测试 给系统中上游压力时,让系统持续运行一段时间,模拟绝大多数常态的使用 40%~60% -
5 并发测试 多个用户同时访问同一个应用/模块 视实际情况而定 12306抢票,9点放票,同时抢票

2. 性能测试常用指标

编号 指标 定义 说明
1 响应时间 响应时间=呈现时间 网络传输时间 服务器端响应时间 应用延时时间 用户负载不断增加,响应时间突然增加的点就是性能最佳点
2 吞吐量 吞吐量=请求总数/花费的总时间 用户负载不断增加,吞吐量会突然下降
3 并发数 分为并发用户数、在线用户数、系统用户数 系统用户数≥在线用户数≥并发用户数,等于的情况很难实现
4 资源利用率 不同系统资源的使用程度 需关注CPU、内存、磁盘IO、网络带宽
5 页面访问量(PV) 访问一个url,产生1个PV,累加制 1个用户访问10次,算10个访问量
6 用户访问量(UV) 一个独立用户,访问站点所有页面都算作1个UV,按用户计算 商家投放广告关注UV,关注的是稳定用户使用量

3. 资源利用率关注点

关注点 上限
CPU 不要超过80%~90%
内存 不要超过80%~90%

二、jmeter性能测试

Jmeter的主要思想:先构造用户,再让用户去请求对应的接口。

1. jmeter性能测试步骤

编号 步骤 实现方法 作用 备注
1 添加线程组 测试计划->添加->Threads(users)->线程组 配置线程数、循环次数等 一个线程组相当于一个用户
2 添加HTTP请求 线程组->添加->sampler->HTTP请求 接口参数配置 Sampler:取样器,用来模拟请求
3 配置HTTP接口 将接口完整的url地址复制到路径栏,并填入请求信息 - 请求信息是json形式时选择body data
4 添加HTTP信息头管理器 HTTP接口->添加->配置元件->HTTP信息头管理器 设置接口的content-type Jmeter默认传输请求信息的方式是表单类型,即Content-Type: application/x-www-form-urlencoded
5 添加cookie管理器 线程组->添加->HTTP Cookie管理器 获取发起登录请求时的cookie信息,当同一个人再次发起请求时,cookie信息就会被传入。 添加后不用做任何配置;登录和其他请求需要在同一个线程组内;还可在HTTP信息头管理器中添加cookie,但使用不灵活
6 配置线程组 设置线程数、循环次数等 实现多个人同时请求 线程数默认是1,一般单个人请求成功后再进行这一步
7 添加断言结果 HTTP接口->添加->断言->响应断言 断言结果是否符合预期设置结果 常用包含、匹配,有多个断言条件时,需同时满足才通过
8 添加查看结果树 线程组->添加->监听器->察看结果树 查看请求结果 按绿色按钮,运行请求
9 运行请求 在查看结果树页面点击绿色运行按钮 运行接口请求 看请求信息是否与填写的一致,看响应数据是否正常
10 添加聚合报告 线程组->添加->监听器->聚合报告 接口测试结果性能展示 聚合报告可导出
11 添加物理资源监控插件 线程组->添加->监听器->jp@gc – PerMon Metrics Collector 监控服务器和本地电脑的物理资源变化 一般监控CPU、内存、磁盘、网络四个选项 ,还应监控自己电脑的资源,实现双向监控

2. 参数化方法

参数化:将写死的东西变成变量

3. CSV Data Set Config参数设置

编号 参数 含义 填写说明
1 filename 文件名 支持绝对路径和相对路径
2 file encoding 编码方式 一般使用utf-8
3 variable names 变量名 默认以逗号分隔
4 delimiter 分隔方式 默认为逗号
5 allow quoted data 是否考虑引号 默认不考虑(false),如果考虑引号,引号中的逗号不会被分隔
6 recycle on EOF 文件读取结束后是否要循环 默认循环(true),比如只有100个用户信息,但需要200个人登录,会循环取数据
7 stop thread on EOF 文件读取结束后是否要停止 当取不到数据时是否停止,true代表停止,false代表不停止,但取不到数据,会导致这几个请求实际没有传参。
8 sharing mode 分享模式 all threads——给所有线程使用,current thread group——给当前线程组使用,current thread——给当前线程使用。

4. 线程组的线程属性

编号 属性 含义 理解 备注
1 线程数 一个线程数就是一个用户 - -
2 Ramp-up period 决定多长时间启动所有线程 如果有5个线程,ramp-up period是10秒,则每隔2(10/5)秒启动一个线程。如果ramp-up period是0秒,则jmeter会立即建立所有线程 构造用户的间隔时间(秒)=Ramp-up period/线程数,用户构造完成后会立马发起请求
3 循环次数 默认循环1次,可修改次数 循环2次时,同一个人会请求2次,不受其他用户的影响 永远循环:需要谨慎操作,很可能会让电脑卡死
4 调度器 优先级:启动时间/结束时间的优先级比持续时间/启动延迟低 如果4个选项均填写了内容,则默认持续时间/启动延迟选项设置生效,启动时间/结束时间设置不生效 调度器一般在循环次数为永远时生效
5 启动/结束时间 设置固定的时间启动和结束 比如:设置启动时间为2021/02/03 21:00:00 -
6 启动延迟/持续时间 设置启动延迟5秒,持续时间10秒 5秒后启动,持续10秒 -

5. 并发测试

真正的并发需要使用同步定时器,

  1. 添加同步定时器:线程组->添加->定时器->synchronizing Timer(同步定时器)

  2. 设置并发人数(number of simulated users to group by)

编号 步骤 实现方式 说明
1 添加同步定时器 线程组->添加->定时器->synchronizing Timer(同步定时器) 同步定时器是最接近真实情况的并发
2 设置并发人数 number of simulated users to group by一栏设置人数 只有用户数构造完后才会一起去请求这个接口
3 设置超时时间 timeout in millisecond一栏设置超时时间,单位毫秒 如果超时时间过了,用户还没构造完成,则已经构造好的用户会同时发起请求。设置为0,表示永不超时

6. 有关联性的接口处理方法

有关联的接口举例:考试系统中要删除一个用户,需要先获取查询到的用户id,再根据用户id进行删除操作

编号 方法 添加方式 配置参数 表达式获取方法 表达式替代变量的格式
1 正则表达式提取器 HTTP接口->添加->后置处理器->正则表达式提取器 配置引用名称、正则表达式、模板、匹配数字、缺省值 正则表达式获取:察看结果树->RegExp Tester,在Regular 中填写正则表达式 ${变量名}
2 json表达式提取 HTTP接口->添加->后置处理器->JSON Extractor 配置变量名、json表达式、匹配数字、默认值 json表达式获取:察看结果树->JSON Path Tester,在JSON Path 中填写json表达式 ${变量名}
编号 表达式 语法 举例 含义
1 正则表达式 . ?表示匹配任意符合的字符串,将变量修改为. ? “id”. ?“userUuid” 匹配到前面是"id"后面是"userUuid"的表达式
2 json表达式 整个json体是一个大字典,以{}表示, $.response.list[0].id 获取字典里的id,id在list列表的第一个元素,list列表在response字典中,访问列表元素使用下标,从0开始

7. 聚合报告字段解析

编号 字段 解析
1 samples 线程数
2 average 平均响应时间,单位毫秒
3 median 中间响应时间,反应中等水平
4 90% line 响应时间从低到高排序,排在90%的响应时间
5 95% line 排在95%的响应时间
6 99% line 排在99%的响应时间
7 Min 最小响应时间
8 Max 最大响应时间
9 Error % 错误率
10 Throughput 吞吐量,每秒处理了多少请求,单位是秒,计算方式:请求数/花费的总时间
11 Received KB/S 接收的网络带宽速度,计算方式:传输的文件大小(响应数据大小)/花费的时间
12 Sent KB/S 发送的网络带宽速度,计算方式:请求数据大小/花费的时间

8. 判断性能是否达标

(1)响应时间遵循2-5-8原则
(2)99%的人响应时间在2秒以内就认为性能OK,同时错误率不能超过1%。

9. 最大吞吐量和最大并发量

编号 项目 解释 举例说明
1 最大吞吐量 不并发,看一段时间的处理水平 前10分钟优惠有效
2 最大并发量 并发 ,看同一时间的处理水平 前30名优惠

10. 各性能测试执行

编号 测试项目 关注点 线程属性设置 备注
1 基准测试 不考虑并发,看吞吐量 线程数200,时间10秒,每秒20个,循环1次 -
2 负载测试 在基准测试的基础上继续加压 线程数100,时间10秒,循环20次 测吞吐量时不建议让本地电脑不停造人,实际需要测试的是接口调用,一般是快速造人,然后进行循环
3 压力测试 关注服务器会不会因为压力太大而挂掉 线程数100,时间10秒,循环次数不断增加 在增加压力的过程中错误率或响应时间会突然明显增加
4 稳定性测试 关注长时间运行,系统的稳定性 在调度器里设置运行时间  -
5 并发测试 此时不用太过关注吞吐量,重点关注响应时间和错误率 已经测出来最大吞吐量之后,比如每秒处理500个请求,则线程数设为500,时间可以设长一点30秒(自己调整),循环次数1次,然后设置同步定时器:500一组,超时时间为0 如果并发没有问题,可以不断往上加数据

来源:https://www.icode9.com/content-4-847251.html

(0)

相关推荐