У меня следующая проблема. Когда я пытаюсь выполнить симуляцию, я получаю эту ошибку:
Generating reports...
Exception in thread "main" java.lang.UnsupportedOperationException: There were no requests sent during the simulation, reports won't be generated
at io.gatling.charts.report.ReportsGenerator.generateFor(ReportsGenerator.scala:49)
at io.gatling.app.RunResultProcessor.generateReports(RunResultProcessor.scala:62)
at io.gatling.app.RunResultProcessor.processRunResult(RunResultProcessor.scala:40)
at io.gatling.app.Gatling$.start(Gatling.scala:88)
at io.gatling.app.Gatling$.fromMap(Gatling.scala:41)
at Engine$.delayedEndpoint$Engine$1(Engine.scala:11)
at Engine$delayedInit$body.apply(Engine.scala:4)
at scala.Function0.apply$mcV$sp(Function0.scala:39)
at scala.Function0.apply$mcV$sp$(Function0.scala:39)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:17)
at scala.App.$anonfun$main$1$adapted(App.scala:80)
at scala.collection.immutable.List.foreach(List.scala:392)
at scala.App.main(App.scala:80)
at scala.App.main$(App.scala:78)
at Engine$.main(Engine.scala:4)
at Engine.main(Engine.scala)
Process finished with exit code 1
Ниже мой код:
package simulations
import io.gatling.core.Predef._
import io.gatling.core.scenario.Simulation
import io.gatling.http.Predef._
class Load extends Simulation{
val httpProtocol = http
.baseUrl("http://localhost:8080/app/")
.header("Accept", "application/json")
val scn = scenario("Scenario").exec(SimpleExample.simple)
setUp(
scn.inject(atOnceUsers(3)).protocols(httpProtocol)
)
}
package simulations
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import scala.util.Random
object SimpleExample {
var simple =
exec(session => session
.set("rndmSTR", randomString())
.set("rndmINT", randomInt())
).
exec(
session => {
exec(feed(Iterator.continually(Map(
"game_ID" -> session("rndmINT").as[String].toInt,
"game_Name" -> session("rndmSTR").as[String]
))))
.exec(
http("Post New Game")
.post("videogames/")
.body(ElFileBody("bodies/newtemplate.json")).asJson
)
session
}
)
private def randomString() = {
new Random().alphanumeric.filter(_.isLetter).take(5).mkString.toLowerCase
}
private def randomInt() = {
new Random().nextInt(100000)
}
}
Это мой. json:
{
"id": "${game_ID}",
"name": "${game_Name}",
"releaseDate": "2020-08-11",
"reviewScore": 99,
"category": "Driving",
"rating": "Mature"
}
Я знаю, что могу использовать метод feed () следующим образом:
package simulations
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import scala.util.Random
object NextSimpleExample {
var rndName: String = null
var rndID: String = null
var feeder = Iterator.continually(Map(
"game_ID" -> rndID.toInt,
"game_Name" -> rndName
))
var simple =
exec(session => session
.set("rndmSTR", randomString())
.set("rndmINT", randomInt())
).
exec(
session => {
rndID = session("rndmINT").as[String]
rndName = session("rndmSTR").as[String]
session
}
)
.exec(feed(feeder)
.exec(
http("Post New Game")
.post("videogames/")
.body(ElFileBody("bodies/newtemplate.json")).asJson)
)
private def randomString() = {
new Random().alphanumeric.filter(_.isLetter).take(5).mkString.toLowerCase
}
private def randomInt() = {
new Random().nextInt(100000)
}
}
, но в этом случае все виртуальные пользователи получат аналогичные значения ...
Кроме того, я хочу использовать сгенерированные для каждого виртуального пользователя значения в следующих шагах. Например, вставьте сгенерированный идентификатор и имя в другой файл. json для другого тела в запросе post или put. Пожалуйста, помогите решить эту проблему.