性能测试理论


1.性能测试

1.1什么是性能测试

    在软件的?度??,性能它?先是?种指标,具体可以说就是软件系统或构件对于其及时性要求的符合程度,另外?种就是软件产品?种特性,其实就是响应时间。

    对?个产品??,性能的及时性是?响应时间或者吞吐量来进?衡量

    对?户??,响应时间就是端到端的?户基本体验。

   1.2用户角度的性能

    就是?户操作的响应时间。?般??关于响应时间业界的说法具体如下:

      • 1-3秒,属于优的表现
      • 3-5秒,可以接受,属于中间的表现
      • 5秒以上,?法接受
    在实际的?作??,如果响应时间是?于5秒,那么就需要提单给程序员,让程序员来进?具体的优化。

    1.3运维视角的性能

    运维除了关注响应时间外,也会关注更多底层的资源信息,这些资源信息具体可以汇总为如下:
      • 系统资源(CPU和内存)
      • 数据库资源(IOPS资源)
      • JVM内存是否够?
      • 系统的最?容量

  1.4开发视角的性能 

    开发的关注度会更加的全?,毕竟代码都是程序员来编写的,具体可以汇总为如下:
      • 前后交互的响应时间
      • 中间件的参数设置
      • 内存释放泄露
      • 连接数泄露
      • 是否存在不合理的内存使??式
      • 是否存在不合理的线程同步?式
      • 系统中是否存在不合理的资源竞争
      • 系统架构&代码结构

  1.5测试视角的性能

    ?户关注的视?属于全栈性的,需要考虑?户视?的产品体验,也要监控以及关注运维视?和开发视?,所以性能测试中测试的具体?作职责可以总结为:
      • 设计合理的场景和测试?例来验证系统的资源数据
      • 验证在?并发的情况下架构是否满?
      • 给架构师以及开发?员提供中间件配置参数的合理值范围
      • 使?技术?段监控系统,DB,中间件,全链路监控的?式来监控系统资源情况

  1.6WEB前端视角的性能

    所谓前端的性能?前也是性能测试中?较热?的技术之?,关注的点具体汇总为如下:
      • 浏览器的资源加载(HTML解析,图?资源加载,CSS?件资源加载)
      • 前端缓存技术的优化是否合理性
      • 前端与后端的交互性耗时

2.性能测试常用术语

  2.1响应时间

           网络时间+应用程序处理的时间

  2.2并发用户数

      性能测试的核心是验证当前系统能否支持现有用户的访问,也就是说系统可以承受在同一时间段多少用户来访问系统

      并发用户数:N个用户在同一时间段向服务同时发送请求 在线用户数:仅仅在线,但是并不代表发送了请求,也称为僵尸用户

      并发测试:并发用户数秒,可以说:不论从业务视角出发,还是服务端承受压力而言,描述的是同一时间同时向客户端发出请求的客户,某些时候也称为“并发测试”。这中间主要体现的是服务端承受的最大并发访问数

  2.3吞吐量

      主要?于数据传输??,也就是被测试系统的执?效率。该术语?于描述数据传输速度(字节/秒或者?特/秒),在 某些情况下(如DB层?)

      吞吐量指的是操作的速度,也就是每秒操作数或者每秒业务数。或者也可以说单位时 间内客户端请求的数量,直接体现系统的性能承载能力

  2.4性能计数器

      性能测试过程中收集的一些数据

  2.5使用率

      对于服务所请求的资源,使?率描述的是所给定的时间区间内资源的繁忙程度。

      如?个业务中,会使??量的内存资源,总的内存资源是4G,在?定数据量的情况下执?该 业务形态,内存使?率从100M?直占?到3G,

      然后随着业务形态内存资源得到释放呈下降的趋势,那么可以说内 存使?率最?为75%

  2.6思考时间

      思考时间英文名称是Think Time,也称为休眠时间,在业务视角,思考时间指的是用户在进行操作时,每个请求之间的间隔时间。

  2.7IOPS

      该术语主要是针对数据库的,也就是每秒发?的输?/输出操作的次数,是数据传输的?个度量?法。?于磁盘的 读写,IOPS值的是每秒读和写的次数。

  2.8TPS/QPS

      事务指的是某个操作或者是?组操作的组合,如登录的事务那么就是输?账户和密码,点击登录按钮跳转到登录成 功的??并且信息都加载出来。

      TPS统计的是每秒处理的事务数,即系统每秒能够处理的事务的数量。

      QPS指的是 每秒查询率,如DB服务器在规定时间内处理流量多少的衡量标准。

