我正在创建一个在StringBody中使用名称的gatling脚本。名称每次都应该是唯一的,所以我必须生成不同的随机名称。下面的脚本生成不同的名称。
对于单个用户,它可以正常工作。对于多个用户,它会生成多个随机名称,但每次请求 SAME NAME ,而不是在每个请求中使用不同的名称。
就像我使用userCount = 5一样,它会生成5个不同的字符串,但不幸的是,它每次都在stringBody中请求一个相同的字符串。我想要5个不同名字的请求。谁能帮帮我吗?谢谢。
以下是代码:
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import scala.concurrent.duration._
import scala.util.Random
class myTerm extends Simulation {
val scenarioRepeatCount = Integer.getInteger("scenarioRepeatCount", 1).toInt
val userCount = Integer.getInteger("userCount", 5).toInt
val TID = System.getProperty("TID", "13203462112")
// Methods for random char generator
def randomAlpha(length: Int): String = {
val chars = ('a' to 'z') ++ ('a' to 'z')
randomStringFromCharList(length, chars)
}
def randomStringFromCharList(length: Int, chars: Seq[Char]): String = {
val sb = new StringBuilder
for (i <- 1 to length) {
val randomNum = util.Random.nextInt(chars.length)
sb.append(chars(randomNum))
}
sb.toString
}
val httpProtocol = http
.connection("""keep-alive""")
.contentTypeHeader("""application/json""")
val scn = scenario("Create")
.repeat (scenarioRepeatCount) {
exec(http("Create with random names")
.post(s"""http://someurl/api/thri/$TID/terms""")
.body(StringBody("""{"term": """" + randomAlpha(7) + """"}""")) // Here randomAlpha(7) creates a string with 7 alphabates
)
}
setUp(scn.inject(atOnceUsers(userCount))).protocols(httpProtocol)
}
编辑2:
我遇到了抓取assetId的问题,它打印'assetId'而不是值。请看下面的代码。
.foreach("${IdList}", "assetid") {
exec(http("Load_Asset_Details")
.get(s"""$addTagsUrl/am/images/loader.svg""")
.resources(
http("Actions_request")
.post(s"""$addTagsUrl/am/actions""")
.headers(headers_52)
.body(StringBody("""{"objects":[{"id":${assetid},"resource":"asset"}]}""")),
http("variant_request")
.get(s"""$addTagsUrl/am/variants%3BresourceType=asset""")
.headers(headers_6),
http("Keyframe_request")
.get(s"""$addTagsUrl/am/$${assetid}/keyframes""")
.headers(headers_6)))
.exec(http("Add Tags")
.post(s"""$addTagsUrl/am/$${assetid}/tags""")
.headers(headers_52)
//This prints value of assetid but does not generates random numbers
//.body(StringBody(s"""{"objectId":$${assetid},"objectType":"asset","name": "$tagName$randomNumber","accountId":4,"userId":5}"""))
// This generates random numbers but Doesnt assetid it prints "assetid" text instead of value
.body(StringBody(_ => """{"objectId":"""" + assetid + """" ,"objectType":"asset","name": """ + tagName + ThreadLocalRandom.current().nextInt(10, 80) + ""","accountId":4,"userId":5}"""))
)
}
答案 0 :(得分:1)
这应该可以设置和检索用户ID(我在这里使用scenario("add userId to request")
.exec(_.set("userId", UUID.randomUUID().toString())
.exec(
http("getCredentials ${userId}")
.get("/cred")
// [...]
)
):
repeat()
当然,userId生成不应该在{{1}}或任何其他循环中。