jmeter模拟spike测试(尖峰测试)

概述

尖峰测试(Spike testing)在性能测试中属于压力测试的一个子集。指的是在某一瞬间或者多个频次下用户数和压力陡然增加的场景。

为了验证我们的网站在访问用户急剧增加的情况下,或者短时间内反复急剧增加工作负载时能否正常工作;以及程序能否从高负荷中恢复并正常工作时常常用到这种测试手法。

Spike在英文中是钉子的意思,或者我们可以将其称之为冲击测试,反复冲击服务器。

 

常见的场景有

12306开始售票时用户急剧增加


网站公布高考成绩、录取分数时,用户急剧增加


网站投放商业促销广告和促销活动,如双11和618等活动开始时,用户急剧增加


等等。。。。

 

现在我们假设有这样一个场景

我们的网站正在平稳运行的时候,突然有一波1000用户同时访问,我们称之为第一浪潮。访问了30s之后,第一浪潮在15s内逐渐退出系统。

在第一浪潮退出系统的同时,第二波2000用户在极短时间内又突然涌入网站,我们称之为第二浪潮。在访问30s之后,第二浪潮在15s内也逐渐退出了系统。

在第二浪潮退出系统的同时,第三波3000用户又突然涌入网站,我们称之为第三浪潮。在访问30s之后,第三浪潮在15s内也逐渐退出了系统。

在第三浪潮退出系统的同时,第四波1000用户又突然涌入网站,我们称之为第四浪潮。在访问30s之后,第四浪潮在15s内也逐渐退出了系统。

并发的用户就像浪花一波一波的不断涌入系统,拍打服务器,考验我们的系统能否顶住压力并平稳运行

 

测试方案设计

我们知道,jmeter中的基础线程组用来构成对服务器的压力。

我们在添加定时器之后,可以模拟出某一瞬间的压力。

但是这种线程组只能模拟出一个尖峰,如果我们想要模拟出那种浪潮式的场景,它不能满足我们的要求。

 

jmeter提供了另一个线程组满足我们的测试需求

Ultimate Thread Group(终极线程组)

 听起来是不是有点高端?下面我们来了解一下它的用法

 

 

 如图所示

启动的线程数量(Start Threads Count),也就是访问的用户数

延迟时间(Initial Delay,秒),也就是压力到达的时间

线程启动时间(Startup Time,秒),也就是为了满足预期压力而加载线程所需要的时间

压力满足之后持续运行的时间(Hold Load For,秒)

释放掉压力需要的时间(Shutdown Time,秒)

每一个Thread schedule 都是一个线程组。因此我们可以把这个终极线程组理解为多个基础线程组的压力叠加

 

图中我们模拟出了四个spike场景

 在第一批1000用户访问完毕的时候,第二批2000用户的压力又开始增加,第二批2000用户压力释放之后,第三批3000用户的压力又开始增加。。。。

 

下图是单位时间内活动的真实线程数,可以看出在中间两个批次压力下,线程根本来不及释放掉

 

结合tps监听和聚合报告可以看出,spike场景测试下,有很多事物没有正确响应,错误率达到了20.78%

 

posted @ 2019-06-30 11:03  飞天小子  阅读(...)  评论(...编辑  收藏