十、性能测试
功能测试:测试被测系统是否具备某一项功能的测试,叫功能测试。
接口测试:测试被测系统某项功能所对应 但接口是否工作正常。(也可看成功能测试的一种)
性能测试:
一)性能测试概述
参考:性能测试总结(一)---基础理论篇 - 贺满 - 博客园
1)为什么要做性能测试
解决当下各类人群使用软件产品中遇到的性能问题
不同角色关注的问题:
- 普通用户:
- 响应时间(为什么会这么慢)
358原则:
- 如果3秒内可以打开一个页面,用户体验比较号
- 如果5秒内才打开,则会影响用户体验
- 如果超过8秒还为打开页面,则用户会放弃使用该产品
能不能不要报错?
错误率:error
- 开发工程师:
- 系统架构设计是否合理
- 数据库结构是否合理
- 代码算法是否还要提升空间
- 内存是否有内存泄漏现象
- 系统管理员:
- 服务器资源应用是否合理
- 数据库资源应用是否合理
- 系统是否支持可扩展
- 产品的软硬件配置是否可控
测试人员通常是做为软件质量控制的一个角色,不仅仅是找bug,需要对整个软件的质量负责,性能也属于质量的一部分,因此测试人员眼中的性能应该是全面的,考虑的东西也需要全面:
1、测试人员需要考虑全面的性能,包括用户、开发、管理员等各个视角的性能。
2、测试人员在做性能测试时除开要关注表面的现象如响应时间,也需要关注本质,比如用户看不到的服务器资料利用率,架构设计是否合理?代码是否合理等言方方面面。
2)什么是性能测试
1、性能测试的定义
通过自动化测试工具或者代码手段,来模拟正常、峰值负载访问被测系统,来观测系统各项性能指标是否合格的测试过程。(关注问题的发现)
通过各种测试手段,来解决多用户、高并发时系统存在的性能问题,为了提升用户体验度这样的测试过程。(关注问题的解决)
软件性能定义:软件的性能是软件的一种非功能特性,它关注的不是软件是否能够完成特定的功能,而是在完成该功能时展示出来的及时性。
由定义可知性能关注的是软件的非功能特性,所以一般来说性能测试介入的时机是在功能测试完成之后。另外,由定义中的及时性可知性能也是一种指标,可以用时间或其它指标来衡量,通常我们会使用某些工具或手段来检测软件的某些指标是否达到了要求,这就是性能测试。
性能测试定义:指通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
2、基本原理
- 基于协议的测试
- 多线程、多进程、协程
- 模拟用户真实场景
- 业务占比:核心业务/关键业务 --->性能测试场景设计
- 测试环境
- 页面资源
- 是否有本地缓存:无则访问时间较长
- 思考时间think time:固定、随机
- 用户数:
- 三个概念的区别
- 在线用户数:正在使用系统的用户数
- 并发用户数:同一时刻同时操作系统,发送请求的人数
- 系统用户数:一般是只注册过该系统的用户数
- 粗略估算并发用户数:在线用户数8-12%比例作为并发数
- 三个概念的区别
问题:一个月活10万用户量的系统,如何计算并发数?
计算出每秒的请求数
-
- 计算那天的活跃用户数最多,对应的活跃用户数是多少(根据日志来查看)
- 对应日货用户数最多的这天,对应的请求最多的时间段,有几个小时
- 再根据对应小时的请求书,来求出每秒的请求数是多少
TPS = 并发数/平均响应时间 (TPS:每秒请求数)
3、性能测试的分类
从大的方面:
- 基于代码的性能测试(关注点是函数或者方法执行的效率)(函数方法、类属性,代码层面优化,从单元测试开始,一般开发人员进行)
- 基于协议的性能测试(关注服务器端的性能:用户通过接口发送请求,模拟终端用户的后端接口)(一般招聘指的性能测试即基于性能测试。重点)
- 客户端的性能测试(页面或者客户端的响应时间)(比如页面的渲染(一般通过框架来完成,一般不会存在什么问题),移动端的性能测试:app响应时间比如启动时间,cpu的利用率,硬盘读取,网络流量等)
基于代码的性能测试问题:创建100个文本文件,1、循环100次 2、100线程,每个线程去创建一个线程
创建100个线程效率高。
基于协议的性能测试
- 压力测试:在一定的软胶囊公寓、网络条件下,模拟用户高并发(峰值负载),持续一段时间,检测系统的各项性能指标,关注峰值下系统的性能表现【秒杀、团购、抢票】(压力测试是评估系统处于或超过预期负载时系统的运行情况,关注点在于系统在峰值负载或超出最大载荷情况下的处理能力。)
- 目的:检测被测系统在奉组织下的运行情况,给最坏情况的情况(系统崩溃)设计预案
- 场景类型:门型场景
- 集合点
- 负载测试:在一定的软硬件、网络条件下,通过改变负载的方式,检测系统各项性能指标,得到系统在正常工作情况下,系统的最大用户数、最佳用户数,定位系统的瓶颈。(是指对系统不断地增加压力或增加一定压力下的持续时间,直到系统的某项或多项性能指标达到安全临界值,例如某种资源已经达到饱和状态等 。)
- 场景模型:拱形场景
- 理发店模型
最优用户数:3个,最大用户数:9.
- 配置测试:改变软硬件配置(架构配置、参数配置),观测不同的配置条件下的性能状态
- 目的:找到最优的配置
- 运维关注比较多
- 基准测试:benchmark testing,在一定的软硬件、网络条件下,模拟单用户操作系统,检测系统各项性能指标。(在给系统施加较低压力时,查看系统的运行状况并记录相关数做为基础参考)
- 目的:为了后面深入的性能测试作一个数据对比
- 并发测试:测试同一模块、同一应用在高并发的情况下,接口工作是否整(测试多个用户同时访问同一个应用、同一个模块或者数据记录时是否存在死锁或者其他性能问题)
- 目的:主要检测应用或者是接口在多用户情况下,是否存在缺陷(比如死锁等)
- 容量测试:在一定的软硬件、网络条件下,改变数据库的容量,模拟多用户,检测各项性能指标的过程
- 稳定性测试:主要强调长时间、正常负载情况下,观测系统各项指标的稳定性,不会出现致命的问题。(在给系统加载一定业务压力的情况下,使系统运行一段时间,以此检测系统是否稳定)
- 7*24小时
- 8小时、24小时、48小时(一般就是不会特别高并发的情况下)
- 目的:检验系统长时间运行,系统的稳定性,是否有异常表现(宕机、出现致命问题等)
什么时候(什么情况下)需要进行何种性能测试?
- 上新系统
- 用户场景(大量用户、同时使用、某个时间端内使用)
- 基准测试、负载测试、压力测试、容量测试
- 扩容
- 分析了解历史系统自身的性能表现,适当的扩容
- 基准、负载、压力、容量
- 调优
- 针对一上线的系统越来越慢,对系统进行优化配置,提升性能表现
- 基准测试、配置测试
- 修复
- 解决线上系统的并发死锁、内存泄漏的问题
- 并发测试
- 秒杀/团购
- 基准、负载、压力
性能测试介入的时机:
是在功能、接口测试都以及完成之后再来做性能
4、性能测试常见的指标
- 响应时间
- Response Time(毫秒级,秒级)
- 用户发出请求到服务器处理完请求返回客户端的这段时间
- 响应时间的组成
- 吞吐量
- Through output:横岭系统的业务处理能力
- TPS、QPS
- 事务的处理能力
- TPS:Transaction per second 每秒事务数
- QPS:Query per Second 每秒请求数
- 事务是分力度的,可大可小,搜索商品就是一个小的事务,由一个请求组成。而购物这个事务则由浏览器商品、加入购物车、付款等多个不同的请求组成
- 资源利用率
- CPU、内存、网络、磁盘读写IO
- 业界普遍标准:资源的利用率不高于70%~80%,如果某项资源高于这个值,则可能是性能瓶颈
- 拐点分析法,找出资源利用率的最佳状态
- 错误率
- 系统在负载情况下,失败请求的概率:错误率=(失败请求数/请求总数)*100
- 和功能测试的错误相区别:
- 在性能测试中,所谓的错误一般是由系统超时引起的错误,而不是功能错误
- 不同的系统对错误率的容忍限度不同,瀑布的业务系统错误率不超过万分之一就可以了,但像淘宝这样的大型虚脱,亿分之一。
5、性能测试中常见的专业术语
- 集合点
- 关联:比如依赖性
- 检查点:断言
- 用户数:
- 在线用户数
- 并发用户数
- 系统用户数
- 并发用户数<在线用户数<系统用户数
- PV
- 页面访问量PV
- 客户端向服务端提交的请求的数量,通常时作为网站系统的处理能力的衡量标准
- UV
- Unique Vistor:独立用户访问量
- 根据用户数量来进行统计,访问系统以此只能算一个UV
3)怎么进行性能测试
1、性能测试的流程
01 性能测试需求分析
- 弄清楚本册性能测试的需求究竟时什么,性能测试的目的时什么?
- 体现专业性
- 明确后续性能测试的要点
- 主要需求由几种
- 新系统的能力验证
- 历史系统(明确的客户需求)
- 找出系统的性能瓶颈
- 稳定性验证(强度测试)
02 了解系统架构
- 在环境搭建阶段,我们要了解项目的部署
- 在性能测试分析阶段,要通过不同的系统架构去设计相应的测试模型
- 测试模型:真正地模拟用户实际的操作场景
- 在性能定位和条用阶段,要更深入这些技术细节才能发现具体问题的位置
03 分析性能测试点
- 场景选择由哪些原则
- 使用频率高的业务
- 关键程度非常高的业务
- 资源占用非常严重的业务
04 测试工具选择
- 开源工具
- 商业工具
- 自研工具
05 测试计划
- 简介
- 性能测试的需求
- 测试环境
- 数据准备
- 测试工具
- 测试策略
- 人力和时间安排
06 测试环境搭建
- 主要的点时保证测试环境和生产环境一致
- 硬件环境(服务器、网络)
- 软件环境(系统版本、软件版本)
- 使用场景的一致性
07 测试执行
- 准备测试数据
- 使用测试工具实现测试操作
- 根据测试策略,使用不同的虚拟用户和测试组合来进行测试
- 监控系统资源利用率
- 重复3、4步,直到找到性能问题
08 瓶颈定位及性能调优
- 调优需要开发、运维工程师参与和主导
- 反复验证性能是否由提升
- 性能调优的顺序(从易到难)
- 硬件问题
- 网络问题
- 应用服务器、数据库的配置问题
- 源码、数据库设计问题
- 系统架构问题
2、性能测试技术
- 性能测试本质:请求(接口)+并发(多线程/进程/协程)
- 纯代码实现:python接口测试+多线程
- 工具实现:Jmeter
4)常用性能测试工具介绍——Jmeter
1、Loadrunner和Jmeter比较
优点 | 缺点 | |
Loadrunner |
|
|
Jmeter |
|
|
二)Jmeter使用
jmeter安装与配置: