性能测试理论
一、性能测试理论知识
1、常用的七种性能测试方法
(1) 后端性能测试:其实,你平时听到的性能测试,大多数情况下指的是后端性能测试,也就是服务器端性能测试。后端性能测试,是通过性能测试工具模拟大量的并发用户请求,然后获取系统性能的各项指标,并且验证各项指标是否符合预期的性能需求的测试手段。
(2) 前端性能测试:通常来讲,前端性能关注的是浏览器端的页面渲染时间、资源加载顺序、请求数量、前端缓存使用情况、资源压缩等内容,希望借此找到页面加载过程中比较耗时的操作和资源,然后进行有针对性的优化,最终达到优化终端用户在浏览器端使用体验的目的。
其中几个最典型也是最重要的规则,来帮助你理解前端性能测试优化的关注范围:
① 减少 http 请求次数:http 请求数量越多,执行过程耗时就越长,所以可以采用合并多个图片到一个图 片文件的方法来减少 http 请求次数,也可以采用将多个脚本文件合并成单一文件的方式减少 http 请求次数;
② 减少 DNS 查询次数:DNS 的作用是将 URL 转化为实际服务器主机 IP 地址,实现原理是分级查找,查找过程需要花费 20~100ms 的时间,所以一方面我们要加快单次查找的时间,另一方面也要减少一个 页面中资源使用了多个不同域的情况;
③ 避免页面跳转:页面跳转相当于又打开一个新的页面,耗费的时间就会比较长,所以要尽量避免使用页面跳转;n
④ 使用内容分发网络(CDN):使用 CDN 相当于对静态内容做了缓存,并把缓存内容放在网络供应商 (ISP)的机房,用户根据就近原则到 ISP 机房获取这些被缓存了的静态资源,因此可以大幅提高性能;
⑤ Gzip 压缩传输文件:压缩可以帮助减小传输文件的大小,进而可以从网络传输时间的层面来减少响应
时间;
(3) 代码级性能测试:代码级性能测试,是指在单元测试阶段就对代码的时间性能和空间性能进行必要的测试和评估,以防止 底层代码的效率问题在项目后期才被发现的尴尬。
(4) 压力测试:压力测试,通常指的是后端压力测试,一般采用后端性能测试的方法,不断对系统施加压力,并验证系统化处于或长期处于临界饱和阶段的稳定性以及性能指标,并试图找到系统处于临界状态时的主要瓶颈点。
(5) 配置测试:配置测试,主要用于观察系统在不同配置下的性能表现,通常使用后端性能测试的方法:通过性能基准测试建立性能基线;在此基础上,调整配置;基于同样的性能基准测试,观察不同配置条件下系统性能的差异,根本目的是要找到特定压力模式下的最佳配置。这里需要注意的是,“配置”是一个广义配置的概念,包含了以下多个层面的配置:宿主操作系统的配置;服务器的配置;数据库的配置;JVM 的配置; 网络环境的配置等;
(6) 并发测试:在实际项目中,我建议在要求的并发数上进行适当放大,比如要求的并发数是 100,那我们集合点并发数可以设置为 120。
(7) 可靠性测试:可靠性测试,是验证系统在常规负载模式下长期运行的稳定性。虽然可靠性测试在不同公司的叫法不同,但其本质就是通过长时间模拟真实的系统负载来发现系统潜在的内存泄漏、链接池回收等问题。
2、性能测试应用的几大领域
(1) 能力验证
① 能力验证是最常用,也是最容易理解的性能测试的应用领域,主要是验证“某系统能否在 A 条件下具有B 能力”,通常要求在明确的软硬件环境下,根据明确的系统性能需求设计测试方案和用例。能力验证这个领域最常使用的测试方法,包括后端性能测试、压力测试和可靠性测试。
(2) 能力规划
① 能力规划关注的是,如何才能使系统达到要求的性能和容量。通常情况下,我们会采用探索性测试的方式来了解系统的能力。能力规划解决的问题,主要包括以下几个方面:①能否支持未来一段时间内的用户增长;②应该如何调整系统配置,使系统能够满足不断增长的用户数需求;③应用集群的可扩展性验证,以及寻找集群扩展的瓶颈点;④数据库集群的可扩展性验证;⑤缓存集群的可扩展性验证;
(3) 性能调优
① 这个领域最常用的测试方法,涵盖了我在上面分享的七大类测试方法,即后端性能测试、前端性能测试、代码级性能测试、压力测试、配置测试、并发测试和可靠性测试。
(4) 缺陷发现
① 缺陷发现,是一个比较直接的应用领域,通过性能测试的各种方法来发现诸如内存泄露、资源竞争、不合理的线程锁和死锁等问题。 缺陷发现,最常用的测试方法主要有并发测试、压力测试、后端性能测试和代码级性能测试