一、性能测试问题导入
1.关注于哪些指标
- 单位时间内的响应速度快不快(1个用户和多个用户)——打开速度快不快
- 单位时间内能够处理的数量——能够同时让多少人访问(并发量)
2.怎么调优
性能评估汇报:某某app,在1000用户同时(**并发量**)进行以下操作(**性能场景**):
1.登录
2.查询
3.评价
消息成功率:100%
平均响应时间为0.03s(**响应时间**)
CPU使用率:80%,内存使用率:90%,网络带宽:50M,磁盘空间:50%(**资源使用率**)
3.性能测试的关键点
- 监控,分析,调优
二、测试对象
1.服务器的接口性能测试(80%):验证服务器是否满足需求
- 模拟器-jemeter,模拟http协议,链接到后台服务器(web服务器+数据库服务器MySQL+Linux操作系统)
2.终端性能测试(web端渲染/APP启动速度——UI性能):受用户环境影响,如网络较好/较差
三、什么是性能测试
1.性能测试也是软件测试的一种,它的主要方向是测试系统在一定的负荷压力下,系统的响应时间,吞吐量(TPS),稳定性,系统的可扩展性等性能指标
- 吞吐量(漏斗,倒东西可以很快流下来)
2.性能测试的基本目的
- 验证是否达到用户的性能指标(逐步加压,1000人-》2000人,是否会有响应超时等错误)
- 发现软件中存在的性能瓶颈并优化
- 测试中得到的负荷和响应时间数据用于验证——评估系统的能力
四、性能测试重点:关键业务领域的性能
- 测试是在时间、成本、质量之间权衡
五、性能测试一般流程
- 评估-》加压-》bug,瓶颈-》分析,
调优
-》长时间跑(稳定性)
六、性能测试与项目
1.性能测试做的成功与否,与测试方法和测试自身所关联的项目背景都有关系(并不是所有的项目都需要性能测试)
2.学习性能:测试思维方法、分析方法
七、性能测试关键指标
+ 多:并发量
+ 快:延时,响应时间(用户感知的时间,是端到端的)
+ 好:稳定性(长时间运行)
+ 省:资源使用率
思考时间(think time):指用户进行操作时每个请求之间的时间间隔,`为了能更加真实的模拟用户的操作`
1.响应时间:对请求作出响应所需要的时间,是用户感知软件性能的主要指标;
- 对于一个web系统,普遍接受的响应时间标准为2/5/8秒
2.并发用户数
-
平均并发用户数的计算模型:C=nL/T(常用计算模型-可供参考)
- C-是平均的并发用户数
- n-是平均每天访问用户数
- L-是一天内用户从登录到退出的平均时间
- T-是考察时间长度(一天内多长时间有用户使用系统)
-
估算并发用户数量公式:使用系统用户数量*(5%~20%)
3.吞吐量:指单位时间内系统处理用户的请求数
- TPS(吞吐率):每秒事务数
- 若用户数增加到某个值后,用户数增加,吞吐量不变,一般原因是由于网络堵塞,需要增大带宽
八、jmeter基础简介
1.jmeter性能测试工具简介
- 多线程框架——支持
多并发
操作 - 用户对服务器模拟负载(一台机器若负载太大,可做分布式性能测试)
- 支持web、数据库、FIP服务器系统的性能测试
- 开源(源码公开)、纯JAVA,可二次定制化开发
2.jmeter运行环境搭建
1) 下载安装JDK(若jmeter版本为5.11,JDK版本需安装大于1.8的)
2)设置环境变量(Java环境是OK的)
3)启动方式
- GUI(界面化):windows(jmeter.bat启动)或Mac(jmeter.sh启动)系统
- 非GUI(非界面化,命令行):Linux系统
在jmeter安装路径的bin文件夹下创建终端命令窗口,输入sh jmeter命令打开GUI界面
4)属性配置:更改jmeter.properties文件
- language=zh_ch(37行)将应用程序设置为中文简体
3.jmeter基本操作
- 独立运行每个线程组(勾选,线程组有前后逻辑关系;不勾选,线程组同步进行)
- 调度器(设置执行一段时间)(循环次数勾选永远)
- 黄色/红色的三角标志,操作日志
九、jmeter主要元件
1.配置元件
http请求默认值
:所有线程组的请求都会使用这个默认值- 性能工具:多进程(roadrunner),多线程(jmeter),线程数就代表用户数
http消息头管理器
:添加授权头的值http cookie管理器
:添加后会自动管理cookie,即上个接口响应返回的cookie值可用于下个接口的请求中
http cache管理器
:缓存,静态资源不是从服务器获取而是从静态中取的- 提取返回请求返回结果中的值赋予某个变量用于下一个接口,使用
$.token
——关联接口
2.监听器元件
-
察看结果树
- 分析查看具体某一个请求的详情(请求头、请求体、响应头、响应体)
- 在做性能测试场景的时候分析错误请求的原因——勾选仅错误日志按钮,在高并发状态下只显示错误日志
-
聚合报告
- 汇总统计:请求数、响应时间(平均的,90%,95%)等,单位是ms
- 错误率——越低越好
- 吞吐量——越高越好
- 发送/接收——带宽
-
用表格查看结果
-
图形结果
3.其他常用元件
- 前置处理器:请求发出去之前执行的控制器(元件),比如加密 md5
- 后置处理器:请求发出去之后执行的控制器(元件),比如提取数据——关联接口
- 定时器
- 思考时间-固定定时器
- 同步定时器-集合点(例如九点开始预售)
- 随机定时器
- 吞吐量定时器
- 断言(作用域,对某个请求做断言,把断言放在请求下)
2.常用端口号
- 80端口:HTTP协议的默认端口
- 8080:tomcat默认端口号
- 8888:重定向端口
- 443端口:HTTPS协议的默认端口
3.python常用的库:request,pandas
4.jmeter高级应用(分布式、jenkins等)/监控平台/性能瓶颈分析
十、性能测试过程
1.什么是jmeter脚本
- 用户操作被测软件系统
某些场景
的动作流程 - 性能测试:重要场景从1到N
- 功能测试:1个用户
- 性能测试:N个用户
2.快速开发漂亮的脚本
- 准确——最基本要求,脚本可以正常运行
- 快速——借助技术手动快速高效完成脚本开发
- 漂亮——脚本逻辑、维护性高
3.开发脚本方案(任何脚本开始之前都要先建一个线程组)
- jmeter自带代理录制脚本:配置jmeter和浏览器代理服务器,点击启动,粗略录制请求过程(不常用)
- 文档+抓包——导出脚本(抓包后导出会话export sessions->all sessions,jmx文件)拖拽到jmeter
4.先使用一个线程组,即一个用户,使用查看结果数看是否能正确返回,再考虑并发
5.jmeter参数化(将脚本中的某些输入使用参数来代替,运行时指定参数的取值范围和规则)流程
- 找出需要做参数化的数据
- 准备提供给参数化需要的数据源
- 把脚本里的变量-》常量
6.jmeter参数化方式
- CSV文件-需要配置的元件
- 使用场景:账号,密码
- 函数式
- 随机数
- time
- counter计数器
- 变量
- 编程式