本篇将详细说明性能测试的方法和性能测试模型
目录
什么是软件性能?
不同群体眼中的性能
性能测试的基本概念
性能测试类型
性能测试的应用场景
理发店模型
什么是软件性能?
定义:
软件的一种非功能特性,关注点:
不是软件是否能够完成特定的功能而是完成该功能时展示出来的及时性。
由定义可知:
1、软件的非功能特性那么性能测试的介入点是在功能测试之后。
2、软件性能关注及时性意思是可以用时间或者其他指标来衡量这个及时性标准故我们会用某些工具或手段来检测软件的某些指标是否达到了要求这就是性能测试。
综上所述可知性能测试的定义:
通过自动化的测试工具模拟多种正常、峰值及异常负载条件来对系统的各项性能指标进行测试
不同群体眼中的性能
从三个角度去思考:(测试眼中)
1、用户的角度
(1)还要我等多久?---响应时间
(2)为什么总是失败?---稳定性
2、开发者角度
(1)架构是否合理?---架构设计
(2)数据库设计是否合理?---数据库设计
(3)代码是否存在性能问题?---代码
(4)是否有不合理的内存使用?---代码
(5)是否有不合理的线程同步操作?---代码
(6)是否有不合理的资源竞争?---代码
(7)代码算法是否还能有进一步提升?---代码
3、系统管理员角度
(1)服务器资源使用合理吗?---资源利用率
(2)数据库使用合理吗?---资源利用率
(3)系统能否实现扩展?---可扩展性
(4)最终支撑多少用户访问?---系统容量
(5)最大业务处理量?---系统容量
(6)系统有哪些潜在的瓶颈?---可扩展性
(7)更换哪些设备,添加哪些机器可以提高系统性能?---可扩展性
(8)7×24小时连续不间断业务访问?---稳定性
测试人员作为软件质量控制的角色,不仅仅要找bug,还要对整个软件质量负责。性能也属于质量的一部分。
测试人员的角度
1、全面的性能,包括的角度:用户角度、开发人员的角度、系统管理员的角度
2、现象和本质,包括:响应时间、资料利用率、架构设计...
性能测试的基本概念
1、响应时间
定义:
用户发送一个请求到用户接收到服务器返回的响应数据的这段时间被称为响应时间
(这里首先要理解这个完整的过程)
用户(发送请求,经过T1时间)---服务器(接收请求并处理请求,经过A1时间)---数据库(服务器将请求发送给数据库,经过T2时间)---数据库根据请求搜索内容(经过A2时间)---数据库返回搜索内容给服务器(经过T3时间)---服务器(接收到数据库返回的内容并进行处理。经过A3时间)---数据库通过互联网返回内容给用户(经过T4时间)
这是一个完整的请求与收到响应数据的过程。
概括:
求会经过网络发送到web服务器进行处理,如果需要操作DB,再由网络转发到数据库进行处理,然后返回值给web服务器,web服务器最后把结果数据通过网络返回给客户端。
计算方法:
Response Time=(N1+N2+N3+N4)+(A1+A2+A3)
(网络时间+应用程序处理时间)
图中拐点说明:
1、响应时间突然增加---访问人数增加
2、系统的一种或多种资源利用达到的极限
3、可以利用拐点来进行性能测试分析与定位
2、吞吐量
定义:
单位时间内系统处理的客户端请求的数量
单位:
请求数/秒
页面数/秒
访问人数/天
页面访问量/天
...
计算方法:
Throughput(n.吞吐量)=(number of requests)/(total time)
number of requests(n.请求):请求数量
total(adj.全部的) time:全部的时间
图中拐点说明:
1、吞吐量逐渐达到饱和
2、系统的一种或多种资源利用达到的极限
3、可以利用拐点来进行性能测试分析与定位
3、并发数
(1)并发用户数(并发:大量用户同时性操作)
定义:
某一物理时刻同时向系统提交请求的用户数 (提交的请求可能是同一个场景或功能,也可以是不同场景或功能。)
(2)在线用户数
定义:
某段时间内 访问系统的用户数 (用户不一定同时向系统提交请求)
(3)系统用户数
定义:
系统注册的总用户数据
这三者的关系:
系统用户数>=在线用户数>=并发用户数
4、资源利用率
定义:
对不同系统资源的使用程度(通常以:占用最大值的百分比来衡量)
需要关注的服务器资源:
(硬件)
CPU
内存
磁盘IO
网络:
图中拐点说明:
1、服务器某荐资源使用逐渐达到饱和
2、可以利用拐点来进行性能测试分析与定位
其它常用概念:
TPS:Transactions Per Second,每秒事务数
思考时间: 用户每个操作后的暂停时间,或者叫操作之间的间隔时间(等待加载时间)此时间内是不对服务器产生压力的
点击数:每秒钟用户向web服务器提交的http请求数。 web应用特有的一个指标:web应用是"请求-响应"模式,用户发出一次申请,服务器就要处理一次,所以点击是web应用能够处理的交易的最小单位。如果把每次点击定义为一个交易,点击率和TPS就是一个概念。
点击率越大,对服务器的压力越大。
这里的点击并非指鼠标的一次单击操作,因为在一次单击操作中,客户端可能向服务器发出多个HTTP请求.
PV(Page View,页面访问量),每日每个网站的总PV量
UV(Unique Visitor,用户访问):作为一个独立的用户,访问站点的所有页面均算作一个UV
性能测试的类型
-
基准测试:在给系统施加较低压力时,查看系统的运行状况并记录相关数做为基础参考
-
负载测试:是指对系统不断地增加压力或增加一定压力下的持续时间,直到系统的某项或多项性能指标达到安全临界值
例如:某种资源已经达到饱和状态等 。
-
压力测试:压力测试是评估系统处于或超过预期负载时系统的运行情况
关注点在于系统在峰值负载或超出最大载荷情况下的处理能力。(注意压力测试和负载测试的关系,通常在负载测试之后就是压力测试。负载测试寻找临界值。压力测试测试超过临界值的情况)
-
稳定性测试:在给系统加载一定业务压力的情况下,使系统运行一段时间,以此检测系统是否稳定。
-
并发测试: 测试多个用户同时访问同一个应用、同一个模块或者数据记录时是否存在死锁或者其他性能问题
性能测试的应用场景
基准测试 | 负载测试 | 压力测试 | 并发测试 | 稳定性测试 | |
---|---|---|---|---|---|
能力验证 | √ | √ | √ | √ | |
规划能力 | √ | √ | |||
性能调优能力 | √ | √ | √ | ||
缺陷发现能力 | √ | √ | |||
性能基准比较 | √ | √ |
性能用途及特点
关注点 | 典型场景 | 特点 | |
---|---|---|---|
能力验证 | 在给定的软硬件条件下,系统能否具有预期的能力表现 | 平均响应时间小于2秒的前提下,如何判断系统是否能够支持50万用户/天的访问量? | 1、运行环境已确定。2、设计测试方案及用例。包括操作序列和并发用户量,需要明确的性能目标。 |
规划能力 | 如何使系统具有我们要求的性能能力 | 系统到时候是否能支持这么多用户量?如果不能需要如何调整系统的配置? | 1、一种探索性测试。2、用于了解系统性能和获得扩展性能的方法 |
性能调优能力 | 用于对系统性能进行调优 | 系统上线运行一段时间后响应速度越来越慢,此时应该如何办? | 1、每次只改变一个配置2、切忌无 休止的调优 |
缺陷发现能力 | 发现缺陷或问题重现、定位手段 | 某些缺陷只有在高负载的情况下才能暴露出来,如线程锁、资源竞争或内存泄露。 | 1、发现并发问题。2、对系统已经出现的问题进行重现和定位 |
性能基准比较 | 每次迭代中的性能表现变化,判断迭代是否达到了目标。 | 敏捷迭代开发流程 | 1、需求变化频繁。很难定义完善的性能测试目标2、没有时间在每个迭代开展详细的性能测试(通过通过建立性能基线,通过比较每次迭代中的性能表现变化,判断迭代是否达到了目标。) |
理发店模型
1、理发店模型(并发量、响应时间---完成事务需要的时间、稳定性、资源利用率、用户角度(理发店顾客)、开发人员角度(理发店老板)、管理人员角度(Tony老师))(理发店对应的就是---服务器)
前提条件:
-
理发店有三位Tony老师
-
每位理发师剪一个头发的时间都是一小时
-
顾客能容忍的等待时间是三小时---超过三个小时就会离开
场景(每小时来理发店的富婆数(用户并发量)) | 理发师状态(资源利用率) | 顾客状态(用户情况) | 理发师持续工作时间(稳定性) |
---|---|---|---|
一个富婆(并发量很低,基准测试中) | 一个Tony老师工作,两个Tony老师空闲(资源利用率没到最大) | 无须等待(响应时间快) | 【低压区域】 |
两个富婆(并发量很低,基准测试中) | 两个Tony老师工作,一个Tony老师空闲(资源利用率没到最大) | 无须等待(响应时间快) | 【低压区域】 |
三个富婆(达到一定负载) | Tony老师全部工作,没有Tony老师空闲(资源利用率满了) | 无须等待(响应时间快) | 【低压区域】 |
四个富婆(处于负载状态) | Tony老师全部工作,没有Tony老师空闲(资源利用率满了) | 一个处于等待状态(响应时间为(等待的一小时+剪头发的一小时)两小时,用户处于耐心 阈值中) | 一个Tony老师剪完头发以后又会出现两个Tony老师空闲(资源利用率降低且没有影响到用户体验)【高负载区域】 |
五个富婆(处于负载状态) | Tony老师全部工作,没有Tony老师空闲(资源利用率满了) | 两个处于等待状态(响应时间为(等待的一小时+剪头发的一小时)两小时,用户处于耐心 阈值中) | 两个Tony老师剪完头发以后又会出现一个Tony老师空闲(资源利用率降低且没有影响到用户体验)【高负载区域】 |
六个富婆(处于负载状态) | Tony老师全部工作,没有Tony老师空闲(资源利用率满了) | 三个处于等待状态(响应时间为(等待的一小时+剪头发的一小时)两小时,用户处于耐心 阈值中) | 三个Tony老师剪完头发会立即投入下一次剪头发当中(不会出现资源空闲且没有影响用户体验)【高负载区域】 |
七个富婆(处于负载极限、压力边缘) | Tony老师全部工作,没有Tony老师空闲(资源利用率满了) | 四个处于等待状态(其中三个响应时间为两小时(等待的一小时+剪头发的一小时)处于耐心 阈值中。另外一个响应时间为(等待的两小时+剪头发的一小时)三小时,用户处于耐心 极限) | 两个Tony老师连续工作两轮,一个Tony老师连续工作三轮(第三轮出现资源利用率降低情况但是没有影响用户体验(不希望看到))【高负载区域】 |
八个富婆(处于负载极限、压力边缘) | Tony老师全部工作,没有Tony老师空闲(资源利用率满了) | 五个处于等待状态(其中三个响应时间为两小时(等待的一小时+剪头发的一小时)处于耐心 阈值中。另外两个响应时间为(等待的两小时+剪头发的一小时)三小时,用户处于耐心 极限) | 一个Tony老师连续工作两轮,两个Tony老师连续工作三轮(第三轮出现资源利用率降低情况但是没有影响用户体验(不希望看到))【高负载区域】 |
九个富婆(处于负载极限、压力边缘) | Tony老师全部工作,没有Tony老师空闲(资源利用率满了) | 六个处于等待状态(其中三个响应时间为两小时(等待的一小时+剪头发的一小时)处于耐心 阈值中。另外三个响应时间为(等待的两小时+剪头发的一小时)三小时,用户处于耐心 极限) | 三个Tony老师连续工作三轮(第三轮没有出现资源空闲,Tony老师一直处于高负荷状态)【高负载区域/高压力区域】 |
十个富婆(压力爆表) | Tony老师全部工作,没有Tony老师空闲(资源利用率满了) | 七个处于等待状态(其中三个响应时间为两小时(等待的一小时+剪头发的一小时)处于耐心 阈值中。另外三个响应时间为(等待的两小时+剪头发的一小时)三小时,用户处于耐心 极限,最后一个一定会离开(超过耐心阈值)) | Tony老师一直处于高负荷状态,但是一定会有一个富婆离开。(很关键)【超负载区域/高压力区域】 |
下面从三个角度去分析理发店模型从而得出测试应该看到的“性能”是什么:
-
富婆的角度(用户角度):
还要等多久才能剪头发?---富婆完成一次剪头发(事务)要等待的时间---响应时间
-
理发店老板的角度(开发人员角度):
这家店收入支出合理不?---代码合理不?--代码
这家店Tony老师配置合理不?---架构设计合理不?---架构设计
-
店长的角度(管理者的角度):
Tony老师人数配置和富婆人数配置比例是否合理?---Tony老师空闲没事做偷懒的情况有没有?有多少?---资源利用率
什么情况下Tony老师没有偷懒情况?这种情况Tony老师能坚持多久?---Tony老师一直处于高负荷状态工作,能在这种状态下工作多久?---稳定性
Tony老师处于高负荷状态下工作时候的富婆人数是多少?富婆人数在多少人数范围内Tony老师一直处于高负荷状态下工作且不会有富婆离开?---最佳并发人数是多少?最大并发人数是多少?---并发量
以上就是我们测试软件性能的时候需要考虑到的东西。
标准的软件测试性能模型:
Utilization:资源利用率---硬件资源和软件资源 Thoughput:吞吐量---每秒事务数 Response Time:响应时间---完成一件事务的时间 Number of Concurrent Users:并发用户数
The Optimum Number of Concurrent Users:最佳并发用户数---Light Load和Heavy Load 两个区域交界处的并发用户数 The Maximum Number of Concurrent Users:最大并发用户数---Heavy Load和Buckle Zone两个区域交界处的并发用户数
Light Load:较轻的压力 Heavy Load:较重的压力
Buckle Zone:用户无法忍受并放弃请求
当系统的负载等于最佳并发用户数时,系统的整体效率最高,没有资源被浪费,用户也不需要等待;当系统负载处于最佳并发用户数和最大并发用户数之间时,系统可以继续工作,但是用户的等待时间延长,满意度开始降低,并且如果负载一直持续,将最终会导致有些用户无法忍受而放弃而当系统负载大于最大并发用户数时,某些用户无法忍受超长的响应时间而放弃。
这里面的一些概念:
1、理发店指:操作系统+数据库
2、Tony老师指:服务器
3、富婆指:用户
4、理发店老板指:开发人员
5、理发店长指:系统管理人员
综上可得性能测试的四个大的标准:
1、多---并发量多
2、快---响应时间快
3、好---小于最佳并发用户状态下服务器持续工作时间久(稳定性)
4、省---资源利用率低(硬件和软件)
“最佳并发用户数(The Optimum Number of Concurrent Users)”和“最大并发用户数(The Maximum Number of Concurrent Users)”
保证最佳并发用户数要大于系统的平均负载---其目的是:提高用户满意度
(用户就是最高需求标准)
于一个系统来说,我们应该 确保系统的最大并发用户数要大于系统需要承受的峰值负载
做好性能测试需要掌握的知识
-
掌握一门编程语言---Python、shell、Java等
-
掌握计算机原理和操作系统知识---Linux、Windows
-
良好的网络基础---网络安全基础
-
掌握数据库知识---SQL语句
-
中间件(apache,tomcat)---服务器
-
常用抓包工具---Fiddler等
-
性能测试工具---Loadrunner等