二、性能测试的分类
    做性能测试,有些名词自然也是需要了解的,如果后面篇幅我提到有些名词,感觉生疏,不好理解的。请自行百度一下,对于概念性的东西,个人感觉百度说的比我好多了。
    那么性能测试分为哪些呢,简单来说分为以下几类:
    1、压力测试
    目的:找出临界点。
    2、负载测试
    目的:找出能承受的最大负载量。
    3、稳定性测试
    目的:验证系统是否有内存泄露等问题。
    4、容量测试
    目的:找出数据库能够处理的最大会话能力、最大容量。
    5、配置测试
    目的:为系统调优提供参考。

    三、性能测试流程
    在实施性能测试的过程中,整体工作流程,如下图所示:

    性能测试流程 - 图1
    当然,以上流程仅供参考,具体大家还需视公司情况自行调整。
    1、性能需求分析
    这里以我们常用的禅道中的添加用例功能为例,进行分享。
    1.1、调研期望指标(即性能需求)
    性能测试流程 - 图2
    这只是流程中的第一步,如果这一步做好了,接下来的测试方案设计、脚本开发、测试执行、测试报告都会轻松很多。
    为什么? 你想如果想都不想,直接搞,后面做的一切不都是白扯嘛!自己心里都迷迷糊糊的,还怎么去说服别人呢?
    1.2、关于收据需求指标


    参考前辈的历史数据



    参考同行竞品


    友情提示:什么所谓的二八原则,没有数据支持依据一切都是屁话,完全没说服力,也就是能忽悠下,没接触过性能测试的同学吧。
    这里在废话几句哈,做测试的要严谨,觉得可能?大约?应该就是这样的吧?这些字眼能说服谁?下面划重点,拿出数据说话、数据说话、数据说话、重要的事说三遍!
    2、性能测试方案设计
    2.1、测试目的、目标与范围
    目的:找出系统潜在的性能缺陷
    目标:从安全,可靠,稳定的角度出发,找出性能缺陷,并且找出系统最佳承受并发用户数,以及并发用户数下长时间运行的负载情况,如要并发100用户,如何对系统进行调优
    测试功能范围:本次测试计划主要收集分析禅道添加用例并发请求相关数据,做出分析和调优
    性能测试流程 - 图3
    2.2、测试指标范围
    测试范围:禅道中添加用例并发时,服务器各项性能指标的性能测试
    Jmeter指标:由于Apache旗下性能测试工具Jmeter收集的性能指标偏少,下面的数据选取代表性指标
    1、Average/ms:服务器处理事物平均响应时间(表示客户端请求到服务器处理信息且反馈客户端的时间)
    2、Throughput/s:服务器每秒处理请求数(表示服务器每秒处理客户端请求数(单位:个/秒))
    3、KB/s:服务器每秒接受到的数据流量(表示服务器每秒接受到客户端请求的数据量KB表示)
    硬件指标:
    1、%Processor time:CUP使用率(平均低于75%,低于50%更佳)
    2、System:Processor Queue Length:CUP队列中的线程数(每个处理器平均低于2)
    3、Memory:Pages/sec:内存错误页数(平均低于20,低于15更佳)
    4、Physical Disk-%Disk Time:磁盘使用率(平均低于50%)
    5、SQL Server:Buffer Manager-Buffer Cache Hit Ratio:(在缓冲区告诉缓存中找到而不需要从磁盘中读取的页的百分比,正常情况次比率超过90%,理想状态接近99%)
    不需要关心的指标:


    业务流程/路径覆盖率



    业务数据的完整、正确性



    其他诸如系统易用性、可管理性等属于专项测试的内容


    2.3、测试资源
    条件有限,我就一个测试环境,虚拟机套出来的环境,所有服务都部署在一块了,正常系统是分开部署的,这里参考这个表格的属性就好了。
    性能测试流程 - 图4
    2.4、测试准备
    测试环境安装:我这里部署的是一个禅道系统,如何搭建百度一下
    2.5、测试工具和测试策略
    测试工具:Apache-Jmeter2.3.2
    测试策略:根据公司内部实际情况,以及业务分布设置访问量即并发用户数
    2.6、测试数据收集测试脚本、数据及其预验证
    添加测试用例场景设计如下:
    性能测试流程 - 图5
    2.8、基准测试
    目的:验证测试脚本,初步检查交易本身是否存在性能缺陷。
    测试方法:采用5个用户负载执行,取交易的平均响应时间作为衡量指标,并计算吞吐量
    2.9、负载测试
    目的:获得交易本身的性能表现,诊断交易是否存在性能缺陷。
    2.10、稳定性测试
    压测系统7x24小时
    2.11、测试输出成果物


    《性能测试方案》



    《性能测试记录及问题跟踪表》



    《性能测试报告》


    2.12、测试进度计划
    度量你性能测试期间,在每个时间点该完成的事。这里根据公司情况来吧,我不给出示例了。
    2.13、实施风险及规避措施
    指对影响项目测试的各种可能发生的风险进行估计,以及对风险的发生几率和严重程度进行估计,并按照估计结果对风险进行排序
    3、脚本开发制作
    脚本开发制作:请参考文章《JMeter压力测试实例操作》
    4、服务器监控
    服务器性能监控:请参考文章《Jmeter监控服务器性能》
    5、测试报告编写
    这里我只介绍可能会涉及的一些点、大家根据自己情况做增减,性能测试报告一般包含如下几项内容:测试目标、参考文档、测试环境说明、硬件配置、软件配置、测试策略、人力资源、测试方案、测试场景、测试用例、测试结果及其分析、测试结论及建议等等。

    1. 常用组件简要介绍:
      jp@gc-BytesThroughputOverTime: 不同时间吞吐量展示(图表)
      聚合报告里,Throughput是按请求个数来展示的,比如说1.9/sec,就是每s发送1.9个请求;而这里的展示是按字节Bytes来展示的图表


    jp@gc-CompositeGraph:混合图表
    在它的Graphs里面可以设置多少个图表一起展示,它可以同时展示多个图表jp@gc-HitsperSecond:每秒点击量

    jp@gc-PerfMonMetricsCollector:服务器性能监测控件,包括CPU,Memory,Network,I/O等等
    jp@gc-ReponseLatenciesOverTime:记录客户端发送请求完成后,服务器端返回请求之前这段时间
    jp@gc-ReponseTimesDistribution:显示测试的响应时间分布,X轴显示由时间间隔分组的响应时间,Y轴包含每个区间的样本数
    jp@gc-TransactionsperSecond:每秒事务数,服务器每秒处理的事务数