3.性能测试理论

  3.1资源调度

      不管是操作系统级别还是在微服务的架构下,?并发的请求如果都允许进?到执?阶段,必然带来的是灾难,因为       系统以及集群的计算资源以及可承载的能?是有限的。那么就需要调度策略来解决这个事情,解决的思路即使有很       多的任务过来,但是先做资源的check检查,在资源允许的情况下,会做任务的下发和执?。在操作系统级别,专       业的来说,调度器可以理解为:CPU时间划分给活跃的进程和线程,?且维护?套优先级的机制,这样更重要的?       作可以更快的执?,调度器会跟踪所有ready-to-run状态的进程。调度器(调度策略)可以动态的调优先级以来       提 升?作负载的性能,?作负载可以做如下的区分:
      • CPU密集型:应?程序执?繁重的计算,通常运?时间?较?,会占??量的CPU
      • IO密集型:应?程序执?I/O,计算不多,会占??量的内存资源 系统的最?粒度是线程,也就是说系统调度粒度最细的就是对线程的调度。

  3.2等待队列

      在程序中,都会涉及到等待队列的,不管是同步交互还是异步的交互中,都会涉及它的最?队列,这样设计的核?       思想是防?在客户端?并发的情况下服务端在没有队列的情况下出现雪崩以及最终导致服务端出现瘫痪,因此队列       等待是?常核?并且是?常有必要的。在等待队列中,测试需要得出如下?个性能数据:         1、队列设置的值是多少?最?可以运?的任务是多少?         2、需要测试到排队的策略机制,也就是说模拟?批量的程序进?排队,然后?个任务执?结束后,队列位置释放                ?个,等待中的可以?刻进?然后执?,这中间就设计到先进先出还是先进后出,以及线程优先级的设计策略         3、线程在排队的过程中,设置最?的等待时间是多少,也就是说?个线程不可能永远处于等待中,那么等待多               久,还是没到执?的阶段,这个时候服务针对排队等待的线程处理的机制是?这个时间专业术语就是:访问等待时间              4、那么?个线程完整的时间是由三部分组成的,响应时间:客户端发起请求的时间+访问等待时间+逻辑执?时间          +返回给客户端的时间。?般在测试中,可以把每个线程名称设置为uuid,这样它都是独?的,可以依据这个          uuid,让开发同学配合输出每个阶段的时间输出,然后就可以得到每个阶段的具体时间了,根据时间再来判断时间          是否优化。

  3.3线程优先级

      优先级的等级是1-10

      默认优先级是5

      执行的顺序是按照优先级来的

 4.性能测试流程

  4.1测试前期的准备

      • 场景

        • 登录  
        • 产品列表
        • API的执行
      • 目标

        • 目标是由测试来主导,要与相关人员达成一致
          • 开发
          • 架构师
          • 产品
          • CTO
          • 测试

  4.2测试工具技术引入

      • JMeter

      • Locust

  4.3性能测试计划

      • 人力资源

      • 要做什么

      • 什么时候开始,什么时候结束

      • 使用什么技术来实现

  4.4测试设计与开发

      • 工具怎么配置

      • 代码怎么写

      • 具体的脚本是什么

  4.5测试执行与管理,数据收集

      • 测试执行管理:根据配置的工具来执行测试

      • 数据收集

        • 数据库资源:IOPS  
        • Linux资源:CPU/内存
        • Nginx:连接数
        • 工具或者代码本身的资源:响应时间/吞吐量

  4.6测试分析:有没有达成测试的目标

5.性能测试的方法

  5.1验收负载测试

        在QA的环境模拟生产运行的业务压力和使用场景组合,测试系统的性能是否满足生产环境的性能诉求。

  5.2负载测试

        在被测系统上持续不断的增加压力,直到性能指标(响应时间等)超过预定指标或者某种资源(CPU&内存)使用已达到饱和状态。核心是找到系统的处理极限,

        为系统调优提供数据,从而达到了解系统性能的容量。

  5.3压力测试

        该方法是指系统在一定饱和状态下,具体如CPU,内存等饱和使用的情况下,系统能够处理的会话能力,以及系统是否会出现错误(TimeOut,OOM,OverStackExpection(堆栈异常))

        压力测试的特点:

          • 检查系统在处于压力情况下时应用的性能表现
          • 等价于负载测试,使系统的资源处于一个瓶颈的状态(建议CPU和内存在75%以上)
          • 这种方式一般用于测试系统的稳定性

  5.4配置测试

        被测环境软硬件环境参数的调整,达到最优的分配原则。

  5.5并发测试

        模拟用户的并发访问,测试多用户并发访问同一个应用时是否存在死锁或者其他的问题

        特点

          • 发现系统中可能隐藏的并发访问的问题
          • 关注系统可能存在的并发问题,如内存泄露,线程锁,资源争用情况
          • 使用的测试工具如profiler等

        问题

          • 内存问题(内存泄露,太多临时对象,超过太多设计生命周期对象)
          • 数据库问题(数据库锁死,长事务)
          • 线程/进程问题(线程同步失败,进程同步失败)
          • 其他问题(争取用资源导致锁死,TimeOut超时)

  5.6可靠性测试

        给系统加载一定的业务压力,让应用持续运行一段时间,测试系统在这种条件下是否能稳定运行

  5.7故障演练

        故意让程序出现问题,考验出现问题之后团队怎么处理

  5.8灾难恢复测试

        故意删除数据,看如何恢复过来