测试驿栈-由浅入深学性能 性能测试连载 (15)-spike 测试场景设计
性能答疑 QQ 群:777139651
概述
尖峰测试(Spike testing)在性能测试中属于压力测试的一个子集。指的是在某一瞬间或者多个频次下用户数和压力陡然增加的场景。
为了验证我们的网站在访问用户急剧增加的情况下,或者短时间内反复急剧增加工作负载时能否正常工作;以及程序能否从高负荷中恢复并正常工作时常常用到这种测试手法。
Spike 在英文中是钉子的意思,或者我们可以将其称之为冲击测试,反复冲击服务器。
常见的场景
12306 开始售票时用户急剧增加
网站公布高考成绩、录取分数时,用户急剧增加
网站投放商业促销广告和促销活动,如双 11 和 618 等活动开始时,用户急剧增加
。。。。
场景模拟
网站正在平稳运行的时候,突然有一波 1000 用户极短时间内同时访问,我们称之为第一浪潮。访问了 30s 之后,第一浪潮在 15s 内逐渐退出系统。
在第一浪潮退出系统的同时,第二波 2000 用户在极短时间内又突然涌入网站,我们称之为第二浪潮。在访问 30s 之后,第二浪潮在 15s 内也逐渐退出了系统。
在第二浪潮退出系统的同时,第三波 3000 用户又突然涌入网站,我们称之为第三浪潮。在访问 30s 之后,第三浪潮在 15s 内也逐渐退出了系统。
并发的用户就像浪花一波一波的不断涌入系统,拍打服务器,考验我们的系统能否顶住压力并平稳运行
场景设计
我们知道,jmeter 中的基础线程组用来构成对服务器的压力。
我们在添加定时器之后,可以模拟出某一瞬间的压力。
但是这种线程组只能模拟出一个尖峰,如果我们想要模拟出那种浪潮式的场景,它不能满足我们的要求。
1-1
jmeter 提供了另一个线程组满足我们的测试需求--Ultimate Thread Group(终极线程组)
用法
1-2
如图 1-2 所示
启动的线程数量(Start Threads Count),也就是访问的用户数
延迟时间(Initial Delay,秒),也就是压力到达的时间
压力释放时间(Startup Time,秒),也就是为了满足预期压力而释放线程所需要的时间
压力满足之后持续运行的时间(Hold Load For,秒)
释放掉压力需要的时间(Shutdown Time,秒)
每一个 Thread schedule 都是一个线程组。因此我们可以把这个终极线程组理解为多个基础线程组的压力叠加
图中我们模拟出了四个 spike 场景
在第一批 1000 用户访问完毕的时候,第二批 2000 用户的压力又开始增加,第二批 2000 用户压力释放之后,第三批 3000 用户的压力又开始增加。。。。
下图是单位时间内活动的真实线程数,可以看出在中间两个批次压力下,线程根本来不及释放掉
结合 tps 监听和聚合报告可以看出,spike 场景测试下,有很多事物没有正确响应,错误率达到了 20.78%