Java 我的情况不对吗?
预期输出应为3次调用 像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
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条件下设置计数器的会话值。Issession.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)
看起来没问题??