性能测试常规流程:

  blob.png



  1. 需求分析

   性能测试需求分析要完成下面两项工作:1.采集性能测试需求 2.分析性能测试需求

   性能测试指标分为两类:1.业务指标(TPS、RT(ART)、事物成功率等) 2.硬件性能指标(CPU使用率、内存使用率、磁盘繁忙率等)

   性能需求的主要采集内容有:1.系统架构(物理架构与逻辑架构,包括中间件产品与配置、数据库配置) 2.采集业务并量化业务 3.了解业务发展趋势 4.了解系统是否会有归档机制 5.采集业务发生时段 6.采集在线用户数,活动用户数,业务分部  7.系统是否与第三方系统关联关系 8.采集业务性能指标 9.采集系统硬件指标 

  (1)需求采集

     1.系统架构:以JForum为例,确认物理架构和逻辑架构

      blob.pngblob.png

     2.业务流程:

       blob.png

     3.业务相关性能需求

       blob.png

     4.系统硬件指标

        blob.png

  (2)需求分析

      需求分析的目的是确定性能测试范围。分析出哪些业务纳入性能测试范围及性能指标是什么?另外要分析用户使用行为、业务分布、分析业务量;估算出TPS与并发用户数等性能测试执行依据。

      1.圈定测试范围:1.确定高频次的业务 2.确定性能影响大的业务 3.确定功能的可验证性

      2.明确性能指标

        blob.png


         3.分析业务量

           (1)不仅要关注历史数据,还要关注未来业务量的增长。

         4.计算TPS

           (1)pv并不能直接等于一个事务,pv包括请求图片、样式的耗时,这边可以先把pv=tps。浏览器会缓存一些静态资源,所以性能测试中是否缓存访问的静态资源要根据业务情况而定。

           (2)采用80/20原理,百分是20的时间做了80的事情。

         5.分析系统协议

           (1)是http还是其他协议,根据协议采用不同的工具

   (3)并发数计算

         业内常用的并发数计算方法有一下3种:1.由TPS来估算并发数 2.由在线活动用户数来估算并发数 3.根据经验来估算并发数

        可以总结出如下公式:Vu(业务名称)=TPS(业务名称)* (RunTime+ThinkTime) 注:Vu(业务名称)表示业务的虚拟用户数,RunTime是程序/脚本运行(迭代)一次所消耗的时间;包括事务时间+非事务时间。

        blob.png

2.测试模型

   (1)1.业务模型:业务流程  2.测试模型 3.性能测试场景

      blob.png

3.测试计划

  (1)测试计划用来规划测试工作 1.系统概述  2.测试环境:系统生产环境、系统测试环境、测试执行环境(负载机环境) 3.需求分析:采集系统性能需求,确认性能测试范围  4.测试策略:本次测试我们采用什么样的手段测试 5.测试场景:如何组合业务场景进行测试  6.测试准备:测试前的环境准备,数据准备  7.时间计划:估算测试资源及耗时  8.测试组织架构:测试相关人员  9.交付物清单:性能测试计划、性能测试报告、性能测试脚本等  10.系统风险:对测试过程中的风险加以评估,确定风险应对策略。


 4.环境搭建

   blob.png

   

5.脚本开发

  (1)固定定时器:模拟ThinkTime、断言、同步定时器:模拟集合点

 6.数据准备

  (1)主数据准备:登录账号、配置的数据

  (2)数据制作方法:SQL语句、存储过程、工具

 7.场景设计

  (1)场景设计是组织虚拟用户、组合业务种类到一个测试单元

     blob.png


       1.基准测试:主要用来验证测试环境、验证脚本正确性、得到系统的性能基准,为后续的测试执行提供参考。基准测试采用单业务场景、单用户的方式来执行脚本。执行时长响应时间调整,测试结果采样样本尽量大。

       2.配置测试:帮助分析系统相关性能配置,确保系统配置适合于当前性能需求,一般场景为混合场景(多个业务同时执行)。测试过程是一个实验过程,先是找出不合理配置,然后进行修改,最后进行验证;周而复始直到配置满足要求。

       3.负载测试场景:

         blob.png


      4.稳定性测试:验证当前软硬件环境下,长时间运行一定负载,确定系统在满足性能指标的前提下是否运行稳定,执行时采用混合场景。按惯例要求执行时间不低于8小时。稳定性测试原则上是时间越长越好,有些隐藏较深的诸如内存溢出的问题需要长时间运行才能反映出来。

    (2)场景实现

       1.只运行一个线程组实现基准测试场景

       2.运行多个线程组实现配置测试场景

         blob.png

       3.负载场景设计

         blob.png

 8.测试监控

    blob.png

 9.测试执行

   一般第三方性能测试会有一个测试准入条件的验证(一般做成CheckList,检查各项准备工作是否Ready)。基本内容包括但不限于下面这些项目。

      1.检查网络环境:确保环境独立 2.检查测试数据 3.检查监控设备 4.脚本检查

  (1)基准测试

     1.测试场景:基准测试测试时间尽可能长,次数多点,方便平均取样。

       blob.png


      2.测试执行&测试结果

        通常建议执行三次以上

        blob.png

           (2)响应时间(RT)

               blob.png


  (2)配置测试

       1.测试场景

         确定配置测试目标方向:1.JVM配置:优化JVM配置 2.Tomcat线程池配置:确定一个较合理的Tomcat配置。 3.数据库连接池配置:确定一个合理的连接池配置 4.Mysql数据库的一些配置

          blob.png

       2.测试执行、分析及调优

          配置测试是不断尝试的过程,为了减少偶然性每个场景会运行多次,取相对平稳的一次结果为准(也可以综合多次结果进行算术平均)

         (1)1.JVM配置测试 2.Tomcat线程池配置测试 3.数据库连接池配置测试 4.Mysql数据库优化配置测试

            1.JVM配置测试

            blob.png

                blob.png

        (2)Tomcat线程池配置测试

        (3)Mysql数据库优化配置测试  1.优化配置(缓存、临时表空间等) 2.业务设计 3.物理设计 4.物理架构(主从复制、读写分离)


 (3)负载测试

   1.测试场景:负载测试的目的是帮助我们找出性能问题与风险,对系统进行定容定量:为系统优化、行调整提供数据支撑。负载测试在执行时分为单场景与混合场景。(先做单场景,后做混合场景)。将配置调整到上面合适的配置,继续关注监控数据,针对影响性能的配置再次调整。

     负载测试的目的是找出系统性能的拐点,通常需要变换不同的负载当量进行尝试。

      blob.pngblob.png

    2.单场景测试执行、分析及调优

      blob.png

          blob.png

         blob.png

        blob.png


     3.混合场景测试执行、分析及调优

      混合场景将按照测试需求的业务比来模拟,考查的重点是不同负载情况下系统的服务能力。

       blob.png

       单场景方便我们分析性能问题,在单元测试阶段就可以介入,把性能测试提前,问题早发现早面对;混合场景模拟用户实际操作,测试结果更具可靠性当然这要建立在测试模型可靠、数据量足够、执行充分的前提条件下。

       blob.png



 (4)稳定性测试

    1.测试场景

      blob.png

    2.测试执行与分析

     blob.png

 (10)结果分析

 (11)测试报告:1.性能测试背景 2.性能测试目标 3.性能测试范围 4.名称术语 5.测试环境 6.测试数据 7.测试进度 8.测试结果 9测试结论 10.系统风险