性能测试的方法

常用的性能测试方法分为七大类: 后端性能测试(Back-end Performance Test )、前端性能测试(Front-end Performance Test )、代码级性能测试(Code-level Performance Test )、压力测试(Load/Stress Test )、配置测试(Confguration Test )、并发测试 (Concurrence Test ),以及可靠性测试(Reliability Test )

后端性能测试

平时听到的性能测试,大多数情况下指的是后端性能测试,也就是服务器端性能测试

通过性能测试工具模拟大量的并发用户请求,然后获取系统性能的各项指标,并且验证各项指标是否符合预期的性能需求的测试手段

性能指标,除了包括并发用户数、响应时间和系统吞吐量外,还应该包括各类资源的使用率,比如系统级别的CPU占用率、内存使用率、磁盘I/O和网络I/O等,再比如应用级别以及JVM级别的各类资源使用率指标等

后端性能测试的场景设计主要包括以下两种方式:

  • 基于性能需求目标的测试验证
  • 探索系统的容量,并验证系统容量的可扩展性

前端性能测试

前端性能关注的是浏览器端的页面渲染时间、资源加载顺序、请求数量、前端缓存使用情况、资源压缩等内容,希望借此找到页面加载过程中比较耗时的操作和资源,然后进行有针对性的优化,最终达到优化终端用户在浏览器端使用体验的目的

几个最典型也是最重要的规则:

  • 减少http请求次数:http请求数量越多,执行过程耗时就越长,所以可以采用合并多个图片到一个 图片文件的方法来减少http请求次数,也可以采用将多个脚本文件合并成单一文件的方式减少http请 求次数
  • 减少DNS查询次数:DNS的作用是将URL转化为实际服务器主机IP地址,实现原理是分级查找,查 找过程需要花费20~100ms的时间,所以一方面我们要加快单次查找的时间,另一方面也要减少一个 页面中资源使用了多个不同域的情况
  • 避免页面跳转:页面跳转相当于又打开一个新的页面,耗费的时间就会比较长,所以要尽量避免使 用页面跳转
  • 使用内容分发网络(CDN):使用CDN相当于对静态内容做了缓存,并把缓存内容放在网络供应商 (ISP)的机房,用户根据就近原则到ISP机房获取这些被缓存了的静态资源,因此可以大幅提高性 能
  • Gzip压缩传输文件:压缩可以帮助减小传输文件的大小,进而可以从网络传输时间的层面来减少响 应时间

代码级性能测试

代码级性能测试,是指在单元测试阶段就对代码的时间性能和空间性能进行必要的测试和评估,以防止底层代码的效率问题在项目后期才被发现的尴尬

自上而下的逐级排查定位的方法,效率通常都很低,代价也很高

在项目早期,对一些关键算法进行代码级别的性能测试,以防止此类在代码层面就可 以被发现的性能问题,遗留到最后的系统性能测试阶段才被发现

通常采用的方法是进行N次调用,统计平均执行时长

压力测试

压力测试,通常指的是后端压力测试,一般采用后端性能测试的方法,不断对系统施加压力,并验证系统化处于或长期处于临界饱和阶段的稳定性以及性能指标,并试图找到系统处于临界状态时的主要瓶颈 点。所以,压力测试往往被用于系统容量规划的测试

还有些情况,在执行压力测试时,我们还会故意在临界饱和状态的基础上继续施加压力,直至系统完全 瘫痪,观察这个期间系统的行为;然后,逐渐减小压力,观察瘫痪的系统是否可以自愈

配置测试

配置测试,主要用于观察系统在不同配置下的性能表现,通常使用后端性能测试的方法

  1. 通过性能基准测试(Performance Benchmark)建立性能基线(Performance Baseline)
  2. 调整配置
  3. 基于同样的性能基准测试,观察不同配置条件下系统性能的差异,根本目的是要找到特定压力模式 下的最佳配置

“配置”是一个广义配置的概念,包含了以下多个层面的配置

  • 宿主操作系统的配置
  • 应用服务器的配置
  • 数据库的配置
  • JVM的配置
  • 网络环境的配置

并发测试

并发测试,指的是在同一时间,同时调用后端服务,期间观察被调用服务在并发情况下的行为表现,旨 在发现诸如资源竞争、资源死锁之类的问题

集合点并发: 为了达到准确控制后端服务并发数的目的,我们需要让某些并发用户到达该集合点时,先处于等待状 态,直到参与该集合的全部并发用户都到达时,再一起向后端服务发起请求。简单地说,就是先到的并 发用户要等着,等所有并发用户都到了以后,再集中向后端服务发起请求

在实际项目中,我建议在要求的并发数上进行适当放大,比如要求的并发数是100,那我们集合点并发数可以设置为120

可靠性测试

可靠性测试,是验证系统在常规负载模式下长期运行的稳定性

本质就是通过长时间模拟真实的系统负载来发现系统潜在 的内存泄漏、链接池回收等问题

文章链接 https://fangzongzhou.github.io/2021/01/08/计算机/软件测试/性能测试/性能测试的方法/