Gatling: получить ресурс отдыха, изменить лист JSON, пост обратно

StackOverflow https://stackoverflow.com//questions/25011052

Вопрос

Я работаю над тестовым скриптом, тестируя интерфейс отдыха в Gatling, используя Scala.

Для конкретного ресурса отдыха это то, что я хотел бы достичь:

  1. получить ресурс (который даст мне данные JSON в организме).
  2. Используйте jsonpath, чтобы изменить значение в организме.
  3. Опубликовать модифицированное тело обратно к одному и тому же URL
  4. Мне удалось успешно с 1 и 3. Единственная проблема проблема - это изменить данные JSON, которые, кажется, в формате String.

    Тестовые шаги

    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}")
    
    }
    
    .

    Часть сценария

    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
    
    .

    Я получаю следующие ошибки

    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
    
    .

Это было полезно?

Решение

Только текущий снимки 2 снимка, давайте Сохранить результат jsonpathво что-то еще, чем строка :

jsonPath(expression).ofType[T]
. У нас в настоящее время у нас нет возможности для редактирования, а затем повторно сериализация JSON AST. Мы отправляем шарверов JSON (BOON и JACKSON), чтобы вы могли достичь этого самостоятельно.Вы также можете открыть запрос на функцию.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top