Я пытаюсь использовать два фидера Gatling для создания данных HTTP-запроса:
Первый файл содержит несколько полей. Один из них - фишка. Этим значением я хотел бы добавить в тело моего сообщения до строк от второго фидера.
Например :
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 ;
}
}
У меня две проблемы: вызов функции не компилируется (not found: value $) и переменные фидера не существуют в 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. Пришлось совместить и то, и другое.
Ссылки: