当前位置: 首页 > 知识库问答 >
问题:

加特林可变加速

姚洲
2023-03-14

我试着用各种“Rest”和“atOnceUser”进行注射。我在留档上没有找到一个好的解决方案。

我的方法是使用本地计数器创建一个名为“getNextNumber()”的函数,以增加“atOnceUser”的数量,但该函数一开始只调用一次。

有什么想法吗?

我的代码:

class TestCombinationGetFiles extends Simulation {
    var counter: Int =1 

    def getNextNumber():Int = {
      counter+= 1
      return counter
    }     

  val Get20Files = scenario("get20Files")
   .feed(UuidFeeder.feeder)
   .exec(WebAuth.AuthenticateUser)
   .pause(30)
   .exec(WebCloudContent.GoToTestFolder20)

 val Get10Files = scenario("get10Files").feed(UuidFeeder.feeder)
  .exec(WebAuth.AuthenticateUser)
  .pause(15)
  .exec(WebCloudContent.GoToTestFolder10)

 val loadFolder20TestRamp =            
  scenario("loadFolder20TestRamp").exec(WebAuthSwisscom.AuthenticateUser,             
   WebCloudContentSwisscom.GoToTestFolder20)    

 setUp(Get20Files.inject(
    splitUsers(36) into( 
        atOnceUsers(getNextNumber())) 
        separatedBy(30 seconds)) 

        /* messy Code with correct functionality
        atOnceUsers(1),
        nothingFor(30 seconds),
        atOnceUsers(2),
        nothingFor(30 seconds),
        atOnceUsers(3),
        nothingFor(30 seconds),
        atOnceUsers(4),
        nothingFor(30 seconds),
        atOnceUsers(5),
        nothingFor(30 seconds),
        atOnceUsers(6),
        nothingFor(30 seconds),
        atOnceUsers(7),
        nothingFor(30 seconds),
        atOnceUsers(8),
        nothingFor(30 seconds))
        */
    ,
    Get10Files.inject(
        splitUsers(16) into( 
           atOnceUsers(1)) 
           separatedBy(15 seconds)) 
   ).protocols(WebSetUp.httpProtocol)
}

共有1个答案

史弘博
2023-03-14

我想你发现了加特林身上缺失的一个特征!我将进一步开发此功能,并向Gatling团队提交一个pull请求(希望)将其加入到项目中,但与此同时,您可以通过提供自己的自定义InjectionStep实现来获得所需的功能——只需将此粘贴到模拟文件的顶部即可:

import io.gatling.core.controller.inject._
import scala.concurrent.duration._

case class AtOnceIncrementalInjection(users: Int) extends InjectionStep {
  require(users > 0, "The number of users must be a strictly positive value")
  var count = users

  override def chain(chained: Iterator[FiniteDuration]): Iterator[FiniteDuration] = {
    val currentUsers = count
    count += 1
    Iterator.continually(0 milliseconds).take(currentUsers) ++ chained 
  }
}

def atOnceIncrementalUsers(initialUsers:Int) = AtOnceIncrementalInjection(initialUsers)

这基本上就是你试图用atoceusers做的,但关键的区别是计数在chain方法中,这将得到你想要的递增行为,因为每次Gatling决定发送一些请求时,chain都会被调用。

现在,您可以像在ceusers上使用的那样使用helper函数:

splitUsers(36) into( 
    atOnceIncrementalUsers(1)) 
    separatedBy(30 seconds)) 
 类似资料:
  • Gatling解析Strings参数值并将它们转换为函数,这些函数将根据存储在会话中的数据计算结果,然后对其进行评估。 加特林文件 有没有办法在exec中手动执行此操作? 我有多个使用EL属性的请求体模板,发送的请求将因进纸器而异 我目前拥有的代码如下: 我希望没有办法评估嵌套的EL属性,但是有没有办法使用会话变量手动评估它?类似于 我在其他一些问题中看到过ELCompiler被引用,但不确定从哪

  • 我有一个包含JSON数组的JSON文件 测验json 我想针对endpoint测试JSON数组中的每个元素,以观察系统针对唯一有效负载的性能 目前我有 测试ervice.scala 我无法从作为JSON Gatling文档称JSON Feeder将数组的每个元素加载到一个记录集合中 https://gatling.io/docs/2.3/session/feeder/ 即: 并将正文设置为 问题是

  • 我有一个加特林记录,现在我想重复这个场景10次,但我遇到了一些问题,我的重复动作只在第一步启动,不会完成场景的整个步骤。我能知道有什么问题吗?我是否需要在每一步中添加重复(10){}?下面是我的scala代码。

  • 我的加特林版本是2.2.0,例如: 只是一个接受用户名并返回凭据字符串的函数。 如您所见,用户名存储在

  • 我对加特林和scala不熟悉,所以这绝对是一个00b问题,但我正在努力解决这个问题。我发现这篇很棒的博客文章能够使用UUIDhttp://www.andrewgorton.uk/blog/gatling-uuid-feeder/ 这很好用,我的问题是,当我把它放入循环时,我不知道如何获得新的值。 我是这样用的- 如果我在后续测试中使用${uuid},它将是相同的值。如何为下一次通话获取新值?

  • 我有一个数组,我想用于2个馈线。我希望每个馈线都能够使用数组中的所有值。但似乎值用完了