scala - 加特林喂食器的使用

标签 scala gatling

我正在尝试使用两个 gatling feeder 来生成 http post 请求数据:

第一个文件包含一些字段。其中之一是柜台。有了这个值,我想添加到我的帖子正文中,直到第二个馈线的行。

例如 :

fileA.csv
---------
fileAId,counter
value,3

fileB.csv
---------
fileBId
stack
overflow

我想构造这个字符串:“值堆栈溢出堆栈”。

我创建了一个场景:
object Actions {
    val search = forever() {
        group("Test") {
            exec(feed(FeederUtils.fileAFeeder))
            .exec(  
                http("Test")                                            
                    .post(uri)                          
                    .body(StringBody("""${fileAId} """ +     FeederUtils.generateItems(${counter}.toInt)))
                )
                .pause(20 seconds)
            }
        }
}   

和一个对象 FeederUtils :
object FeederUtils {
    val fileAFeeder= csv("fileA.csv").circular

    var fileBFeeder = csv("fileB.csv").circular

    def generateItems(itemsNumber: Int) : String = {
        var i = 0;
        var returnedString = "";
        for(i <- 0 to itemsNumber) {
            exec(feed(fileBFeeder))
            returnedString = returnedString + """${fileBId} """
        }

        return returnedString ;
    }
}

我有两个问题:函数调用无法编译(未找到:value $)并且 generateItems 中不存在 feeder 变量。

我是 Gatling 和 Scala 的新手,所以我认为这很明显,但我不明白 exec 和 feed 函数是如何工作的。

谢谢 !

编辑:功能代码如下:
object FeederUtils {
    val fileAFeeder= csv("fileA.csv").circular

    var fileBVector = csv("fileB.csv").records

    var fileBIterator = 0;

    def generateItems(itemsNumber: Int) : String = {
        var i = 0;
        var returnedString = "";
        for(i <- 0 to itemsNumber) {
            var currentItem = fileBVector(fileBIterator)

            //Circular read
            if (fileBIterator < fileBVector.size) { 
              fileBIterator+=1
            } else {
              fileBIterator=0
            }

            returnedString = returnedString + currentItem("fileBId")
        }

        return returnedString ;
   }
}

object Actions {
    val search = forever() {
        group("Test") {
            exec(feed(FeederUtils.fileAFeeder))
            .exec({session => session.set("generatedString",feederUtils.generateItems(session("counter").as[String].toInt))})
            .exec(  
                http("Test")                                            
                    .post(uri)                          
                    .body(StringBody("""${fileAId} ${generatedString}"""))
                )
                .pause(20 seconds)
            }
        }
} 

下面的概念是:feed 函数将数据存储到 session 属性中,可以从 gatling EL 表达式或使用 Session API 手动读取。我不得不将两者结合起来。

链接:

Session API

EL Expressions

Session manipulation with exec

最佳答案

您不能为第二个文件使用进纸器。充其量,您可以一次提取多条记录,但名称将被翻译(fileBId1、fileBId2...)。

使用 Gatling csv 解析器加载第二个文件内容,这样您就可以访问记录(记录字段)并将其存储到全局 val 中。

从第一个文件馈送。

然后写个 exec(function)你在哪里:

  • 从 session 中获取计数器
  • 如果您想要类似随机策略的东西,则生成一个随机偏移量 (ThreadLocalRandom),或者如果您想要类似循环策略的东西,您将增加一个 AtomicInteger。
  • 从第二个文件中获取记录(对记录向量大小使用模数以获得正确的索引)
  • 计算你的最终字符串

  • 不要尝试在自定义代码中使用 Gatling EL。见 doc .

    关于scala - 加特林喂食器的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27381850/

    相关文章:

    scala - 向 session 添加属性

    scala - 使用 Gatling 将场景模块化以按顺序运行

    scala - 返回准确的响应/ header ?

    scala - 带有只读基目录的 SBT

    java - Class#getInterfaces() 和 Class#getGenericInterfaces() 返回不同长度的数组

    performance - Apache Spark 连接操作的弱扩展性差

    scala - Gatling报告生成名称自定义

    java - SWT Composite 构造函数在非空参数上抛出 IllegalArgumentException

    gatling - 你如何使用 Gatling 检查 If 方法?

    scala - 如何在 Gatling 的 http 请求中获取随机 URL?