加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 加特林饲养者的用法

发布时间:2020-12-16 18:30:56 所属栏目:安全 来源:网络整理
导读:我正在尝试使用两个gatling馈线来生成http post请求数据: 第一个文件包含一些字段.其中一个是柜台.有了这个值,我想添加到我的帖子主体到第二个馈线的线. 例如 : fileA.csv---------fileAId,countervalue,3fileB.csv---------fileBIdstackoverflow 我想构造
我正在尝试使用两个gatling馈线来生成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 ;
    }
}

我有两个问题:函数调用没有编译(找不到:值$),而generateItems中不存在馈线变量.

我是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函数将数据存储到会话属性中,这些属性可以从gatling EL表达式中获取,也可以使用Session API手动处理.我必须把两者结合起来.

链接:

Session API

EL Expressions

Session manipulation with exec

解决方法

您不能将馈线用于第二个文件.充其量,您可以一次提取多个记录,但名称将被翻译(fileBId1,fileBId2 …).

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

从第一个文件中提取.

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

>从会话中获取计数器
>如果你想要随机策略之类的东西,你可以生成一个随机偏移量(ThreadLocalRandom),或者如果你想要像循环策略这样的东西你会增加一个AtomicInteger.
>从第二个文件中获取记录(使用记录向量大小上的模数来获取正确的索引)
>计算你的最终字符串

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读