Как прочитать данные из массива json и передать их Гатлингу во время выполнения в цикле - PullRequest
0 голосов
/ 28 июня 2019

Я новичок в Гатлинге и Скале. Я пытаюсь сделать следующее: -

test.json:
[
  {
    "code": "AML",
    "data": "aaasdfgghh"
  },
  {
    "code": "ABC",
    "data": "aaasdfgghh"
  },
  {
    "code": "SDF",
    "data": "aaasdfgghh"
  }
]

Теперь я хочу прочитать этот ключ / значение JSON в цикле. В настоящее время я делаю так:

Тело запроса и фидер: -

   val jsonFileFeederFundsDoc: SourceFeederBuilder[Any] = 
                  jsonFile("test.json").circular

   //Saves locally and to S3
   val upload_fund_s3: HttpRequestBuilder =
    http("upload Fund docs Locally")
   .post(onboarding_url_perf + "/document/passfort")
   .headers(basic_headers)
   .headers(auth_headers)
   .body(StringBody(
    """{
      "code":  "${code}",
      "data":  "${data}"
  }"""
  )).asJson
  .check(status.is(200))
  .check(jsonPath("$.id").saveAs("id"))

И мой сценарий: -

val newFundScenario: ScenarioBuilder = scenario("Company Fund Scenarios exists")
.exec(TokenScenario.getCompanyUsersGwtToken).exitHereIfFailed
.exec(CompanyProfileRequest.check_company_exists).exitHereIfFailed
.doIf("${COMPANY_NOT_FOUND}") {
  exec(CompanyProfileRequest.create_company_fund_profile).exitHereIfFailed
}
.feed(UploadFundDocsInPassfort.jsonFileFeederFundsDoc)
.exec(UploadFundDocsInPassfort.upload_fund_s3).exitHereIfFailed
.exec(UploadFundDocsInPassfort.upload_fund_passfort).exitHereIfFailed
.exec(OfficersRequest.create_director).exitHereIfFailed   

И моя тестовая симуляция:

  class TestCompanySimulation extends Simulation {

   private val generalCompanyTestCases = GeneralCompanyScenarios
    .newFundScenario
    .inject(rampUsers(Integer.getInteger("users", 1)) during 
    (Integer.getInteger("ramp", 1) minutes))

    setUp(
      generalCompanyTestCases.protocols(httpConf),
    )
 }

Теперь проблема в том, что для одного пользователя я хочу читать данные в цикле в моем newFundScenario, но в этом случае он просто выбирает 1-е значение из файла json.

Что-то вроде

 foreach(read data from json file){
 //Pass Data in run time and execute
 .exec(UploadFundDocsInPassfort.upload_fund_s3).exitHereIfFailed
 .exec(UploadFundDocsInPassfort.upload_fund_passfort).exitHereIfFailed
}

Любая помощь очень ценится.

С уважением, Викрам Патания

1 Ответ

1 голос
/ 28 июня 2019

Если вы хотите, чтобы каждый пользователь проходил через устройство подачи, вам необходимо иметь команду подачи внутри цикла. Например, если вы хотите сделать 5 запросов ...

val upload_fund_s3: ChainBuilder =
repeat(5) {
  feed(jsonFileFeederFundsDoc)
  .exec(
    http("upload Fund docs Locally")
    .post(onboarding_url_perf + "/document/passfort")
    .headers(basic_headers)
    .headers(auth_headers)
    .body(StringBody("""{"code":  "${code}", "data":  "${data}"}""")).asJson
    .check(status.is(200))
    .check(jsonPath("$.id").saveAs("id"))
  )
} //include all the actions you want in the loop

и удалите ленту из определения вашего сценария. Это также читается лучше, поскольку ваш фидер и действия, которые его используют, определены вместе.

Имейте в виду, что если вы запустите несколько пользователей в симуляции, они будут получать значения из одного устройства подачи. Вы указали .circular, поэтому у него не останутся значения, но каждый пользователь может делать разные запросы (что может быть хорошо, в зависимости от того, что вы моделируете)

если ваш список невелик, вы также можете рассмотреть возможность использования карты и вставки ее в сеанс для повторения с .foreach

...