2016-08-08 4 views
1

У меня есть следующие два метода:Как динамически генерировать JSon в Gatling?

def randomStartMethod() : Long = { 
    var range = 1000L 
    var r = ThreadLocalRandom.current().nextLong(10L*range) 
    var randomStart = 1396024675000L + r 
    return randomStart 
} 

def randomStopMethod() : Long = { 
    var range = 1000L 
    val r = ThreadLocalRandom.current().nextLong(10L*range) 
    val randomStop = 1396024675000L + r*2L 
    return randomStop 
} 

Затем я добавляю его в теле запроса, как это:

val activity = repeat(10, "i") { 
     exec(http("POST activity post") 
     .post("/activity/") 
     .header("Content-Type", "application/json; charset=ISO-8859-1") 
     .header("accept", "*/*") 
     .body(StringBody(
      s""" 
      |{ 
      | "id": "activityId", 
      | "type": "run", 
      | "start_epoch_ms": "${randomStartMethod()}", 
      | "end_epoch_ms": "${randomStop()}", 
      | "metrics": [ 
      |  { 
      |   "type": "distance", 
      |   "unit": "KM", 
      |   "source": "nike.running.ios", 
      |   "values": [ 
      |    { 
      |     "start_epoch_ms": "${randomStartMethod()}", 
      |     "end_epoch_ms": "${randomStopMethod()}", 
      |     "value": 2.0 
      |    } 
      | 
      |   ] 
      |  } 
      | ] 
      |} 
      """.stripMargin)). 
     asJSON 
     .check(status.is(202)) 
     .check(
      jsonPath(
      "$.activityId").saveAs("message") 
     ) 
     .check(bodyString. 
      transform(_.split("\"" 
     )(3)).saveAs(
      "changeToken")) 

    ).exec(
     session => { 
      val maybeId = 
      session.get(
       "message").asOption[String] 
      println(maybeId) 
      session 
     } 
    ) 
    } 
    } 

Но здесь значения не создаются динамически при использовании с кормом. Может ли кто-нибудь предложить, как генерировать случайные числа каждый раз на протяжении всего прогона?

ответ

3

Помните: если вы хотите, чтобы какой-либо код оценивался не только один раз при запуске, когда Gatling создает сценарий, но каждый раз, когда виртуальный пользователь выполняет какое-либо действие, вам необходимо передать динамический контент: либо String, либо Gatling EL, либо функция.

Здесь вы должны сделать последний, как:

.body(StringBody(session => //THIS IS A FUNCTION 
      s""" 
      |{ 
      | "id": "activityId", 
      | "type": "run", 
      | "start_epoch_ms": "${randomStartMethod()}", 
      | "end_epoch_ms": "${randomStop()}", 
      | "metrics": [ 
      |  { 
      |   "type": "distance", 
      |   "unit": "KM", 
      |   "source": "nike.running.ios", 
      |   "values": [ 
      |    { 
      |     "start_epoch_ms": "${randomStartMethod()}", 
      |     "end_epoch_ms": "${randomStopMethod()}", 
      |     "value": 2.0 
      |    } 
      | 
      |   ] 
      |  } 
      | ] 
      |} 
      """.stripMargin)) 
+0

Спасибо Steph. Здесь мы снова встречаемся. Так что, пожалуйста, дайте мне пример? Я не мог понять этого. Нужно ли использовать фидер? Пробовал это, но не смог заставить его работать. Я пытался сделать что-то вроде этого: http://stackoverflow.com/questions/35843371/how-to-add-random-value-in-json-body-in-gatling –

+0

Если возможно, вы можете присоединиться к этой комнате? http://chat.stackoverflow.com/rooms/120459/gatling –

Смежные вопросы