zoukankan      html  css  js  c++  java
  • Gatling实战(二)

      在上一篇实战讲解了Gatling的用例,不过还没涉及到性能方面的内容,其实用例中的最后一句就和性能有关了

    setUp(scn.inject(atOnceUsers(1)).protocols(httpConf))
    

      这样写更好理解一些

    setUp(————表示本用例的压力设置
      scn.inject(————表示对用例中哪个场景进行压力设置,如果你定义了两个场景,例如官网例子的val users = scenario("Users")和val admins = scenario("Admins"),那么你需要分别对两个场景的压力进行设置
        atOnceUsers(1)————核心,具体的压力设置,下面有各种设置的使用说明
        ).protocols(httpConf)————表示要测试的数据定义,就是你在用例开始时定义var httpConf
         )
    

      Gatling提供了多种压力设置的方法,如下所示

      setUp(
      scn.inject(
        nothingFor(4 seconds), // 1
        atOnceUsers(10), // 2
        rampUsers(10) over(5 seconds), // 3
        constantUsersPerSec(20) during(15 seconds), // 4
        constantUsersPerSec(20) during(15 seconds) randomized, // 5
        rampUsersPerSec(10) to(20) during(10 minutes), // 6
        rampUsersPerSec(10) to(20) during(10 minutes) randomized, // 7
        splitUsers(1000) into(rampUsers(10) over(10 seconds)) separatedBy(10 seconds), // 8
        splitUsers(1000) into(rampUsers(10) over(10 seconds)) separatedBy(atOnceUsers(30)), // 9
        heavisideUsers(1000) over(20 seconds) // 10
        ).protocols(httpConf)
      )
    

      下面具体说说每种压力设置后的实际效果

      1、nothingFor(duration): 在指定的时间段(duration)内什么都不干
      实例:nothingFor(4 seconds)或者nothingFor(1 minutes),(注,下方每种可以设置时间的地方都可以根据实际需要用seconds或者minutes来限制)
      实际效果:真的是什么都不干。。。设置之后一直循环sleep,不知道有啥用,估计用于下方的组合压力设置的吧

      2、atOnceUsers(nbUsers): 一次模拟的用户数量(nbUsers)。
      实例:atOnceUsers(10)
      实际效果:运行后即时同时10个数据包,如图

      3、rampUsers(nbUsers) over(duration): 在指定的时间段(duration)内逐渐增加用户数到指定的数量(nbUsers)。
      实例:rampUsers(10) over(5 seconds)
      实际效果:运行后从1开始逐渐增加每秒并发,直到发了10个包,如图,注意图中时间

    4、constantUsersPerSec(rate) during(duration): 以固定的速度模拟用户,指定每秒模拟的用户数(rate),指定模拟测试时间长度(duration)。
      实例:constantUsersPerSec(10) during(10 seconds)
      实际效果:运行后每秒并发为10,直到运行了10秒钟,如图,这个用来做稳定性测试不错
    5、constantUsersPerSec(rate) during(duration) randomized: 以固定的速度模拟用户,指定每秒模拟的用户数(rate),指定模拟时间段(duration)。用户数将在随机被随机模拟(毫秒级别)。数量太少时和上面的效果差不多
      实例:constantUsersPerSec(10) during(10 seconds) randomized
      实际效果:运行后每秒并发为10左右,直到运行了10秒钟
    6、rampUsersPerSec(rate1) to (rate2) during(duration): 在指定的时间(duration)内,使每秒模拟的用户从数量1(rate1)逐渐增加到数量2(rate2),速度匀速。
      实例:rampUsersPerSec(10) to(20) during(10 minutes)
      实际效果:运行后每秒并发为10,然后匀速增加每秒并发,10分钟后,并发变为20,然后结束
    7、rampUsersPerSec(rate1) to (rate2) during(duration) randomized: 在指定的时间(duration)内,使每秒模拟的用户从数量1(rate1)增加到数量2(rate2),速度随机。
      实例:rampUsersPerSec(10) to(20) during(10 minutes) randomized
      实际效果:运行后每秒并发为10,然后随机增加并发,10分钟后,并发变为20,然后测试结束
    8、splitUsers(nbUsers) into(injectionStep) separatedBy(duration): 反复执行所定义的模拟步骤(injectionStep),每次暂停指定的时间(duration),直到总数达到指定的数量(nbUsers)
      实例:splitUsers(1000) into(rampUsers(10) over(10 seconds)) separatedBy(10 seconds)
      实际效果:反复执行rampUsers(10) over(10 seconds),每次执行间隔10秒,发了1000个包后,测试结束
    9、splitUsers(nbUsers) into(injectionStep1) separatedBy(injectionStep2):反复依次执行所定义的模拟步骤1(injectionStep1)和模拟步骤2(injectionStep2),直到总数达到指定的数量(nbUsers)左右,因为如果设置不好不一定能到达总数,见下方说明。
      实例:splitUsers(100) into(rampUsers(10) over(10 seconds)) separatedBy(atOnceUsers(30))
      实际效果:先执行rampUsers(10) over(10 seconds),再执行atOnceUsers(30),反复如此,理论上直到发了100个包后,测试结束,这个例子不行,因为10-30-10-30-10这样循环后就已经90个包了,如果再执行下一个atOnceUsers(30)就超出了,所以发到90的时候测试结束
    10、heavisideUsers(nbUsers) over(duration): 在指定的时间(duration)内使用类似单位阶跃函数的方法逐渐增加模拟并发的用户,直到总数达到指定的数量(nbUsers).简单说就是每秒并发用户数递增。
      实例:heavisideUsers(1000) over(20 seconds)
      实际效果:在20秒内增加并发数,直到发了1000个包左右,测试结束,至于是不是用了单位阶跃函数我就没有细究了,部分抓包结果如图

  • 相关阅读:
    阿里云服务器mysql连接不了2003 -can't connect to mysql server on 'ip' (10038)
    androidstudio代码混淆
    apk反编译
    android bottomnavicationbar底部图标vector设计
    Java++:不要随意使用 Cookie 会引火烧身的
    Java++:用户认证-基于 jwt 和 session 的区别和优缺点
    Spring++:AOP 拦截 Service | Controller 日志
    Spring++:整合 Retry 实现重试机制
    (xxl_job | quartz):XXL_JOB 对比 Quartz 一决高下!
    Spring++:定时任务 Cron表达式详解
  • 原文地址:https://www.cnblogs.com/idbeta/p/5103526.html
Copyright © 2011-2022 走看看