Gatling: Obtenga recursos de descanso, cambie JSON Leaf, Publique la espalda
Pregunta
Estoy trabajando en un script de prueba, probando una interfaz de descanso en Gatling usando Scala.
Para un recurso de descanso específico, esto es lo que me gustaría lograr:
- Obtenga el recurso (que me dará datos JSON en el cuerpo).
- Usa JSONPATH para cambiar un valor en el cuerpo.
- Publique el cuerpo modificado de nuevo a la misma URL
He logrado el éxito con 1 y 3. El único problema que queda es cambiar los datos JSON que parecen estar en formato de cadena.
pasos de prueba
object WebTestCollection {
def getAccountDetails() = http("Get account")
.get("/account")
.check(jsonPath("$.billingAccount").saveAs("accountjson"))
def postNewAccountDetails() = http("Post modified account")
.post("/account").asJSON
.body("${accountjson}")
}
parte del escenario
val scn = scenario("Web Usage")
.feed(testRuns)
.exec(WebTestCollection.getAccountDetails())
.exitHereIfFailed
.exec(session => {
var account = session.getAttribute("accountjson")
account.notes = "Performance Test Comment"
println(account)
session.setAttribute("accountjson", account)
}
)
.exec(WebTestCollection.postNewAccountDetails())
.exitHereIfFailed
Obtengo los siguientes errores
09:59:30.267 [ERROR] c.e.e.g.a.ZincCompiler$ - <snip>/WebScenario.scala:172: value notes is not a member of Any
09:59:30.268 [ERROR] c.e.e.g.a.ZincCompiler$ - account.notes = "Performance Test Comment"
09:59:30.269 [ERROR] c.e.e.g.a.ZincCompiler$ - ^
09:59:30.664 [ERROR] c.e.e.g.a.ZincCompiler$ - one error found
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at scala_maven_executions.MainHelper.runMain(MainHelper.java:164)
at scala_maven_executions.MainWithArgsInFile.main(MainWithArgsInFile.java:26)
Caused by: Compilation failed
at sbt.compiler.AnalyzingCompiler.call(AnalyzingCompiler.scala:76)
at sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:35)
at sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:29)
at sbt.compiler.AggressiveCompile$$anonfun$4$$anonfun$compileScala$1$1.apply$mcV$sp(AggressiveCompile.scala:71)
at sbt.compiler.AggressiveCompile$$anonfun$4$$anonfun$compileScala$1$1.apply(AggressiveCompile.scala:71)
at sbt.compiler.AggressiveCompile$$anonfun$4$$anonfun$compileScala$1$1.apply(AggressiveCompile.scala:71)
at sbt.compiler.AggressiveCompile.sbt$compiler$AggressiveCompile$$timed(AggressiveCompile.scala:101)
at sbt.compiler.AggressiveCompile$$anonfun$4.compileScala$1(AggressiveCompile.scala:70)
at sbt.compiler.AggressiveCompile$$anonfun$4.apply(AggressiveCompile.scala:88)
at sbt.compiler.AggressiveCompile$$anonfun$4.apply(AggressiveCompile.scala:60)
at sbt.inc.IncrementalCompile$$anonfun$doCompile$1.apply(Compile.scala:24)
at sbt.inc.IncrementalCompile$$anonfun$doCompile$1.apply(Compile.scala:22)
at sbt.inc.Incremental$.cycle(Incremental.scala:52)
at sbt.inc.Incremental$.compile(Incremental.scala:29)
at sbt.inc.IncrementalCompile$.apply(Compile.scala:20)
at sbt.compiler.AggressiveCompile.compile2(AggressiveCompile.scala:96)
at sbt.compiler.AggressiveCompile.compile1(AggressiveCompile.scala:44)
at com.typesafe.zinc.Compiler.compile(Compiler.scala:158)
at com.typesafe.zinc.Compiler.compile(Compiler.scala:142)
at com.excilys.ebi.gatling.app.ZincCompiler$.apply(ZincCompiler.scala:104)
at com.excilys.ebi.gatling.app.SimulationClassLoader$.fromSourcesDirectory(SimulationClassLoader.scala:34)
at com.excilys.ebi.gatling.app.Gatling$$anonfun$12.apply(Gatling.scala:89)
at com.excilys.ebi.gatling.app.Gatling$$anonfun$12.apply(Gatling.scala:89)
at scala.Option.getOrElse(Option.scala:108)
at com.excilys.ebi.gatling.app.Gatling.start(Gatling.scala:89)
at com.excilys.ebi.gatling.app.Gatling$.fromMap(Gatling.scala:54)
at com.excilys.ebi.gatling.app.Gatling$.runGatling(Gatling.scala:74)
at com.excilys.ebi.gatling.app.Gatling$.main(Gatling.scala:49)
at com.excilys.ebi.gatling.app.Gatling.main(Gatling.scala)
... 6 more
Solución
Sólo la instantánea de Gatling 2 actual le permite Guardar resultado jsonpathen otra cosa que cadena :
jsonPath(expression).ofType[T]
Pero, entonces, actualmente no tenemos una instalación para editar y luego volver a serializar un AST de JSON. Enviamos a los analizadores JSON (Boon y Jackson) para que pueda lograr esto usted mismo.También puede abrir una solicitud de función.