一. 什么是性能测试?
1. 性能测试的概念
性能测试就是测试人员借助性能测试工具,模拟系统在不同场景下,对应的性能指标是否达到预期.
2. 性能测试和功能测试有什么区别
性能测试和功能测试是软件测试中两种不同的测试类型.
功能测试:
功能测试主要关注系统是否按照需求规格说明书中定义的功能进行正常运行,并符合用户的期望。其目的是验证软件的有效性或正确性,即确认软件在各种输入情况下能够按照业务逻辑正确地处理数据,并产生预期的输出结果。功能测试通常使用黑盒测试方法,即只关注软件的外部行为,测试人员不需要了解内部实现细节。
性能测试:
性能测试主要关注系统在不同负载和压力下的表现和响应能力.它通过模拟实际使用场景或特定负载情况,评估系统的性能指标,例如响应时间、吞吐量、并发用户数等。性能测试的目的是评估系统的效率、可靠性和可扩展性,确保系统能够在预期的负载下稳定运行。
测试方法:
功能测试通常采用黑盒测试方法,测试人员基于需求规格说明书或用户需求进行测试,验证软件是否满足特定功能要求。
性能测试通常采用白盒测试方法,测试人员需要了解系统的内部机制和架构,并使用性能测试工具进行负载模拟和性能指标的监测与分析。
3. 什么样的表现属于软件性能好的表现?
软件性能好的表现就是它能够高效、稳定、安全、可靠地处理业务需求并提供良好的用户体验。比如有两个软件:
此时软件1的性能更好.
4. 影响一个软件性能因素有哪些?
从软件层面来看:
- 算法和数据结构:选择合适的算法和优化数据结构可以提高软件的执行效率。
- 代码质量和优化:优化代码实现,减少冗余和低效操作,改善算法复杂度,提高代码执行效率。
- 并发处理和线程管理:合理利用多线程或并发处理机制,充分利用多核处理器以提高并发性能。
- 缓存和数据访问:使用适当的缓存策略、数据预取等技术,减少磁盘或网络访问次数,加快数据访问速度。
- 数据库优化:合理设计数据库结构、索引和查询语句,优化数据库配置和参数设置,提高数据库读写性能。
- 异常处理和错误处理:有效的异常处理机制和错误处理策略可以提高软件的稳定性和性能。
从硬件层面来看:
- CPU性能:CPU的型号、核心数和频率等特性会直接影响软件的计算能力和运行速度。
- 内存容量和带宽:足够的内存容量和高带宽可以提供更好的数据处理和存取能力。
- 磁盘性能:磁盘的速度、容量和读写性能对于数据访问和存储系统的性能至关重要。
- 网络带宽和延迟:如果软件依赖于网络通信,网络的带宽和延迟会影响软件的响应时间和并发处理能力。
从用户层面来看:
- 并发用户数:同时访问软件的用户数量。多用户同时访问可能导致性能下降。
- 用户请求类型和频率:不同类型和频率的用户请求对软件负载造成不同程度的影响。
- 用户设备性能:用户使用的设备性能(如CPU、内存等)可能会影响软件的性能和响应速度。
- 用户行为模式:用户的操作习惯、使用模式和交互方式都会对软件性能产生影响。
二. 为什么要进行性能测试
性能测试可以帮助我们:
- 获取系统性能的指标,作为性能指标的基准
- 验证系统的性能指标是否达到要求(性能需求)。如:
应用程序是否能够满足系统要求的各种性能指标
应用程序是否能处理预期的用户负载并有盈余能力
应用程序是否能处理业务所需要的事务数量
在预期和非预期的用户负载下,应用程序是否稳定
是否能确保用户在真正使用软件时获得舒适的体验
- 发现系统的性能瓶颈,内存泄漏等问题
- 系统正常工作的情况下的最大容量
- 帮助系统运维部门能更好的规划硬件配置
三. 性能测试常见的术语以及性能测试衡量指标
- 并发:并发就是大量用户在同一时间访问同一系统.
业务层面的并发用户数:指的是同时向服务器发送请求的用户数量。
后端服务器层面的并发用户数:指的是同时向服务器发送请求的请求数量。
- 用户数
系统用户数:系统注册的用户
在线用户数:成功登陆系统用户数
并发用户数:同时使用系统的用户数量。
注意:系统用户数 > 在线用户数 > 并发用户数
- 响应时间:从发送请求到接收到响应所经过的时间。
以上图为例,响应时间分为:
(1)用户响应时间为:
N1+A1+N2+A2+N3+A3+N4
(2)请求响应时间
服务器收到请求到发出响应这段时间是请求响应时间.
A1+N2+A2+N3+A3
影响一个软件响应时间的因素有哪些?
数据库性能.网络带宽.服务器处理性能.软件算法.逻辑用户设备等
- 事务响应时间
事务响应时间是指一个完整的业务交易(事务)从开始到结束所需要的时间。
- 每秒事务通过数量
处理的事务数量/事务花费的时间
每秒事务通过的数量越多自然而然说明软件的性能越好
- 点击量:用户点击数量
- 点击率:用户点击量/时间
- 吞吐量:用户一次请求和服务器之前的数据交互量
- 吞吐率:吞吐量/时间.吞吐率越高表示系统性能越好.反之吞吐率越低表示系统性能越差.
- 思考时间: 用户在对软件进行操作的时候,每一个操作中间间隔时间.
- 资源利用率:不同系统资源的使用情况,包含CPU,内存,硬盘,网络等.
面试题:在做性能测试的时候,你关注哪些指标?
答:以上全部
四. 性能测试分类
1. 基准性能测试定义
基准性能测试目的是确定系统的基准性能水平。基准性能测试通常在系统部署前进行,以评估系统在标准环境下的性能表现,并作为后续性能优化和比较的参考。
也就是:让系统在正常情况下运行,观察软件性能指标.
应用场景:软件刚上线需要进行性能摸底
2. 负载性能测试
在预定的负载条件下评估系统的性能。负载可以是用户数量、并发请求或数据量等。目的是测试系统在高负载情况下的性能表现,确定系统能够处理的最大负载和性能瓶颈。
也就是:验证软件在一定的压力环境下运行,观察性能指标是否出现了拐点.
3. 压力性能测试
通过增加负载达到或者超过系统预期的极限,评估系统的稳定性和鲁棒性。压力测试通常会持续一段时间,以验证系统在长时间运行后是否能够保持稳定。
也就是:系统处于饱和情况下,观察系统性能测试.
压力性能测试往往会把系统搞崩溃
4. 可靠性测试
测试系统在长时间运行或高负载下的可靠性和稳定性。通过持续运行系统、增加负载或模拟故障,评估系统是否会出现崩溃、错误或资源泄漏等问题。
也就是:验证系统在一个持续的时间段运行,在这个运行时间段,观察系统各项性能指标是否正常.比如一个软件,我们先让它持续运行一天,没问题后运行一周—>一个月—>一个季度—>一年.
总结:如果以一瓶矿泉水来做比较,则为下图所示:
五. 性能测试执行流程
回顾功能测试的流程如下:
需求分析→测试计划→测试设计→测试执行→测试评估(测试报告)→上线
和功能测试类似,性能测试的执行流程为:
需求分析→测试计划→选择一款性能测试工具→性能测试脚本编写→执行性能测试脚本→产出一个性能测试报告
性能测试中出现了不符合预期的情况称为性能瓶颈.
在性能测试中,出现了性能瓶颈,开发修复的过程称为优化.
性能瓶颈是一直有的,我们能做的是不断地优化和改进.
举例说明:
以我们的博客为例进行性能测试的执行流程如下:
- 需求分析:了解博客系统的用户需求和预期负载,明确性能测试的目标和需求,例如响应时间、吞吐量等指标。
- 确定测试场景:根据博客系统的业务需求,设计测试场景,包括用户登录、浏览博客列表、发布博客,删除等操作,并确定不同负载条件下的模拟用户数量和请求频率。
- 搭建测试环境:搭建与生产环境相似的测试环境,包括服务器、数据库、缓存等组件的设置和配置。确保测试环境能够支持预期的负载和数据量。
- 制定测试计划:制定详细的测试计划,包括测试用例、测试数据和测试时间表。明确每个测试场景的输入、操作步骤和预期输出。
- 选择一款性能测试工具:LoadRunner
- 性能测试脚本编写
- 准备测试数据:准备合适的测试数据,包括博客文章、用户信息等,以模拟真实的使用场景。
- 执行性能测试脚本
- 收集性能数据:收集性能测试期间产生的数据,包括日志、性能指标记录等,用于后续的分析和评估。
- 分析测试结果:根据收集到的性能数据,进行性能分析,找出性能瓶颈、潜在问题以及系统的弱点,并提出优化建议。
- 撰写测试报告:总结性能测试的结果和分析,撰写测试报告,包括测试过程、测试结果、性能问题和优化建议等内容。
- 优化和改进:根据测试报告中的性能问题和优化建议,对博客系统进行优化和改进,如代码优化、数据库调优、服务器配置调整等。
- 再次测试:在优化和改进后,再次进行性能测试,检验优化效果,确保系统在实际负载下的性能能够满足要求。