随着软件行业的快速发展,现代的软件系统越来越复杂,功能越来越多,测试人员除了需要保证基本的功能测试质量,性能也随越来越受到人们的关注。但是一提到性能测试,很多人就直接连想到Loadrunner。认为LR就等于性能测试,其实这是不对的。LR只是性能测试的一个工具,但性能测试不仅仅是LR。本文会从以下几个方面介绍基础的性能测试理论,后续也会持续更新相关文章,尽量理论结合实践,让性能测试学习不在是工具的学习。
**目录:**
一、 **什么是软件性能**
二、****不同群体眼中的性能****
**三、**性能测试类型****
四、****性能测试应用场景****
五、**性能测试基本概念**
**六、理发店模型和地铁进站模型**
**七、做好性能测试需要掌握的知识**
一、 **什么是软件性能**
**定义**:软件的性能是软件的一种**非功能特性**,它关注的不是软件是否能够完成特定的功能,而是在完成该功能时展示出来的**及时性**。
由定义可知性能关注的是软件的非功能特性,所以一般来说性能测试介入的时机是在功能测试完成之后。另外,由定义中的及时性可知性能也是一种指标,可以用时间或其它指标来衡量,通常我们会使用某些工具或手段来检测软件的某些指标是否达到了要求,这就是性能测试。
**性能测试定义**:指通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
二、**不同群体眼中的性能**
不同的人由于人生观、世界观、价值观以及教育背景、知识体系、人生阅历的不同,对于同一事物或问题的看法可能不同。对于软件性能也是如此,不同的人由于视角的不同,所关注的点也可能不同。下面来看看在不同的人群眼中性能分别是什么样的。
* **用户眼中的性能**
![](https://img.kancloud.cn/d1/db/d1dbab9be5e127ad7dfe4109ecb9956e_562x182.jpg)
* 开发眼中的性能
![](https://img.kancloud.cn/ae/5d/ae5d26a6f9a9f035fda5840402de7fec_588x301.jpg)
* **系统管理员眼中的性能**
![](https://img.kancloud.cn/13/87/13875f8b303feb667f7a854f4daf0dec_652x287.jpg)
* **测试眼中的性能是什么样的呢?**
![](https://img.kancloud.cn/01/03/010324188c09ff1b68f3fe824481ba92_338x395.jpg)
测试人员通常是做为软件质量控制的一个角色,不仅仅是找bug,需要对整个软件的质量负责,性能也属于质量的一部分,因此测试人员眼中的性能应该是全面的,考虑的东西也需要全面:
1、测试人员需要考虑全面的性能,包括用户、开发、管理员等各个视角的性能。
2、测试人员在做性能测试时除开要关注表面的现象如响应时间,也需要关注本质,比如用户看不到的服务器资料利用率,架构设计是否合理?代码是否合理等言方方面面。
**三、**性能测试类型****
1. 基准测试:在给系统施加较低压力时,查看系统的运行状况并记录相关数做为基础参考
2. 负载测试:是指对系统不断地增加压力或增加一定压力下的持续时间,直到系统的某项或多项性能指标达到安全临界值,例如某种资源已经达到饱和状态等 。
3. 压力测试:压力测试是评估系统处于或超过预期负载时系统的运行情况,关注点在于系统在峰值负载或超出最大载荷情况下的处理能力。
4. 稳定性测试:在给系统加载一定业务压力的情况下,使系统运行一段时间,以此检测系统是否稳定。
5. 并发测试:测试多个用户同时访问同一个应用、同一个模块或者数据记录时是否存在死锁或者其他性能问题,
四、**性能测试应用场景(领域)**
1、性能测试应用场景(领域)主要有:能力验证、规划能力、性能调优、缺陷发现、性能基准比较,下表简单介绍和对比了这几个场景的各自用途和特点:
![](https://img.kancloud.cn/5f/0f/5f0f280f115acd958be957216a8a4470_713x574.PNG)
![](https://img.kancloud.cn/90/13/90137c0df9b9630b9be9175c469c2f4b_713x349.PNG)
2、通常在某个性能场景(领域)中需要联合使用多种性能测试方法一起进行性能测试,下表为性能测试应用领域与测试方法关联:
![](https://img.kancloud.cn/6b/d2/6bd2ebdf756390c9f0c2fb21d44d4a5d_579x427.PNG)
**五、****性能测试基本概念**
** 1、响应时间**
a)定义:从用户发送一个请求到用户接收到服务器返回的响应数据这段时间就是响应时间
b) 关键路径:下图为一次http请求经过的路径,请求会经过网络发送到web服务器进行处理,如果需要操作DB,再由网络转发到数据库进行处理,然后返回值给web服务器,web服务器最后把结果数据通过网络返回给客户端。
![](https://img.kancloud.cn/8c/5e/8c5e8624d7321c075c721581c2a5c012_679x244.jpg)
c) 计算方法:Response time = (N1+N2+N3+N4)+ (A1+A2+a3),即:(网络时间 + 应用程序处理时间)
d) 响应时间-负载对应关系:
![](https://img.kancloud.cn/7d/2f/7d2f5811f4aac1c53a935206339cf7f4_633x365.jpg)
图中拐点说明:
1、响应时间突然增加
2、意味着系统的一种或多种资源利用达到的极限
3、通常可以利用拐点来进行性能测试分析与定位
**2、吞吐量**
a)定义:单位时间内系统处理的客户端请求的数量
b)计算单位:一般使用请求数/秒做为吞吐量的单位,出可以使用 页面数/秒表表示。
另外,从业务角度来说也可以使用 访问人数 /天 或 页面访问量/天 做为单位。
c)计算方法:Throughput = (number of requests) / (total time).
d)吞吐量-负载对应关系:
![](https://img.kancloud.cn/5a/7a/5a7a3013280bcbc7a5485c31103808de_912x538.png)
图中拐点说明:
1、吞吐量逐渐达到饱和
2、意味着系统的一种或多种资源利用达到的极限
3、通常可以利用拐点来进行性能测试分析与定位
**3、并发数:**
**并发用户数**:某一物理时刻同时向系统提交请求的用户数,提交的请求可能是同一个场景或功能,也可以是不同场景或功能。
**在线用户数**:某段时间内访问系统的用户数,这些用户并不一定同时向系统提交请求
**系统用户数**:系统注册的总用户数据
三者之间的关系:系统用户数 >= 在线用户数 >= 并发用户数
**4、资源利用率**
a) 定义:指的是对不同系统资源的使用程度,通常以占用最大值的百分比来衡量
b) 通常需要关注的服务器资源如下:
1、CPU:就像人的大脑,主要负责相关事情的判断以及实际处理的机制
2、内存:大脑中的记忆块区,将眼睛,皮肤等收集到的信息记录起来的地方,以供cpu进行判断,但是是临时的,访问速度快,如果关机或断电这里的数据会消失。
3、磁盘IO:大脑中的记忆区块,将重要的数据保存起来(永久保存,关机或断电不会丢失,速度慢),以便将来再次使用这些数据。
4、网络:
c)资源利用-负载对应关系:
![](https://img.kancloud.cn/36/0c/360c65ccf48db9b9d38ce2e453b73e11_1022x552.png)
图中拐点说明:
1、服务器某荐资源使用逐渐达到饱和
2、通常可以利用拐点来进行性能测试分析与定位
**5、其它常用概念:**
a) TPS:Transactions Per Second,每秒事务数
b)思考时间:用户每个操作后的暂停时间,或者叫操作之间的间隔时间,此时间内是不对服务器产生压力的
c) **点击数**:每秒钟用户向WEB服务器提交的HTTP请求数。这个指标是WEB应用特有的一个指标:WEB应用是"请求-响应"模式,用户发出一次申请,服务器就要处理一次,所以点击是WEB应用能够处理的交易的最小单位。如果把每次点击定义为一个交易,点击率和TPS就是一个概念。容易看出,点击率越大,对服务器的压力越大。点击率只是一个性能参考指标,重要的是分析点击时产生的影响。需要注意的是,这里的点击并非指鼠标的一次单击操作,因为在一次单击操作中,客户端可能向服务器发出多个HTTP请求.
d)PV:访问一个URL,产生一个PV(Page View,页面访问量),每日每个网站的总PV量是形容一个 网站规模的重要指标。
UV:作为一个独立的用户,访问站点的所有页面均算作一个UV(Unique Visitor,用户访问)
**六、理发店模型和曲线拐点模型**
上面介绍了很多性能测试中的基本概念,比较抽象,可以通过[性能测试理发店模型](http://www.cnblogs.com/jackei/archive/2006/11/20/565527.html) 或[地铁进站模型](http://www.cnblogs.com/puresoul/p/5458734.html)来帮忙我们更好的理解这些概念。这里不做详细介绍了,需要的可直接查看原文。
**七、做好性能测试需要掌握的知识:**
* 掌握一门编程语言
* 掌握计算机原理和操作系统知识
* 良好的网络基础
* 掌握数据库知识
* 中间件(apache,tomcat)
* 常用抓包工具
* 性能测试工具
- 第一章-测试理论
- 1.1软件测试的概念
- 1.2测试的分类
- 1.3软件测试的流程
- 1.4黑盒测试的方法
- 1.5AxureRP的使用
- 1.6xmind,截图工具的使用
- 1.7测试计划
- 1.8测试用例
- 1.9测试报告
- 2.0 正交表附录
- 第二章-缺陷管理工具
- 2.1缺陷的内容
- 2.2书写规范
- 2.3缺陷的优先级
- 2.4缺陷的生命周期
- 2.5缺陷管理工具简介
- 2.6缺陷管理工具部署及使用
- 2.7软件测试基础面试
- 第三章-数据库
- 3.1 SQL Server简介及安装
- 3.2 SQL Server示例数据库
- 3.3 SQL Server 加载示例
- 3.3 SQL Server 中的数据类型
- 3.4 SQL Server 数据定义语言DDL
- 3.5 SQL Server 修改数据
- 3.6 SQL Server 查询数据
- 3.7 SQL Server 连表
- 3.8 SQL Server 数据分组
- 3.9 SQL Server 子查询
- 3.10.1 SQL Server 集合操作符
- 3.10.2 SQL Server聚合函数
- 3.10.3 SQL Server 日期函数
- 3.10.4 SQL Server 字符串函数
- 第四章-linux
- 第五章-接口测试
- 5.1 postman 接口测试简介
- 5.2 postman 安装
- 5.3 postman 创建请求及发送请求
- 5.4 postman 菜单及设置
- 5.5 postman New菜单功能介绍
- 5.6 postman 常用的断言
- 5.7 请求前脚本
- 5.8 fiddler网络基础及fiddler简介
- 5.9 fiddler原理及使用
- 5.10 fiddler 实例
- 5.11 Ant 介绍
- 5.12 Ant 环境搭建
- 5.13 Jmeter 简介
- 5.14 Jmeter 环境搭建
- 5.15 jmeter 初识
- 5.16 jmeter SOAP/XML-RPC Request
- 5.17 jmeter HTTP请求
- 5.18 jmeter JDBC Request
- 5.19 jmeter元件的作用域与执行顺序
- 5.20 jmeter 定时器
- 5.21 jmeter 断言
- 5.22 jmeter 逻辑控制器
- 5.23 jmeter 常用函数
- 5.24 soapUI概述
- 5.25 SoapUI 断言
- 5.26 soapUI数据源及参数化
- 5.27 SoapUI模拟REST MockService
- 5.28 Jenkins的部署与配置
- 5.29 Jmeter+Ant+Jenkins 搭建
- 5.30 jmeter脚本录制
- 5.31 badboy常见的问题
- 第六章-性能测试
- 6.1 性能测试理论
- 6.2 性能测试及LoadRunner简介
- 第七章-UI自动化
- 第八章-Maven
- 第九章-测试框架
- 第十章-移动测试
- 10.1 移动测试点及测试流程
- 10.2 移动测试分类及特点
- 10.3 ADB命令及Monkey使用
- 10.4 MonkeyRunner使用
- 10.5 appium工作原理及使用
- 10.6 Appium环境搭建(Java版)
- 10.7 Appium常用函数(Java版)
- 10.8 Appium常用函数(Python版)
- 10.9 兼容性测试