脚本每次为多个请求使用相同的名称,而不是每个请求使用不同的名称

时间:2017-03-16 13:35:51

标签: java scala gatling

我正在创建一个在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}"""))
        )   
    }

1 个答案:

答案 0 :(得分:1)

这应该可以设置和检索用户ID(我在这里使用scenario("add userId to request") .exec(_.set("userId", UUID.randomUUID().toString()) .exec( http("getCredentials ${userId}") .get("/cred") // [...] ) ):

repeat()

当然,userId生成不应该在{{1}}或任何其他循环中。