zoukankan      html  css  js  c++  java
  • 性能测试简介

    性能测试曲线模型是一条随着测试时间不断变化的曲线,与服务器资源,用户数或其他的性能指标密切相关的曲线。如下图所示。

     在图中,我们的曲线图主要分为3个区域,分别是:light load :轻压力区;heavy load :重压力区;和buckle load .

    图中的3条曲线,分别表示资源的利用情况(Utilization,包括硬件资源和软件资源)、吞吐量(Throughput,这里是指每秒事务数)以及响应时间(Response Time)。图中坐标轴的横轴从左到右表现了并发用户数(Number of Concurrent Users)的不断增长。

    在进行性能测试的时候,我们需要对图的曲线进行分析。分开来看的时候,响应时间(RT)、吞吐量(TPS)和资源利用率的变化情况分别是:
      响应时间:随着并发用户数的增加,在前两个区,响应时间基本平稳,小幅递增。在第三个区域:急剧递增。在第三个区的点为拐点。
      吞吐量:随着并发用户数的增加,在前两个区,对于一个良好的系统来说,并发用户数的增加,请求增加,吞吐量增加,中间的区域,处理达到顶点。
      在第三个区:资源利用率:呈直线,表示饱和。
    分析结论:
      当系统的负载等于最佳并发用户数时,系统的整体效率最高,没有资源被浪费,用户也不需要等待;当系统负载处于最佳并发用户数和最大并发用户数之间时,系统可以继续工作,但是用户的等待时间延长,满意度开始降低,并且如果负载一直持续,将最终会导致有些用户无法忍受而放弃;而当系统负载大于最大并发用户数时,将注定会导致某些用户无法忍受超长的响应时间而放弃。

    通过如上模型图中的情况,我们大致可以将当前性能测试分成如下4类:性能测试、负载测试、压力测试、稳定性测试,具体的特性及描述。

    请参考下表:

    测试类型

    简述

    测试目的和特点

    关注点和产出

    性能测试

    性能测试是指通过模拟生产运行的业务压力量和使用场景组合,测试系统的性能是否满足生产性能要求。

    目的:验证系统是否有其宣称具有的能力。

    特点:对系统性能已经有了解的前提,对需求有明确的目标,并在已经确定的环境下进行的。

    关注的是系统性能是否和具体的性能需求相一致,而当系统性能超过性能需求的时候,系统的表现并不是测试人员关心的重点。

    负载测试

    是指对系统不断地增加压力或增加一定压力下的持续时间,直到系统的某项或多项性能指标达到安全临界值,例如某种资源已经达到饱和状态等

    目的: 找到系统处理能力的极限。了解系统的性能容量,或是配合性能调优来使用。

    1.得出线下系统最大TPS。

    2.得出线下系统最大TPS时系统资源利用率。

    3.得出线下系统极限并发数。

    压力测试

    压力测试是评估系统处于或超过预期负载时系统的运行情况。压力测试的关注点在于系统在峰值负载或超出最大载荷情况下的处理能力。

    目的:检查系统处于大压力性能下时,应用的表现。

    特点:一般通过模拟负载等方法,使得系统的资源使用达到较高的水平。

    关注点:发现功能测试不能发现的非功能性缺陷。

    产出:

    1.得出线下系统崩溃点的TPS。

    2.得出线下系统崩溃时资源使用率

    3.得出线下系统极限并发数

    稳定性测试

    在给系统加载一定业务压力的情况下,使系统运行一段时间,以此检测系统是否稳定。

    目的:主要目的是验证是否支持长期稳定的运行。

    关注系统稳定性。得出系统稳定状态下的资源利用、连接池、TPS、响应时间、DB健康情况等数据。

     

    性能测试基本流程

        性能测试从实际执行层面来看,测试的过程一般分为这么几个阶段,见图: 

      1. 性能需求分析

    性能需求分析是整个性能测试工作开展的基础,如果连性能的需求都没弄清楚,后面的性能测试工具以及执行就无从谈起了。在这一阶段,性能测试人员需要与PM、RD及项目相关的人员进行沟通,同时收集各种项目资料,对系统进行分析,确认测试的目标。并将其转化为可衡量的具体性能指标。测试需求分析阶段的主要任务是分析被测系统及其性能需求,建立性能测试数据模型,分析性能需求,确定合理性能目标,并进行评审;

    2. 性能测试准备

    主要包括:设计场景,根据场景编写程序、编写脚本、准备测试环境,构造测试数据,环境预调优等;

    针对系统的特点设计出合理的测试场景。为了让测试结果更加准确,这里需要很细致的工作。如建立用户模型,只有知道真实的用户是如何对系统产生压力,才可以设计出有代表性的压力测试场景。这就涉及到很多信息,如用户群的分布、各类型用户用到的功能、用户的使用习惯、工作时间段、系统各模块压力分布等等。只有从多方面不断的积累这种数据,才会让压力场景更有意义。最后将设计场景转换成具体的用例。

    测试数据的设计也是一个重点且容易出问题的地方。生成测试数据量达到未来预期数量只是最基础的一步,更需要考虑的是数据的分布是否合理,需要仔细的确认程序中使用到的各种查询条件,这些重点列的数值要尽可能的模拟真实的数据分布, 否则测试的结果可能是无效的。

    预调优指根据系统的特点和团队的经验,提前对系统的各个方面做一些优化调整,避免测试执行过程中的无谓返工。比如一个高并发的系统,10000人在线,连接池和线程池的配置还用默认的,显然是会测出问题的。

    3. 执行性能测试

    执行阶段工作主要包含两个方面的内容:一是执行测试用例模型,包括执行脚本和场景;其次测试过程监控,包括测试结果、记录性能指标和性能计数器的值

    4. 结果分析与性能调优

    发现问题或者性能指标达不到预期,及时的分析定位,处理后重复测试过程。性能问题通常是相互关联相互影响的,表面上看到的现象很可能不是根本问题,而是另一处出现问题后引起的反应。这就要求监控收集数据时要全面,从多方面多个角度去判断定位。调优的过程其实也是一种平衡的过程,在系统的多个方面达到一个平衡即可。

    5. 性能报告与总结

    编写性能测试报告,阐明性能测试目标、性能结果、测试环境、数据构造规则、遇到的问题和解决办法等。并对此次性能测试经验进行总结与沉淀。具体性能测试报告的编写可以参考《性能测试报告模板》

    上面所有内容中,如果排除技术上的问题,性能测试中最难做好的,就是用户模型的分析。它直接决定了压力测试场景是否能够有效的模拟真实世界压力,而正是这种对真实压力的模拟,才使性能测试有了更大的意义。可以说,性能测试做到一定程度,差距就体现在了模型建立上。

     至于性能问题的分析、定位或者调优,很大程度是一种技术问题,需要多方面的专业知识。数据库、操作系统、网络、开发都是一个合格的性能测试人员需要拥有的技能,只有这样,才能从多角度全方位的去考虑分析问题。

  • 相关阅读:
    04、图的基本考点
    06、排序【应用篇】
    07、顺序表编程考点
    08、单链表编程考点
    04、css position 属性
    03、css float 浮动属性
    02、线性表基础考点
    软件工程博客---小学期--日报6
    软件工程博客---小学期--日报5(含周末)
    软件工程博客---小学期--日报4
  • 原文地址:https://www.cnblogs.com/yangxiayi1987/p/11685595.html
Copyright © 2011-2022 走看看