为请求制作正文不能同时工作

crafting the body for request does not work concurrently

我想在一段时间内通过加特林同时发送请求 下面是我编写请求的代码片段。 JSON 用于制作 json 的文件内容函数。它已在主要请求中使用 TestDevice_dev.csv 有直到 30 的设备列表,30 之后我会重复使用它。 测试设备1 测试设备2 测试设备3 . . . val dFeeder = csv("TestDevice_dev.csv").circular

val trip_dte_tunnel_1 = scenario("TripSimulation")
        .feed(dFeeder)
        .exec(session => {
         val key = conf.getString("config.env.sign_key")
         var bodyTrip = CannedRequests.jsonFileContents("${deviceID}")
         //deviceId comes from the feeder
         session.set("trip_sign", SignatureGeneration.getSignature(key, bodyTrip))
         session.set("tripBody",bodyTrip)
         })
        .exec(http("trip")
           .post(trip_url)
           .headers(trip_Headers_withsign)
           .body(StringBody("${tripBody}")).asJSON.check(status.is(201)))    
        .exec(flushSessionCookies)
the scenario is started as below 
val scn_trip = scenario("trip simulation")
    .repeat{1} {
      
      exec(DataExchange.trip_dte_tunnel_1)
   
    }
  setUp(scn_trip.inject(constantUsersPerSec(5)  during (5 seconds))) ```

如果有 1 个用户 5 秒但没有模拟用户,它运行正常。

制作的 json 请求如下所示

   "events":[
      {
         "deviceDetailsDataModel":{
            "deviceId":"<deviceID>"
         },
         "eventDateTime":"<timeStamp>",
         "tripInfoDataModel":{
            "ignitionStatus":"ON",
            "ignitionONTime":"<onTimeStamp>"
         }
      },
      {
         "deviceDetailsDataModel":{
            "deviceId":"<deviceID>"
         },
         "eventDateTime":"<timeStamp>",
         "tripInfoDataModel":{
            "ignitionStatus":"ON",
            "ignitionONTime":"<onTimeStamp>"
         }
      },
      {
         "deviceDetailsDataModel":{
            "deviceId":"<deviceID>"
         },
         "eventDateTime":"<timeStamp>",
         "tripInfoDataModel":{
            "ignitionOFFTime":"<onTimeStamp>",
            "ignitionStatus":"OFF"
         }
      }
   ]
}`


    `def jsonFileContents(deviceId: String): String= {
    val fileName = "trip-data.json"
    var stringBuilder=""
    var timeStamp1:Long = ZonedDateTime.now(ZoneId.of("America/Chicago")).toInstant().toEpochMilli().toLong - 10000.toLong
    for (line <- (Source fromFile fileName).getLines) {
      if (line.contains("eventDateTime")) {
        var lineReplace=line.replaceAll("<timeStamp>", timeStamp1.toString())
        stringBuilder=stringBuilder+lineReplace
        timeStamp1 = timeStamp1+1000.toLong
      }
      else if (line.contains("onTimeStamp")) {
        var lineReplace1=line.replaceAll("<onTimeStamp>", timeStamp1.toString)
        stringBuilder=stringBuilder+lineReplace1
      }
      else if (line.contains("deviceID")){
        var lineReplace2=line.replace("<deviceID>", deviceId)
        stringBuilder=stringBuilder+lineReplace2
      }
      else {
        stringBuilder =stringBuilder+line
      }
    }
    stringBuilder
  }
`

最佳猜测:您的供稿器包含一个条目,而您使用的是 default queue strategy。在供给文件中添加更多条目以匹配用户数量,或者使用不同的策略。

这在文档中有解释,包括 tutorials。我建议您在着手编写代码之前花一些时间阅读文档,最后您将节省很多时间。

您不需要自己对 json 文件中的值进行参数替换 - Gatling 支持传递 en ELFileBody 作为主体,您可以在其中拥有 json 文件使用加特林 EL 表达式,如 ${deviceId}.