在进行接口性能自动化测试过程中,压测的方式有2种:
- 同时并发
- 设置线程组、执行时间、循环次数,这种方式可以控制接口请求的次数
- 持续压测
- 设置线程组、循环次数=勾选“永远”,调度器(持续时间),这种方式可以控制压测周期时间
指定并发
- 设置线程数number of threads(users)
- 设置执行时间ramp-up period(in seconds)
- 设置循环次数loop count
场景一:
设置线程数number of threads(users):10
设置执行时间ramp-up period(in seconds):0
设置循环次数loop count:5
含义:使10个线程启动并同时运行也就是并发执行10个线程。10个线程为一个样本,每个样本循环执行5次
可用监听树查看线程组执行的效果,是10个一起出现
场景二:
设置线程数number of threads(users):10
设置执行时间ramp-up period(in seconds):20
设置循环次数loop count:5
含义:20秒使10个线程启动并运行,每个线程将在前一个线程启动后20/10秒后启动(也就是间隔2s执行一个线程。10个线程为一个样本,每个样本循环执行5次;使用监听书可以看到,请求是有间隔的出现的
持续压测
当领导说:对接口XX持续24小时的压测?这个时候我们怎么办呢?
希望对一个接口进行持续时间性的压测时,就需要使用到jmeter线程组的调度器功能。
调度器可以控制压测持续的时间和线程启动延迟的时间。具体如下:
Loop count:forever(永远)
Duration(seconds):持续时间
Starup delay(seconds):启动延迟时间
场景三
设置线程数number of threads(users):10
设置执行时间ramp-up period(in seconds):0
设置循环次数loop count:勾选“永远”
使用调度器,设置持续时间Duration(seconds):60
含义:10个线程同时并发执行。持续循环执行60s,不限制样本数(10个线程间隔0s并发进行)
下图为持续压测的结果示意图:
一、jmeter 压测
1.一般压测时间为10-15分钟就行,设置时间在调度器配置--持续时间中设置,例如:想压10分钟,则持续时间输入:600
1.线程数:发送请求的用户数,即并发数
2.Ram-up Period(in seconds):此处输入1,则指这1个线程要在1秒内全部启动
3.循环次数:如果勾选永远那么就一直循环。本例填写 的是60,也就是说60乘以线程数100,一共发送6000次请求。理论上这些请求会在60秒的时候发送完成。
但是受到机器配置和 当前网络的影响,通常这个数字要比1分钟长一些。
https://blog.csdn.net/weixin_45580903/article/details/105196639?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_v2~rank_aggregation-9-105196639.pc_agg_rank_aggregation&utm_term=jmeter%E7%BA%BF%E7%A8%8B%E6%95%B0%E5%92%8C%E6%97%B6%E9%97%B4%E5%9B%BE&spm=1000.2123.3001.4430集合点
性能测试中最常见的一个场景莫过于同一时间N个用户同时进行操作。之前自己学习的时候,感觉使用线程组数在0秒内启动所有线程,不就基本实现并发了么?为啥还有个同步定时器呢?同步定时器是干啥的?看了好多篇文章和自己动手实践后,稍微有了些理解。
同步定时器Synchronizing Timer配置如图,主要有2个参数:
第一个参数,我自己翻译为每次集合的用户数,当线程组数达到这个数量时,触发一次并发。
第二个参数,超时时间,当数量没有达到集合用户数时,若超过了这个时间,也会触发并发。
几个例子
备注:线程组下添加了一个百度搜索的HTTP请求,添加了Listener - View Results in Table,方便结果查看。
配置一:线程组数10,启动时间为0秒,无同步定时器
效果:按下start按钮后,所有线程组的HTTP请求几乎同时启动运行。
配置二:线程组数10,启动时间为10秒,无同步定时器
效果:按下start按钮后,每1秒启动一个线程组,10秒完成所有10个线程组启动,如图:
配置三:线程组数10,启动时间为10秒,同步定时器中每次集合用户数10
效果:按下start按钮后,仍然是按照配置10秒内启动所有线程组,即每1秒启动一个线程组,但是HTTP请求并没有在线程组启动后立即发送,那是因为有同步定时器设置了10个为一个集合,所以会等待10秒钟,线程组个数凑够了10个之后,所有线程组的HTTP请求再同时发送,如图:
配置四:线程组数10,启动时间为10秒,同步定时器中每次集合用户数5
效果:按下start按钮后,每1秒钟启动一个线程组,但HTTP请求并没有立即发送,而是5秒钟后,当集合到了5个线程组后,5个HTTP请求一起发送,再过5秒钟后,剩余5个线程组的HTTP请求一起发送,如图:
其他配置
配置五:线程组数10,启动时间为10秒,同步定时器中每次集合用户数3,超时时间为0
这种配置…运行起来的效果…:按下start按钮,3秒后有3个线程组HTTP请求发送,6秒后有另3个线程组HTTP请求发送,9秒后又有3个线程组HTTP请求发送,然后就没有然后了,最后一个线程组的HTTP请求不会发送了,因为永远达不到集合数3。
配置六:线程组数10,启动时间为10秒,同步定时器中每次集合用户数3,超时时间为5000ms
开始时候的效果与上面配置类似,按下start按钮,3秒后有3个线程组HTTP请求发送,6秒后有另3个线程组HTTP请求发送,9秒后又有3个线程组HTTP请求发送。此时由于只剩一个线程,所以定然不会达到集合数量,但是设置了5秒超时,所以5秒钟后,最后一个线程组启动运行。如图
思考
最后的疑问是,使用
配置1(线程组数10,启动时间为0秒,无同步定时器)
配置3(线程组数10,启动时间为10秒,同步定时器中每次集合用户数10)
都能实现同一时间多用户并发。区别在哪儿呢?
1、配置3中这些线程是慢慢启动的,然后同一个时间并发访问。而配置1中的所有线程同时启动且并发访问。当并发用户数很大很大时,配置1会使得压力服务器瞬间压力太大,可能会影响并发效果(最后一句话是其他同学们说的,我也没试过,以后有机会再体验吧)。
2、loadrunner中管这种并发叫集合点。所谓集合,感觉更像是军训时候,教官突然吹了一个哨子,说5分钟后在楼下紧急集合。此时大家会各自开始准备,有的人很快就跑到楼下了,有的人穿衣服比较慢,或者跑的太慢,最后一秒钟才到楼下,总而言之,5分钟后大家集合完毕,准备统一行动。说着说着,是不是感觉同步计时器Synchronizing Timer才像是真正的集合呢?嘿嘿,大概是吧。
————————————————
版权声明:本文为CSDN博主「万能車」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45580903/article/details/105196639