zoukankan      html  css  js  c++  java
  • Jmeter-并发压测和持续性压测

    在进行接口性能自动化测试过程中,压测的方式有2种:

    1. 同时并发
      1. 设置线程组、执行时间、循环次数,这种方式可以控制接口请求的次数
    2. 持续压测
      1. 设置线程组、循环次数=勾选“永远”,调度器(持续时间),这种方式可以控制压测周期时间

    指定并发

    1. 设置线程数number of threads(users)
    2. 设置执行时间ramp-up period(in seconds)
    3. 设置循环次数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

  • 相关阅读:
    从0开始学习C#第三天
    金盾视频加密器V2014视频加密原理分析
    从0开始学习C#第二天
    从0开始学习C#第一天
    hook NtTerminateProcess进行应用的保护
    Wireshark简单使用教程3——附视频
    Wireshark简单使用教程2——附视频
    Wireshark简单使用教程1——附视频
    一个bat病毒分析(part1)
    社团的CTF逆向题WriteUp
  • 原文地址:https://www.cnblogs.com/swiftycc/p/14693668.html
Copyright © 2011-2022 走看看