29 | 聊聊性能测试的基本方法与应用领域
Posted uni-hoang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了29 | 聊聊性能测试的基本方法与应用领域相关的知识,希望对你有一定的参考价值。
并发用户数、响应时间、系统吞吐量之间的关系
空闲区间-线性增长区间-拐点-过饱和区间
阶段 | 并发用户数 | 响应时间 | 系统吞吐量 |
---|---|---|---|
空闲区间 | 并发用户少 | 响应时间短 | 系统吞吐量低 |
线性增长区间 | 并发用户增多 | 响应时间增加不多 | 系统的吞吐量随并发用户增多呈线性增长 |
拐点 | 并发用户进一步增多 | 响应时间明显变长 | 系统的整体吞吐量并不会随着并发用户数的增长而继续呈线性增长 |
过饱和区间 | 并发用户进一步增多 | 响应时间会变得无限长 | 系统的整体吞吐量会降为零 |
常用的七种性能测试方法
后端性能测试(Back-end Performance Test)
后端性能测试,是通过性能测试工具模拟大量的并发用户请求,然后获取系统性能的各项指标,并且验证各项指标是否符合预期的性能需求的测试手段。
这里的性能指标,除了包括并发用户数、响应时间和系统吞吐量外,还应该包括各类资源的使用率,比如系统级别的 CPU 占用率、内存使用率、磁盘 I/O 和网络 I/O 等,再比如应用级别以及 JVM 级别的各类资源使用率指标等。
采用基于协议的模拟方式,也就是去模拟用户在 GUI 操作的过程中实际向后端服务发起的请求。
后端性能测试的场景设计主要包括以下两种方式:
基于性能需求目标的测试验证;
探索系统的容量,并验证系统容量的可扩展性
前端性能测试(Front-end Performance Test)
通常来讲,前端性能关注的是浏览器端的页面渲染时间、资源加载顺序、请求数量、前端缓存使用情况、资源压缩等内容,希望借此找到页面加载过程中比较耗时的操作和资源,然后进行有针对性的优化,最终达到优化终端用户在浏览器端使用体验的目的。
目前,业界普遍采用的前端测试方法,是雅虎(Yahoo)前端团队总结的 7 大类 35 条前端优化规则。
-
减少 http 请求次数:http 请求数量越多,执行过程耗时就越长,所以可以采用合并多个图片到一个图片文件的方法来减少 http 请求次数,也可以采用将多个脚本文件合并成单一文件的方式减少 http 请求次数;
-
减少 DNS 查询次数:DNS 的作用是将 URL 转化为实际服务器主机 IP 地址,实现原理是分级查找,查找过程需要花费 20~100ms 的时间,所以一方面我们要加快单次查找的时间,另一方面也要减少一个页面中资源使用了多个不同域的情况;
-
避免页面跳转:页面跳转相当于又打开一个新的页面,耗费的时间就会比较长,所以要尽量避免使用页面跳转;
-
使用内容分发网络(CDN):使用 CDN 相当于对静态内容做了缓存,并把缓存内容放在网络供应商(ISP)的机房,用户根据就近原则到 ISP 机房获取这些被缓存了的静态资源,因此可以大幅提高性能;
-
Gzip 压缩传输文件:压缩可以帮助减小传输文件的大小,进而可以从网络传输时间的层面来减少响应时间;
代码级性能测试(Code-level Performance Test)
代码级性能测试,是指在单元测试阶段就对代码的时间性能和空间性能进行必要的测试和评估,以防止底层代码的效率问题在项目后期才被发现的尴尬。
从实际执行的层面来讲,代码级性能测试并不存在严格意义上的测试工具,通常的做法是:改造现有的单元测试框架。
最常使用的改造方法是:
-
将原本只会执行一次的单元测试用例连续执行 n 次,这个 n 的取值范围通常是 2000~5000;
-
统计执行 n 次的平均时间。如果这个平均时间比较长(也就是单次函数调用时间比较长)的话,比如已经达到了秒级,那么通常情况下这个被测函数的实现逻辑一定需要优化。
压力测试(Load/Stress Test)
压力测试,通常指的是后端压力测试,一般采用后端性能测试的方法,不断对系统施加压力,并验证系统化处于或长期处于临界饱和阶段的稳定性以及性能指标,并试图找到系统处于临界状态时的主要瓶颈点。所以,压力测试往往被用于系统容量规划的测试。
还有些情况,在执行压力测试时,我们还会故意在临界饱和状态的基础上继续施加压力,直至系统完全瘫痪,观察这个期间系统的行为;然后,逐渐减小压力,观察瘫痪的系统是否可以自愈。(自愈测试)
配置测试(Configuration Test)
配置测试,主要用于观察系统在不同配置下的性能表现,通常使用后端性能测试的方法。
并发测试(Concurrence Test)
并发测试,指的是在同一时间,同时调用后端服务,期间观察被调用服务在并发情况下的行为表现,旨在发现诸如资源竞争、资源死锁之类的问题。
集合点并发
设我们希望后端调用的并发数是 100,如果直接设定 100 个并发用户是无法达到这个目标的,因为这 100 个并发用户会各自执行各自的操作,你无法控制某一个确定的时间点上后端服务的并发数量。
为了达到准确控制后端服务并发数的目的,我们需要让某些并发用户到达该集合点时,先处于等待状态,直到参与该集合的全部并发用户都到达时,再一起向后端服务发起请求。简单地说,就是先到的并发用户要等着,等所有并发用户都到了以后,再集中向后端服务发起请求。
可靠性测试(Reliability Test)
可靠性测试,是验证系统在常规负载模式下长期运行的稳定性。
虽然可靠性测试在不同公司的叫法不同,但其本质就是通过长时间模拟真实的系统负载来发现系统潜在的内存泄漏、链接池回收等问题。
尽可能地模拟出真实的负载情况。
性能测试的四大应用领域
第一,能力验证
主要是验证“某系统能否在 A 条件下具有 B 能力”,通常要求在明确的软硬件环境下,根据明确的系统性能需求设计测试方案和用例。
第二,能力规划
如何才能使系统达到要求的性能和容量。通常情况下,我们会采用探索性测试的方式来了解系统的能力。
第三,性能调优
性能调优主要解决性能测试过程中发现的性能瓶颈的问题,通常会涉及多个层面的调整,包括硬件设备选型、操作系统配置、应用系统配置、数据库配置和应用代码实现的优化等等。
第四,缺陷发现
通过性能测试的各种方法来发现诸如内存泄露、资源竞争、不合理的线程锁和死锁等问题。
来源于 极客时间 茹炳晟 软件测试52讲
以上是关于29 | 聊聊性能测试的基本方法与应用领域的主要内容,如果未能解决你的问题,请参考以下文章