软件测试中的性能测试调优过程
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。
对于一个开发比较成熟的业务系统而言,功能相对已经完善,但在大业务量的情况下往往会出现各种异常。对此,需通过对系统进行配置修改或者产品框架调整来优化系统。在优化系统过程中,最有效的手段就是对系统做性能测试,通过测试结果的收集分析,不断进行系统优化,最终达到系统在大业务量情况下稳定运行的目的。
一、测试方法
测试方法主要通过测试过程中的测试步骤体现出来。测试步骤需根据每次的测试结果不断调整,一个完善的测试方法需要不断地进行性能测试和性能调整。在开始性能调整循环之前,必须确定以下两点:一是建立业务模型,通过统计或数学模型的方法建立起科学的业务模型,如业务流程分布比例、平均负荷、峰值负载等;二是设置性能指标,作为判断设计指标和实际性能处理指标的基准值,总体的系统吞吐量、系统的吞吐效率、响应时延等都是用于测量性能的常用度量标准。
确定以上两点后,开始调整循环,这是一系列重复的受控性能试验。重复四个调整循环阶段,直至获得在开始调整过程前建立的系统性能目标。
二、测试阶段
测试阶段是调整循环操作的起点,此阶段是根据测试的要求进行相关操作,为下一步结果统计提供相应的测试数据。此阶段需要注意测试环境配置、测试用例的操作两个要点。
1、 测试环境配置
不同的测试环境会产生不同的测试结果,因此测试前需要对环境配置进行详细的检查。
(1) 检查网络连通性。网络畅通是测试能够正常进行的基本前提。
(2) 检查流量模型是否超出系统负荷。如果将要加的压力大大超出系统的负荷,会对系统产生伤害,并可能在测试过程中出现宕机、告警等异常情况。
(3) 检查被测系统的系统配置。此系统配置包括软件版本和硬件配置两个方面,不同的系统配置会产生不同的测试结果,故测试之前应对被测系统的配置进行严格核对,检查是否是测试所需的系统配置。
(4) 检查测试工具的参数配置。在性能测试中,必须利用测试工具来模拟大业务量。对于一个功能相对完善的测试工具,不但能模拟大业务量,而且还能够配置压力递增方式、压力大小、压力持续时间等参数。在测试之前需要根据测试的需求检查相应参数配置是否满足测试要求。
2、测试用例操作
测试过程中,性能测试主要按照测试用例规定的内容去逐步操作。一般来讲性能测试用例内容大体分成测试环境配置、预置条件、测试步骤、预期结果、判定原则、测试结果六个方面。
环境配置是指按照测试的需求配置测试环境,包括网络的组网、系统的参数配置等;测试预置条件是指为了真实模拟一些场景,需要在测试之前在系统中预置一些条件,例如在邮箱系统的性能测试过程中,为了模拟业务开展的实际情况测试,需要在邮件系统中预先存储一些积压的邮件;测试步骤是指在环境配置完成及预置条件完成后,如何对系统加压的过程,一般而言,首先确定压力的生成形式(如阶梯型递增、二次曲线形式递增等),然后确定压力递增的时间,最后要求压力保持的时间;预期结果是指通过理论及经验分析,对实际测试结果的一个预期指标,此内容是检验测试结果的一个依据;判定原则是制定出一个标准来判断测试是否满足要求,此原则的制定很大程度上依据测试的预期结果;测试结果是根据实际测试情况及参考预期结果和判定原则对测试的一个总体结论,其结论包括此项测试是否通过及测试的相应指标记录两个方面。
3、结果统计
此过程是调整循环内容中一个承上启下的环节。此环节统计的数据来源于上一次的测试结果,并为下一步的数据分析提供相关数据。
结果的统计可以来源于被测系统和测试工具本身两个方面,在统计过程中不但要考虑到从被测系统中统计数据还要兼顾到测试工具本身的数据统计。一般来讲,从被测系统可以直接通过系统的日志统计出系统资源消耗(如CPU、内存的占用率等);从测试工具本身可以统计出压力的大小、业务处理时延、业务处理成功率等指标。结果统计阶段需要将以上两个方面的数据一并统计出来,为下一步数据分析提供重要依据。
4、结果分析
通过数据统计收集到系统所需的性能数据后,对这些数据进行分析以确定系统瓶颈。在这里,需要明确的是统计到的体现性能数据仅具有指示性,它并不一定就可以确定实际的瓶颈在哪里,因为一个性能问题可能由多个原因所致。因此,在结果分析阶段需要从系统的角度去分析并查找原因,千万不能走入“头痛医头,脚痛医脚”的误区。在结果分析阶段应该注意到以下几个方面。
(1) 数据发现的敏感性,能够主动发现一些貌似“合理”的数据问题。
(2) 数据分析的系统性,能够通过测试数据的表象,从系统的角度对数据进行分析,发现系统瓶颈。
(3) 数据合理的疑问性,测试工作的目的就是要发现问题,优化系统,所以应该抱着对所有数据怀疑的态度去分析测试数据,这样才能做到不遗漏任何的“可疑”数据。
(4) 结果分析的分步性,通过测试经验,对于测试结果分析可以分成六步进行,包括观察、初步假设、预测、测试、控制和结论,结论由该过程积累的最佳证据集合所支持的假设组成。
三、总结
在循环调整的过程中,测试、结果统计、结果分析环节的最终目的是要对系统进行优化。因此,系统优化的依据直接来源于对测试结果的分析。通常来讲,对于一个比较成熟的系统,系统的绝大多数优化工作往往是对系统配置的优化,只有少部分的优化工作是对系统设计的修改。
通过对结果的分析,可以大体定位出系统问题出现在哪里,随后对系统配置进行更改及优化。此优化过程大部分的工作是尝试性和不间断性的,需要不断尝试配置参数的改变,然后验证此配置的修改是否达到预期目的。如果没有达到预期目的,需要进一步对配置进行修改和验证。根据以往的测试经验,实现参数配置更改的最重要规则是一次仅实现一个配置更改。这主要是由于系统某一个模块/单元出现问题可能是由多个模块/单元的瓶颈导致的。因此,分别处理每个问题很重要。如果同时进行多个更改,将不可能准确地评定每次更改的影响。
实现了配置更改后,必须对修改后的系统进行测试,确定更改对系统所产生的影响。如果幸运,性能提高到预期的水平,这时便可以退出。如果不是这样,则必须重新逐步进行调整循环。
综合考虑以上的内容,一个调整循环的流程才算基本完成,根据调整的结果来考虑是否进入下一部调整循环的阶段。