一 性能测试
包括:评估系统的能力(负荷、响应时间等)、识别系统的弱点(系统的瓶颈)、系统调优(长时间运行,可能有内存泄露等潜在问题)、验证稳定性可靠性(在一个生产的负荷下执行测试一定的时间)
2.思想
模拟生产环境的业务压力量和使用场景组合,测试系统的性能是否满足生产性能要求
3.特点
1. 验证系统是否满足预期的能力,
方法:a.确定用户场景 b.给出需要关注的性能指标 c.测试执行 d.测试分析2. 需要事先了解被测系统的典型场景,并具有确定的性能目标。
典型场景:要求系统在100个并发用户的条件下进行某业务的操作,响应时间不超过5秒
3. 要求在已确定的环境下运行。要求硬件设备、软件环境、网络条件、基础数据等。
二 性能测试的类型
负载测试、压力测试、稳定性测试(可靠性测试)、配置测试、并发访问测试、失效恢复测试等
2.1.负载测试
2.1.1 思想:在被测系统上不断的增加压力,直到性能指标,例如:“响应时间”超过预定的指标或某种资源使用已经达到饱和状态。可以找到系统处理的极限,为系统调优提供依据
2.1.2 目标:不关注稳定性,不关注长时间的运行,只是得到不同负载下的性能指标即可。
2.1.3 方法:从比较小的负载开始,逐渐增加模拟用户的数量(增加负载),观察不同负载下应用程序的响应时间、所耗资源。通过“检测-加压-直到性能指标超出预期”的方式是实现.
2.1.4 特点:
a. 找到系统处理能力的极限
b. 极限描述方式:“在给定条件下,最多允许120个并发用户访问”,或者“在给定条件下最多能够在1小时内处理2100笔业务”
c. 预期性能指标描述:“响应时间不超过10秒”,“服务器平均cpu利用率低于65%等指标”
d. 需要在给定的环境下进行,考虑被测系统的业务压力量和典型场景,是测试具有业务意义
一般用来了解系统的性能容量(系统在保证一定响应时间的情况下能够允许多少并发用户的访问)、或配合性能调优来使用(比较调优前后的性能差异2.2 压力测试
2.2.1 思想:该方法是在一定的饱和状态下(长时间运行),例如CPU、内存等饱和使用的情况下,系统能够处理的会话能力,以及系统是否会出现错误,反应变慢,内存泄露、系统崩溃等现象。
2.2.2 特点:
a. 一般通过模拟负载等方法,是系统资源达到较高的水平
b. 一般情况下,会把压力设定为“CPU使用率达到75%以上,内存使用率达到70%以上”下,测试系统的能力。
压力测试的依据:JVM的可用内存,数据库的连接次数、数据库服务器的利用率等2.3 稳定性测试(可靠性测试)
2.3.1 思想:通过给系统加载一定的业务能力(例如:资源在70%-90%的使用率)的情况下,让应用持续运行一段时间(1周、1个月),测试系统在这种条件下是否能够稳定运行。
2.3.2 特点:
a. 验证系统是否支持长期稳定的运行。
b.需要在压力下持续一段时间的运行。
c. 如果测试过程中发现,随着时间的推移,响应时间有明显的变化,或是系统资源使用率有明显波动,都可能是系统不稳定的征兆,需要重点关注。
2.4配置测试
2.4.1思想:通过对被测系统的软/硬件环境的调整,了解各种不同环境对系统性能影响的程度,从而找到系统各项资源的最优分配原则。
2.4.2 方法:在经过测试获得了基准测试数据后进行环境调整,包括硬件资源,网络,应用服务器等),再将测试结果与基准测试数据进行对比,判断是否达到最佳状态。
2.4.3 特点:
a.了解各种不同因素对系统性能影响的程度,从而判断出最值得进行调优的操作。
b.在每次执行测试时更换、扩充硬件设备,调整网络环境,调整应用服务器和数据库服务器的参数设置,比较每次测试结果,从而确定各个因素对系统性能的影响,找出影响最大的因素。2.5 并发测试:
2.5.1思想:通过模拟用户的并发访问,测试多用户并发访问同一个应用、同一个模块或者数据记录时是否存在死锁或者其他性能问题。
该测试,关注如下问题:
a.内存问题:是否有内存泄露、是否有太多的临时变量、是否有太多的超过设计生命周期的对象、
b.数据库问题:是否有数据库死锁、是否经常出现长事物
c.线程与进程问题:是否出现线程/进程同步失败
d.其他:是否出现资源挣用导致的死锁,是否没有正确处理异常(例如超时等)导致系统死锁。2.6失效测试
2.6.1 思想:针对有冗余备份和负载均衡的系统设计的,这种测试方法可以用来检验如果系统局部发生故障,用户是否能够继续使用系统;以及如果这种情况发生,用户将受到多大程度的影响。
2.6.2 特点:
a. 验证局部故障的情况下,系统能否继续使用。
b. 性能测试方法还需要指出,当问题发生时“能支持多少用户访问”的结论和“采取何种应急措施”的方案。
c. 不是所有的系统都需要进行这种类型的测试,尤其是并没有明确给出系统持续运行指标的系统。
负载测试与压力测试的区别
负载测试:在一定的工作负荷下,给系统造成的负荷及系统相应的时间,是测试软件本身所能承受的最大负荷的性能测试
压力测试:在一定的负荷条件下,长时间连续运行给系统性能造成的影响,是一种破坏性的测试
性能测试、负载测试、压力测试的区别:
举例:用跑步举例
1. 性能测试:在没有负重的情况下,你跑100米需要花多长时间
2. 负载测试:在10公斤、40公斤等负载下,你跑100米需要花多长时间。
3. 压力测试:你在一阵强风下,你在负载或没有负载的情况下,跑100米需要花多长时间。
性能测试是动力,负载测试是载重,压力测试是强度。