Java 我的情况不对吗?

Java 我的情况不对吗?,java,scala,gatling,scala-gatling,Java,Scala,Gatling,Scala Gatling,预期输出应为3次调用 像 (第一次呼叫将从每次0偏移开始-必须) (第二次呼叫,限制+偏移值0+5=5) (第三次呼叫,限制+偏移值5+5=10) 这是密码 import java.util.concurrent.ThreadLocalRandom import scala.concurrent.duration._ import io.gatling.core.Predef._ import io.gatling.http.Predef._ class metadataAn extends

预期输出应为3次调用 像

  • (第一次呼叫将从每次0偏移开始-必须)
  • (第二次呼叫,限制+偏移值0+5=5)
  • (第三次呼叫,限制+偏移值5+5=10)
  • 这是密码

    import java.util.concurrent.ThreadLocalRandom
    import scala.concurrent.duration._
    import io.gatling.core.Predef._
    import io.gatling.http.Predef._
    
    class metadataAn extends Simulation {
        val getAssetURL = System.getProperty("getAssetURL", "https://someurl")
        val username = System.getProperty("username", "user")
        val password = System.getProperty("password", "user")
    
        val limit = Integer.getInteger("limit", 5).toInt
        val counter = 0
    
        val httpProtocol = http
            .basicAuth(username, password)
            .baseURL(getAssetURL)
    
        // Step-1 get total count
        val scn = scenario("Get Total assets")
                .exec(http("Number of Assets")
                .get(s"""/api/xyz;limit=1;offset=0""")
                .check(jsonPath("$.totalCount").findAll.saveAs("total"))
                )
    
        //.asLongAs(session => counter.getAndIncrement().equals("${total}/$limit")) // Throws error mentioned below
        .asLongAs(session => session.get("${counter}").equals("10"))
        {
            exec(http("List of Assets")
                .get(session =>s"""/api/xyz;limit=$limit;offset=${counter}""")
                .check(jsonPath("$.assets[*].id").findAll.saveAs("IdList"))
                )
    
            .foreach("${IdList}", "idlist") {
                exec(http("Add data")
                    .post("""/api/xyz/${idlist}/data""")
                    .body(StringBody(session =>s"""{some data....}"""))
                    )
                }
            .exec(session => {
                    val cnt = session("counter").as[String].toInt
                    val increaseCounter = cnt + limit
                    session.set("counter", increaseCounter)
                    println("********COUNTER************: ====>>> " + increaseCounter)
                    session})
    
        }
        setUp(scn.inject(atOnceUsers(1))).protocols(httpProtocol)
    }       
    
    输出:

    它可以编译,但不能进入循环

    ---- Get Total assets ----------------------------------------------------------
    [##########################################################################]100%
              waiting: 0      / active: 0      / done:1
    ---- Requests ------------------------------------------------------------------
    > Global                                                   (OK=1      KO=0     )
    > Number of Assets                                         (OK=1      KO=0     )
    ================================================================================
    
    ==============================

    如果我使用以下条件编译此文件

    .asLongAs(session => counter.getAndIncrement().equals("${total}/$limit"))
    
    抛出错误:

    17:34:10.300 [ERROR] i.g.c.ZincCompiler$ - scala:34: value getAndIncrement is not a member of Int
    17:34:10.301 [ERROR] i.g.c.ZincCompiler$ -      .asLongAs(session => counter.getAndIncrement().equals("${total}/$limit"))
    17:34:10.486 [ERROR] i.g.c.ZincCompiler$ - one error found
    17:34:10.487 [DEBUG] i.g.c.ZincCompiler$ - Compilation failed (CompilerInterface)
    

    谢谢。

    问题在顶部,您定义了一个变量“counter”,然后在这里

    您可以使用会话中的变量。 我看不到您以前在何处将变量添加到会话中。这意味着在访问或为null时会出现异常。 一个解决办法是

    .asLongAs(session => session.("$counter").asOption[String].equals("10"))
    
    您可以添加一个!在反转结果之前,执行循环,直到计数器为10


    注:我确信这与你无关,但这个问题仍然出现在谷歌上,因此它可能会帮助别人。

    问题在顶部,你定义了一个变量“counter”,然后在这里

    您可以使用会话中的变量。 我看不到您以前在何处将变量添加到会话中。这意味着在访问或为null时会出现异常。 一个解决办法是

    .asLongAs(session => session.("$counter").asOption[String].equals("10"))
    
    您可以添加一个!在反转结果之前,执行循环,直到计数器为10


    注:我确信这与你无关,但这个问题仍然出现在谷歌上,因此它可能会帮助别人。

    .asLongAs(session=>session.get(${counter}”).equals(“10”)
    看起来像
    ,而(counter==10)
    。当计数器不等于10?而循环不工作时,可能会循环。抛出相同的错误。还尝试了.doIf(session=>session(“counter”)!=10)计数器的相同错误。我不知道API,但您可以尝试
    。只要(session=>session.get(${counter}”).notEquals(“10”)
    。此外,尝试使用Eclipse或IntelliJ IDEA之类的IDE来编写代码,这会容易得多,因为在编写代码时会建议可能的代码,并且可以看到错误。不,这也不起作用。我尝试了
    .asLongAs(session=>session(“计数器”).as[Int]<10)
    但无法在asLongAs条件下设置计数器的会话值。Is
    session.set(“counter”,increaseCounter)
    看起来没问题???
    .asLongAs(session=>session.get(${counter}”).get(${counter}”).equals(“10”)
    看起来像
    ,而(counter==10)
    。当计数器不等于10?而循环不工作时,可能会循环。抛出相同的错误。还尝试了.doIf(session=>session(“counter”)!=10)计数器的相同错误。我不知道API,但您可以尝试
    。只要(session=>session.get(${counter}”).notEquals(“10”)
    。此外,尝试使用Eclipse或IntelliJ IDEA之类的IDE来编写代码,这会容易得多,因为在编写代码时会建议可能的代码,并且可以看到错误。不,这也不起作用。我尝试了
    .asLongAs(session=>session(“计数器”).as[Int]<10)
    但无法在asLongAs条件下设置计数器的会话值。是
    session.set(“计数器”,increaseCounter)
    看起来没问题??