自动化性能测试

摘要

 

        在过去的20年中,很多公司已经转向用软件将工作数字化方式。在软件应用的推动下,已经产生了巨大生产效率,同时,为全球经济的协作和信息共享提供了新的方式。软件应用实际上已经成为业务关键信息共享和各种事务处理两领域的主要渠道。当前,软件应用----从e-mail到CRM(客户关系管理)到事务处理----就意味着业务本身。

        软件开发技术在这段时期内已经发生改变并且相当成熟,现代应用软件的复杂性也正在爆发。应用可以使用数十和数百种组件完成曾经使用纸张或手工的工作。复杂性直接导致业务过程中出现更多的潜在故障点,从而使分析问题的根源更为困难。

        此外,软件应用的运行与汽车不同。它们没有那些当磨损后可直接更换的耐久部件。不论目标是为了建立竞争优势还是为了满足业务的变化,软件应用每周每月每年都在改进。这一连串的变化使公司不得不面对另外一系列风险。

        难以置信的改变速度和爆炸性的软件复杂性给软件开发过程带来了巨大风险。严格的测试,对于量化和降低业务风险,是最常用的策略。开发人员,测试团队和管理层等会提出一个相似的问题:在投入运行前如何准确,全面地验证系统性能,而不超出预算。

        通过性能测试,公司可以在投入运行之前检验应用是否满足业务需求,量化最终用户体验的变化的影响,并且快速分析和解决发生故障的组件,因而在部署时就较少出现意外。然而,自动化性能测试的美好前景需要面对一些新问题:

  1. 什么是性能测试?
  2. 为什么要使它自动化?
  3. 性能测试正确的过程?

            -设计
            -构建
            -执行
            -分析,诊断,和调整

  4. 好的性能测试涉及到哪些人?
  5. 谁需要看结果并且如何报告结果来量化ROI?
  6. 当比较自动化负载测试方案时,哪些特性是最重要的?

       通过我们的负载测试经验和大量的顾客输入和回馈,我们已经在正确的方法中积累了大量的专门技术,使得性能测试的步骤自动化。这篇文章总体介绍了自动化性能测试和最佳覆盖性能测试方法的益处。

 

    什么是性能测试?

 

        性能测试是在上线前对系统进行端到端性能测试的唯一方法。性能测试解决方案是:

  1. 使用最少的硬件模拟成百上千的用户与系统进行交互。
  2. 测量最终用户的响应时间
  3. 以一致的方式重复负载
  4. 在负载下监测系统组件
  5. 提供健壮的的分析和报告机制

        自动化测试方案通常使用4个主要的组件来构建和运行测试。这些包括:

  1. 虚拟用户发生器可以捕获最终用户业务过程,并转化为自动化脚本。
  2. 控制器将组织、驱动、管理、和监测负载
  3. 执行期间负载发生器执行虚拟用户
  4. 分析引擎观测、分析和对比结果

 

    为什么使性能测试自动化?

 

        自动化测试是一种方法,发挥人力,过程,技术的作用,以降低应用,升级或补丁部署的风险。其核心,自动化性能测试是在预部署的系统上施加生产环境的负载,同时测量系统性能和最终用户的体验。构建良好的性能测试可以回答类似下面的问题:

        

  1. 应用响应时间对于计划的用户足够快么?
  2. 应用是否能够处理期望的用户负载或更多?
  3. 应用是否能处理业务所需的事务数量?
  4. 应用在期望内或期望外的用户负载下是否稳定?
  5. 你确定用户会在上线时得到积极的体验么?

       通过回答这些问题,自动化性能测试采用业务术语量化改变所带来的影响。这样,就明确了部署的风险。一个有效的自动化性能测试过程可以帮助制定考虑周详的发布决策并防止系统故障和可用性问题。

 

  自动化性能测试过程

        一些已经成功实行自动化性能测试的组织,已经将这个过程分解为独立的阶段。虽然具体的实施可能有所不同,但是,宽泛地说,性能测试可以分为四个阶段—设计,构建,执行和诊断/调整。每个阶段有具体的任务,涉及到不同的角色,这些任务在转到下一阶段前必须完成。在最高级别,四个阶段可以被描述如下:

  1. 设计阶段包括定义系统中所要测试的业务过程,在平均或峰值生产时间的综合业务过程,和用户和响应时间的全面目标。
  2. 构建阶段包括建立和配置测试系统和基础设施,并且使用自动化性能测试解决方案来构建测试脚本和负载场景。
  3. 执行阶段由运行负载场景和测量系统性能组成。
  4. 诊断调整反复迭代的阶段超出了测量系统性能和负载测试,达到另外一个层次,关键是要查明问题来快速帮助解决问题,并且调整系统参数来最优化性能

       让我们详细分析关系到每个阶段成功与否的必要任务。

    设计

        这是性能测试团队向业务部门搜集性能需求的主要阶段。需求可以被认为分为四个方面—业务,技术,系统和团队需求。

        业务需求一般通过与主题专家(SME,subject matter expert)的会议来搜集。这些人可以是业务分析师和最终用户。当下面内容准备好后,一套全面的业务需求就形成了:

  1. 应用概要:系统用法的演示使得性能团队得到更高层次的理解,应用是如何被使用的。
  2. 业务过程列表:最终用户在系统上所执行的关键业务过程列表。
  3. 业务流程:Word文档,详尽记录每个业务过程的精确步骤和屏幕。
  4. 事务列表:业务过程中关键活动的列表—例如登录或转移资金—需要在负载下测量。
  5. 业务过程图:业务流程图说明业务流程的分支条件。

        技术需求可以通过与系统管理员和数据库管理员(DBA)的会议来搜集。这些人可以隶属于开发或运营部门,或者隶属于两者。一套全面的技术需求仅当以下内容齐备时完成:

  1. 环境评审:按照测试体系结构由系统或基础设施组进行走查评审。
  2. 系统范围的会议:召开会议,讨论和确认在测试过程中系统需要排出的部分。
  3. 生产图:一个生产基础设施图,用于说明测试与生产环境的差异,当从QA向生产迁移时可能对性能造成影响。

       最后,重要的是,必须收集系统需求。这些是系统的高层次目标,决定着负载测试过程的通过/失败状态。这些一般在与LOB的项目经理工作中达成一致。系统需求包括对以下问题的回答:

  1. 系统在正常和最高峰时期必须支持多少用户?
  2. 每秒钟它必须处理多少个事务?
  3. 对于可业务关键事务最大和最小可接受的响应时间是多少?
  4. 用户群体如何联系?
  5. 生产中系统承受的工作负载是什么?以及混合的事务?

        团队需求是进展到构建阶段前需要解决的最后一个问题。这只不过是决定适合的性能团队成员来参与到未来的负载测试。最初,这也许被自动的确定(例如,当只有一个团队)。然而,如果性能测试成为卓越中心(CoE)的一部分,那么资源分配,内部后勤就应该在设计阶段考虑和解决。

        预先收集一套完整的业务,技术,系统,和团队需求是使负载测试有效和成功的基础。

    构建

        构建阶段将在设计阶段确定的业务过程和工作负载转变为自动化组件,这部分可以驱动可重复的,实际的负载。这可以分为两个方面:自动化设置和环境设置。自动化设置是由性能工程师完成的一系列连续的工作。

  1. 脚本:将确定的业务过程记录为自动脚本。
  2. 事务:插入定时器来产生业务所需的逻辑计时。
  3. 参数化:用一个池替代所有的输入数据,例如ID和密码,这样每个虚拟用户用唯一的数据访问应用。
  4. 场景:通过给用户组分配不同的脚本,连通性和用户行为等方法,创建生产工作负载。
  5. 监测器:确定负载下所要监控的服务器或机器。

        环境设置由执行成功,现实的负载测试所需的硬件,软件,和数据组成。这些可能涉及到系统,DBA,运营和业务团队。

        构建阶段的最终成果就是可以执行在可用的,已配置的环境上的一系列自动化“资产”。

    执行

        对于刚接触性能测试的新手来说,经常存在一个误解,就是执行是一个单一事件。实际上,它是一个由多种类型的性能测试组成的多步骤的过程。每种测试都提供了理解发布应用所带来风险的必要信息。负载测试的类型包括:

  1. 基线测试验证了系统和其周围环境可在合理的技术参数下运行。性能测试按5到10个用户执行,作为最终用户事务性能的基线。这些测试应该在性能测试的开始和结束时执行,来测量响应时间的绝对改进。
  2. 性能测试在环境中模仿负载,并确定系统可以支撑的最佳和最大用户数量。这些测试应该仿效平均和峰值时间的生产用法,他们应当最大限度地仿真用户的真实行为,例如思考时间,调制解调器的仿真,和各种类型的浏览器。同时,采用其它专用的监控和诊断工具,有效地查看系统内部行为,诊断系统衰变和瓶颈。
  3. 基准测试被设计来测量和对比理想情况下的各种机器类型,环境,或应用的版本。当系统经过扩展性测试后,执行这些测试可以帮助了解不同体系结构的影响。
  4. 渗透测试被设计用于在长时间的负载下检测系统的执行情况。
  5. 峰值测试被设计用于模拟系统在峰值负载下运行一段时间来保证应用和其硬件可以在合理的时间段内支持高负载

 

    分析,诊断,和调整

 

 

    如何确定性能测试的 ROI

 

        良好的性能测试的ROI有双重意义:

  1. 缓解风险保证项目达到正确的扩展性和性能。缓解风险是标准的性能测试好处。大多数自动化性能测试的用户可以向开发部门或项目团队反馈清晰的,可量化的信息,预测系统在生产环境的扩展和性能情况。
  2. 性能最优化以量化方式改善系统的性能,通过测量改进的最终用户响应时间,或者通过减少所需的全面硬件基础设施

 

    如何优化性能

 

       在性能测试后的阶段中,提供了很多有利于改善系统性能的有价值信息。

  1. 监测性能测试期间的监测显示出基础设施中每一层发生的情况,在性能测试期间提供了数据库服务器,Web服务器,应用服务器,或单独的应用和过程的更加清晰的记录。例如,这些信息可以快速表明应用服务器的CPU使用率在200用户的时候达到100%,而不能达到300用户的目标。这意味着要么需要更多的应用服务器容量要么需要优化应用自身。
  2. 分析:在负载测试完成之后,用户可以关联分析—例如创建虚拟用户对抗CPU或应用服务器CPU到Web服务器—来测定应用行为更深一层次的信息。
  3. 调整:许多公司在应用部署的前中后期使用压力测试工具来实施自动化性能测试。同时可以采用其它工具允许用户通过修改系统配置设置系统地识别,隔离,和解决基础设施的性能瓶颈。通过反复实施解决基础设施的瓶颈的过程,用户可以建立当前最优的黄金配置。
  4. 诊断:当前的技术可以允许,性能工程师在负载条件下对各个层,组件和SQL语句如何影响整个业务过程性能有一个统一的认识。诊断时,性能工程师使用诊断工具可以看到最终用户事务当前涉及到的所有组件。此外,用户也可以看到每一个组件花费的时间和被调用的次数。依靠这些信息,项目和QA经理可以定位到最重要的Web,应用,和数据库服务器瓶颈,集中资源来改善用户体验。它为开发者提供了如此有效的实际数据以至于用户把它称为“性能测试的圣杯。”

 

    良好的性能测试涉及到哪些人?

 

  1. 项目经理
            协调多个性能项目,管理测试进度,获得必要的硬件或软件,处理资源和资金问题。
  2. 业务分析师
            负责从业务的角度对系统性能作出评价和结论。帮助开发性能测试中的混合事务和期望时间。
  3. 性能经理
            负责协调性能支持团队的工作,作为小组的联系人。负责管理日常性能工作。
  4. 性能测试人员
            负责创建和执行自动测试和收集测试结果。
  5. 应用构造师
            接受负载测试的诊断和分析的信息,来最优化应用性能和解决性能问题。
  6. 基础设施专家:DBA,网络管理员,系统架构师
            接受负载测试调整和分析的信息,来最优化应用性能和解决性能问题。

你可能感兴趣的:(自动化性能测试)