我正在尝试使用两个gatling馈线来生成http post请求数据:
第一个文件包含一些字段。其中一个是柜台。有了这个值,我想添加到我的帖子主体到第二个馈线的行。
例如:
fileA.csv
---------
fileAId,counter
value,3
fileB.csv
---------
fileBId
stack
overflow
我想构造这个字符串:“value stack overflow stack”。
我创建了一个场景:
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&amp;的新手。 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手动复制。我必须将两者结合起来。
链接:
答案 0 :(得分:1)
您不能将馈线用于第二个文件。充其量,您可以一次提取多个记录,但名称将被翻译(fileBId1,fileBId2 ...)。
使用Gatling csv解析器加载第二个文件内容,这样您就可以访问记录(记录字段)并将其存储到全局值中。
从第一个文件中提取。
然后写下exec(function):
请勿尝试在自定义代码中使用Gatling EL。请参阅doc。