性能测试
定义
编辑
性能测试, Performance Test。
性能测试是一种测试实践,用于确定系统在特定工作负载下的响应性和稳定性方面的表现。它还可以用于调查、测量、验证或验证系统的其他质量属性,例如可扩展性、可靠性和资源使用情况。
性能测试通常使用自动化的测试工具模拟多种正常、峰值以及异常负载条件进行测试。
通常包括以下几个方面:
-
评估系统的能力,测试中得到的负荷和响应时间数据可以被用于验证所计划的模型的能力,并帮助作出决策。
-
识别体系中的弱点:受控的负荷可以被增加到一个极端的水平,并突破它,从而修复体系的瓶颈或薄弱的地方。
-
系统调优:重复运行测试,验证调整系统的活动得到了预期的结果,从而改进性能。
-
检测软件中的问题:长时间的测试执行可导致程序发生由于内存泄露引起的失败,揭示程序中的隐含的问题或冲突。
-
验证稳定性(resilience)可靠性(reliability):在一个生产负荷下执行测试一定的时间是评估系统稳定性和可靠性是否满足要求的唯一方法。
性能测试类型多样,常见的有负载测试,压力测试,耐久性测试、峰值测试、基准测试、容量测试,并发测试、可靠性/稳定性测试、配置测试、失败测试等。
-
负载测试:检查应用程序在预期的用户负载下的执行能力。 目的是在软件应用程序上线之前确定性能瓶颈。
-
压力测试:涉及在极端工作负载下测试应用程序,以查看其如何处理高流量或数据处理。 目的是确定应用程序的断点。
-
耐久性测试: 已完成以确保该软件可以长时间处理预期的负载。
-
峰值测试:测试软件对用户产生的负载突然大峰值的反应。
-
基准测试:比较新的或未知测试对象与已知参照标准(如现有软件或评测标准)的性能。
-
容量测试:数据被填充到数据库中,并且监视整个软件系统的行为。 目的是在变化的数据库容量下检查软件应用程序的性能。确定系统最大承受量,譬如系统最大用户数,最大存储量,最多处理的数据流量等。
-
并发测试:测试多个⽤户同时访问同⼀个应⽤、同⼀个模块或者数据记录时是否存在死锁或者其他性能问题,⼏乎所有的性能测试都会涉及⼀些并发测试。
-
可扩展性测试:可扩展性测试的目的是确定软件应用程序在“扩展”以支持用户负载增加方面的有效性。 它有助于计划软件系统的容量增加。
-
可靠性测试(稳定性测试):也称为浸泡测试,通常用于确定系统是否能够承受持续的预期负载。在浸泡测试期间,会监控内存利用率以检测潜在的泄漏。同样重要但经常被忽视的是性能下降,即确保在长时间持续活动之后的吞吐量和/或响应时间与测试开始时一样好或更好。它本质上涉及在很长一段时间内向系统施加大量负载。目标是发现系统在持续使用下的行为方式。通过给系统加载⼀定的业务压⼒(如CPU资源在70%~90%的使⽤率)的情况下,运⾏⼀段时间,检查系统是否稳定因为运⾏时间较长,通常可以测试出系统是否有内存泄漏等问题。
-
配置测试:主要是通过对被测试软件的软硬件配置进⾏测试,找到系统各项资源的最优分配原则。配置测试能充分利⽤有限的软硬件资源,发挥系统的最佳处理能⼒,同时可以将其与其他性能测试类型联合应⽤,从⽽为系统提供重要依据。
-
失败测试:对于有冗余备份和负载均衡的系统,通过失败测试来检验如果系统局部发⽣故障,⽤户能否继续使⽤系统,⽤户受到多⼤的影响,如⼏台机器做均衡负载,⼀台或⼏台机器垮掉后系统能够承受的压⼒。
-
竞争测试:软件竞争使用各种资源(数据,内存等),测试它与其他相关系统对资源的争夺能力。
-
疲劳强度与大数据量测试:采用系统稳定运行情况下能够支持的最大并发用户数,持续执行一段时间业务,通过综合分析交易执行指标和资源监控指标来确定系统处理最大工作量强度性能的过程。
实践出处
编辑
暂无,欢迎补充
为什么
编辑
性能测试的目的是验证软件系统是否能够达到用户提出的性能指标,同时发现软件系统中存在的性能瓶颈,优化软件,最后起到优化系统的目的。
软件系统支持的特性和功能不是唯一的问题。 软件应用程序的性能(如响应时间,可靠性,资源使用率和可伸缩性)至关重要。 性能测试的目的不是发现错误,而是消除性能瓶颈。
进行性能测试是为了向涉众提供有关其应用程序的有关速度,稳定性和可伸缩性的信息。 更重要的是,性能测试发现了产品上市之前需要改进的地方。 如果没有性能测试,软件可能会遇到以下问题:运行速度慢,同时多个用户同时使用它,跨不同操作系统的不一致以及可用性差。
性能测试将确定其软件在预期的工作负载下是否满足速度,可伸缩性和稳定性要求。 由于不存在或性能测试不佳而发送到市场的性能指标较差的应用程序可能会获得不良声誉,并且无法达到预期的销售目标。
何时使用
编辑
通常在系统测试阶段、硬件测试、软硬件结合的产品。
敏捷测试中,也可以在生产环境中进行性能测试。(因为敏捷开发中迭代速度很快,在研发环境往往没有充分的时间进行性能测试。另外研发环境不太可能全面覆盖真实场景。)
在线性能测试通常使用:全链路压测,在线性能监控,流量回放技术等。
如何使用
编辑
性能测试步骤
-
确定测试目标
-
确认用户场景
-
选择性能测试类型
-
测试设计
-
配置环境
-
执行性能测试
-
分析测试结果
-
给出调优计划
-
调优后再次进行测试
常用性能测试工具:
-
LoadRunner
-
JMeter
-
Perf
-
Locust
-
欢迎推荐更多工具
软件架构在实际测试中制约着测试策略和工具的选择:
-
BS结构程序一般会关注Web服务器指标指标:
-
Avg Rps: 平均每秒钟响应次数=总请求时间 / 秒数;
-
Avg time to last byte per terstion (mstes):平均每秒业务脚本的迭代次数;
-
Successful Rounds:成功的请求;
-
Failed Rounds :失败的请求;
-
Successful Hits :成功的点击次数;
-
Failed Hits :失败的点击次数;
-
Hits Per Second :每秒点击次数;
-
Successful Hits Per Second :每秒成功的点击次数;
-
Failed Hits Per Second :每秒失败的点击次数;
-
Attempted Connections :尝试链接数;
-
-
CS结构程序,由于一般软件后台通常为数据库,所以我们更注重数据库的测试指标:
-
User Connections :用户连接数,也就是数据库的连接数量;
-
Number of deadlocks:数据库死锁;
-
Buffer Cache hit :数据库Cache的命中情况
-
在实际中我们还会察看多用户测试情况下的内存,CPU,系统资源调用情况。这些指标其实是性能测试中的竞争测试。
输出物
编辑
性能测试计划 性能测试用例和数据 性能测试结果报告 性能调优方案和调优结果报告
常见问题解答
编辑
压力测试和负载测试的区别是什么?
-
压力测试与负载测试的最大区别是测试目的不同。压力测试是使系统性能达到极限的状态,以获得系统能提供的最⼤服务级别。负载测试是在保持性能指标要求的前提下测试系统能够承受的最大负载。
-
负载测试和压力测试可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。
参考资料
编辑
《敏捷测试 - 以持续测试促进持续交付》 作者:朱少民、李洁
实战案例
编辑
欢迎补充!
关键词
编辑
性能测试,压力测试,负载测试,非功能测试
我们非常重视知识产权,我们在非常努力地寻找最初的出处来源并注明出处。但因为互联网信息浩瀚,难免会有疏漏。如果您觉得有侵犯您的权益,请联系我们。