1. 什么是性能


产品性能
通常所说的产品性能,实际上是指产品的功能和质量两个方面。
功能是构成竞争力的首要要素。
用户购买某个产品,首先是购买它的功能,也就是实现其所需要的某种行为的能力。
质量是指产品能实现其功能的程度和在使用期内功能的保持性,质量可以定义为“实现功能的程度和持久性的度量”,使它在设计中便于参数化和赋值。
计算机性能
计算机的功能强弱,由系统结构、指令系统、硬件组成、软件配置等多方面因素决定。
软件性能
软件的性能是软件的一种非功能特性,它关注的不是软件是否能够完成特定的功能,而是在完成该功能时展示出来的及时性。
性能测试
由定义可知性能关注的是软件的非功能特性,所以一般来说性能测试介入的时机是在功能测试完成之后。另外,由定义中的及时性可知性能也是一种指标,可以用时间或其它指标来衡量,通常我们会使用某些工具或手段来检测软件的某些指标是否达到了要求,这就是性能测试。

测试工程师通常是对整个软件质量负责,除了找出bug,也得对软件性能进行测试
测试人员应该考虑的性能测试角度是全面的,包括了客户、开发、运维的角度
2. 性能测试
应用服务器性能测试,多个客户端同时访问造成压力
- web应用服务器
- 应用服务器
- 数据库
- 网络

软件系统的性能测试是一个很大的概念,覆盖面非常广泛。
- 对软件系统而言,包括执行效率,资源占用,系统稳定性,安全性,兼容性,可靠性,可扩展性等
- 性能测试是描述测试对象与性能相关的特征,并且对其进行评价而实施的一类测试
- 通过自动化测试工具模拟多种正常,峰值以及异常负载条件对系统的各项性能指标测试
2.1. 性能测试概述
性能测试通常包含以下内容
- 评估生产准备状态
- 评估性能判定标准
- 比较多个不同系统或同一系统不同配置之间的性能特征
- 找出导致性能问题的源头
- 帮助进行系统调优
确定吞吐量水平
2.2. 性能测试核心活动
确定测试环境,物理环境、生产环境、测试团队可以利用的工具与资源确定性能验收标准,响应时间、吞吐量、资料利用总目标和限制计划和设计测试,确定关键场景,确定典型用户的可变性,以及如何模拟这些变化,确定测试数据,确定要收集的度量值配置测试环境,随着需要测试的功能和组件的完善,逐步为每个策略执行所需的测试环境,工具以及资源实现测试设计,根据测试设计逐步展开性能测试执行测试,执行和监控测试分析结果,报告以及重复测试,整合并共享结果数据预估软件发布准备,预测应用软件在实际生产方面的特性,基于这些预测来评估是否强调性能因素。- 提供相关数据,反应用户可能会对系统性能特征有哪些不满意
- 提供数据预测,由于可收缩性和稳定性问题,或由于用户不满意应用软件的相应时间导致的收入损失或信用损失。
2.3. 性能测试种类
- 负载测试
- 压力测试
- 容量测试
- 配置测试
- 并发测试
- 可靠性测试
- 稳定性测试
解释:
负载测试:通过逐步加压,达到预定的性能阈值的目标,如内存使用率小于70%
压力测试:逐步加压,使得系统资源资源饱和,数据库,中间件,web服务器
并发测试:多个用户同时访问同一模块
容量测试:数据库最佳容量,数据库处理能力
可靠性测试:稳定、疲劳测试,系统在高压下,长时间运行是否稳定
异常测试:模拟如负载均衡节点,高可用节点的宕机,系统架构的运转情况
2.3.1. 系统分层

2.3.2. 常见数据指标名词
TPS:
Transactions Per Second(每秒传输的事物处理个数)
每秒钟能够处理的事务数(包括请求、请求服务器、等待服务器响应等)
TPS值越高,一秒钟能够处理的事务数越多,代表软件处理速度快,效率更高
请求响应时间
客户端发起请求开始到收到服务端的响应,整个过程的时间
并发场景
多用户在系统上进行同一操作,如双十一,秒杀苹果手机
多用户在系统上进行不同操作,如双十一,小王看电脑,小李看口红
并发用户数
同一单位时间内,对系统发起请求的用户数量
吞吐量
网络中传输数据量的总和
吞吐率
吞吐率=吞吐量/传输时间
点击率
每秒钟用户在页面上进行的点击动作次数,可能一次点击发送了多次请求
资源使用率
系统资源的单位统计,cpu、内存、磁盘io
| 对比 | Loadrunner | JMeter |
|---|---|---|
| 量级 | 重 | 轻 |
| 易用性 | 简单 | 简单 |
| 开源 | 否 | 是 |
| 语言 | c、java | java |
| 收费 | 是 | 否 |
2.4. 地铁模型

为了能够更好理解性能测试中诸多概念和理论,我们以地铁模型给大家讲述性能测试相关知识。
如图,拥挤的北京地铁是相当可怕的,我们每天都要乘坐地铁上下班
好比我每天乘坐13号线,那人多的简直了,在乘地铁的过程中:
- 13号线立水桥站只有3个刷卡机
- 人少的时候,我可以很快的刷卡进站,用时1S
- 人多的时候,我需要排队进站,用时5S
- 若是排队进站时间过久,我可能会放弃坐地铁

乘客场景可能出现如下
低峰期

- 仅一个乘客进站,只用了一台刷卡机,使用了1S,剩余两台刷卡机闲着
- 有两名乘客,两名乘客仍然可以在1S内进站,使用了2台刷卡机,剩余一台闲着
- 有三名乘客进站,三人仍然可以1S内进站,使用了3台刷卡机,资源充分利用
高峰期

- 有六个人要进站,a、b、c三名乘客先进站,d、e、f乘客需要等待
- a、b、c三人进站时间是1S
- d、e、f必须等待1s才可以进站,所以用时2s进站
得出结论,每秒可以进入3名乘客
第1S可以进入a、b、c
第2秒进入d、e、f,这三位等待时间延长了,理解为响应时间延长
- 当有9名乘客进站,可以推断出
- a、b、c
响应时间是1s,进站时间1s - d、e、f
响应时间是2s,进站时间1s+等待时间1s - g、h、i
响应时间是3s,进站时间1s+等待时间2s
- a、b、c
- 当10名乘客进站,那肯定最后一名乘客进站时间是4s,进站时间1s+等待时间3s
处在高峰期的时候,响应时间逐渐增长
如果处于火车站的地铁站,那么情况又不同了
