首页 > 解决方案 > 使用 session.set 在 Gatling Body 中传递今天的日期但没有成功

问题描述

我正在尝试使用 session.set 在 Gatling Body 中传递今天的日期,但没有成功

我在下面的代码中设置了使用 joda-time( https://www.joda.org/joda-time/ ) timestampfeeder 变量

class gamekeeper extends BaseSimulation {
  val  timestampFeeder: String = DateTimeFormat.forPattern("yyyy-MM-dd").print(DateTime.now())

  exec { session => session.set( "TimestampFeeder", timestampFeeder )}

  val createPrivateEvent ={
    exec(
      http("Create Event As WER")
      .post("https://api.cloud/" + {Env} + "/silve-griffin-service/graphql")
      .headers(header)
      .body(ElFileBody("<filename>")) 
      .check(status.in(200,201))
      .check(bodyString.saveAs("EventAsWER_Response"))
      .check(jsonPath(path="$.data.createEvent.id")
        .saveAs(key="EventId")
      )
    )
    .exec { session => session.set("NEW_ID", session("EventId").as[String]) }
    .exec{session=>println(session);session}
     //.pause(40,50)
 }

 val scenario4 = scenario("Full GameKeeper tests“)
   .exec(createPrivateEvent)

 setUp(

    scenario4.inject(
      constantConcurrentUsers(userCount) during(testDuration))
      .protocols(httpProtocol)
    )
    .maxDuration(testDuration)

}

这里是 createeventasWERwithcurrentdatetime.txt 的内容

        {
      "query": "mutation createEvent($input: CreateEventInput!) {\n createEvent(input: $input) {\n ...EventFields\n __typename\n }\n}\n\nfragment EventFields on Event {\n id\n status\n title\n format\n limitedSet\n rulesEnforcementLevel\n pairingType\n entryFee {\n amount\n currency\n __typename\n }\n venue {\n id\n name\n latitude\n longitude\n address\n timeZone\n phoneNumber\n emailAddress\n __typename\n }\n capacity\n description\n scheduledStartTime\n estimatedEndTime\n latitude\n longitude\n address\n timeZone\n phoneNumber\n emailAddress\n shortCode\n __typename\n}",
      "variables": {
        "input": {
          "organizationId": "14540",
          "latitude": 47.66499,
          "longitude": -122.38043,
          "phoneNumber": "206-523-9605",
          "emailAddress": "test@gameot.com",
          "title": "PerfTestServicesEvent",
          "format": "DRAFT",
          "pairingType":"SWISS",
          "limitedSet": "CORE2020",
          "rulesEnforcementLevel": "CASUAL",
          "entryFeeAmount": 500,
          "entryFeeCurrency": "USD",
          "venueId": null,
          "capacity": 8,
          "description": "test",
          "timeZone": "America/Los_Angeles",
          "scheduledStartTime": ${TimestampFeeder},
          "estimatedEndTime": "2020-02-15T16:00Z"
        }
      }
    }

似乎值替换没有成功,为什么 session.set 无法替换 TimestampFeeder 的值

标签: scalagatling

解决方案


您的变量设置不起作用的原因是运行该会话函数的 exec 没有被其他任何东西链接或调用 - 它只是在 gamekeeper 类的中间定义。

您似乎也对馈线感到困惑 - 除非您使用此名称的 gatling 构造,否则最好将其称为其他名称。

您可以通过设置日期并将其包含在场景开始时的会话功能轻松完成此工作。

val scenario4 = scenario("Full GameKeeper tests“)
   .exec(session => session.set("TimestampFeeder",DateTimeFormat.forPattern("yyyy-MM-dd").print(DateTime.now()) 
   .exec(createPrivateEvent)

我认为您不能使用现有的 TimestampFeeder val,因为它只会在运行开始时设置一次 - 如果您想以这种方式构造事物,则必须使其成为一个函数。


推荐阅读