jmeter教程(十七):性能测试策略

做性能测试,怎么做?肯定是要有策略的,策略怎么定?根据性能需求来定。而性能需求,可以从客户中来,可以从产品经理中来,也可以从开发来。像我们经常听到的,系统的tps要达到 XXX,用户的某一个操作要在 XXX 秒内完成,系统要能够支持 XXX 个用户同时做某个操作等等,这些都是性能需求,而不同的性能需求,在进行测试时,就要用不同的策略。那么在做性能测试时会用到哪些策略呢?

1. 最基本的策略,就是让脚本循环,持续一定的时间,通过不断增加线程数,查看系统的性能状况。

2. 将几个请求,当做一个整体来统计性能数据。比如电子商城,用户购买商品,中间有好几个步骤,但性能需求要求用户购买商品,需要在 XXX 秒内完成。那么就需要把购买商品的几个步骤,当作一个整体来统计性能数据

3. 在一个性能测试脚本中,有几个步骤是系统的关键点。那么就需要对这几个步骤做一下并发的测试

4. 前面三个策略是基础,在这些基础上,根据各个系统的不同,可以组合出符合各个系统不同的策略,简单地说,就是场景模拟。比如,电子商城,模拟 XXX 个用户在线,可能就会分配一部分用户浏览商品,一部分用户在购买商品,一部分用户在下线/上线等。也或者模拟流量不均匀的情况,某一时刻100用户在线,过一会降到50用户在线,再过一会又升到150用户在线,在这样的情况,看系统的性能情况等等。

那么,这些策略,在jmeter中要怎么实现?

第一种是最基本的,是其它策略的基础,为什么这么说呢?做性能测试的时候,通常是单独的弄服务器做,也就意味着没跑性能测试的时候,服务器是处于空载的状态。而线上服务器,一般不会处于空载的状态。如果你的测试,只是让脚本起多个线程,跑一次脚本,是没有说服力的。当服务器从空载瞬间升到满负荷状态,服务器很大的一部分开销可能就消耗在创建线程上,而不是在处理业务上。所以,性能测试,必定是跑脚本持续一段时间。至于持续多长时间,这个看各人的情况,并没有一个准则,我一般情况下,是持续10分钟。在jmeter,具体的设置就是在线程组的设置界面

线程数:就是让jmeter起多少个线程来跑脚本,一个线程可以理解为就是一个虚拟的用户,如果设置为10,那么就相当于有10个用户,同时在执行你的脚本。

Ramp-Up Perild:就是设置的线程数,在多少秒内启动完。比如线程数设置为10,这个设置为5,那么10个线程就会在5秒之内启动,也就是每秒启动2个线程。这个就是起一个缓冲的作用,前面也说了,启线程是很消耗系统资源的,所有的线程都同时启动,对系统的影响是很大的,特别是线程数设置得非常大的时候。

循环次数:就是脚本要循环多少次,做性能测试,都是让脚本持续运行一段时间,所以这个,勾选永远。

Delay Thread creation until needed:这个一看,就知道是延迟启动线程了,需要的时候才创建线程,很少用

调度器:勾上,这个勾上了,下面的的配置才能生效。

持续时间:这个就是让脚本运行多少时间的。600,对了,这就是我经常用的设置(10分钟)。

启动延迟:就是在你点了运行之后,脚本并不会立即运行,而是延迟多少秒之后,再执行。

下面两个就是设置脚本定时运行的,没用过,如果你要对线上的服务压测,但只能晚上人少的时候测试,就可以用这个。

配置说完了,那么该怎么执行测试呢?执行测试,要先用单个的线程,跑一次,得到一个基准值。然后,再逐步往上加线程,再将各次测试的结果作成曲线图

简单作的一张图,横坐标是线程数,纵坐标是tps,从图中可以看到,第三列的点上是一个拐点,这个点上,就是服务器的最佳性能所在。呃,该怎么解释这个呢?前面的点,每增加相应的线程数,TPS也会增加相应的数量,增长关系不是正比,每次往后,TPS增长量都会少一点,但每次减少的都差不多。但是到了拐点,再增加线程,TPS的增长就严重的下滑了。如果对数学里的最佳分配比较熟悉的话,应该很好理解这个。好了好了,这个只是理论。但是在实际中,我们并不会太多地关注这个最佳点,我们通常更关心的是极限值。在测试中,我们通常是这样的,到了一定的线程数之后,再增加线程数,发现TPS不会增长,甚至还降低了,那么这就是服务器的极限了。那么这个极限是真极限还是假极限呢,这个时候就要通过各种测试数据进行分析了。

将几个请求当作一个整体来处理,就是把这几个请求放在一个事务控制器里面,在前面讲流程控制的时候,有讲过,这里就不再讲了。

并发测试,需要用到同步定时器

同步定时器有两个配置项,第一个就是达到了多少用户,才开始发请求,比如配置为10,那么用户执行完了前面的请求,到了这步,不会立即发请求,会先等着,等到有10个用户都执行到了这一步,然后就,大伙都往前冲吖!下面的就是超时时间,单位是毫秒。从第一个用户开始等,就开始计时,如果在设置的时间之内,也没有达到发请求的人数时,三七不管二十一了,冲!

场景模拟,得根据各个系统的业务来定,一般都是弄多个线程组,每个线程组里的用户做着不同的事情,以达到模拟真实的业务场景。像我前面列举的业务场景,应该不难实现吧,而且场景模拟测试,一般是用于稳定测试,在单一场景测试通过后,然后才会有综合场景模拟,在大的压力下(最佳性能或极限性能)让脚本持续运行8小时或是更长的时间,查看系统的稳定性。

欢迎加入测试群:91425817,一起讨论测试的那此事。

发布了47 篇原创文章 · 获赞 9 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/kingzhsh/article/details/88074815