Gatling Необходимо запустить следующий сценарий, если предыдущий сценарий был пройден с использованием doIf - PullRequest
1 голос
/ 21 июня 2019

Я новичок в Скале и Гатлинге. мне нужно запустить scenaio, если предыдущий сценарий был пройден с использованием doIf.

Мой код:

HttpRequest

object CompanyProfileRequest {

val check_company_profile: HttpRequestBuilder = http("Create Company 
 Profile")
.get(onboarding_url_perf + "/profile")
.headers(basic_headers)
.headers(auth_headers)
.check(status.is(404).saveAs("NOT_FOUND"))


val create_company_profile: HttpRequestBuilder = http("Create Company 
 Profile")
.post(onboarding_url_perf + "/profile")
.headers(basic_headers)
.headers(auth_headers)
.body(RawFileBody("data/company/company_profile_corporation.json")).asJson
.check(status.is(200))
.check(jsonPath("$.id").saveAs("id"))
 }

Сценарий класса: -

 object ProfileScenarios {

  val createProfileScenarios: ScenarioBuilder = scenario("Create profile 
  Scenario")
  .exec(TokenScenario.getCompanyUsersGwtToken)
  .exec(CompanyProfileRequest.check_company_profile)
  .doIf(session => session.attributes.contains("NOT_FOUND")) {
   exec(CompanyProfileRequest.create_company_profile).exitHereIfFailed
   }
 }

И симуляция это: -

      private val createProfile = ProfileScenarios
     .createProfileScenarios
     .inject(constantUsersPerSec(1) during (Integer.getInteger("ramp", 1) 
     second))

     setUp(createProfile.protocols(httpConf))

Всякий раз, когда я запускаю эту симуляцию, я не могу проверить это условие: -

.doIf (session => session.attributes.contains ("NOT_FOUND"))

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

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

1 Ответ

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

Я смог заставить ваш пример работать, но вот лучший способ ...

основная проблема с использованием

.check(status.is(404).saveAs("NOT_FOUND"))

и

.doIf(session => session.attributes.contains("NOT_FOUND"))

для реализации условного переключения - теперь у вас есть проверка, которая приведет к сбою check_company_profile, когда это действительно не должно (например, когда вы получаете 200).

Лучше использовать проверочное преобразование для вставки логического значения в переменную NOT_FOUND. Таким образом, ваше действие check_company_profile может все еще проходить, когда офис существует, и конструкция doIf может просто использовать синтаксис EL и быть намного более понятной относительно того, почему он выполняется.

val check_company_profile: HttpRequestBuilder = http("Create Company Profile")
  .get(onboarding_url_perf + "/profile")
  .headers(basic_headers)
  .headers(auth_headers)
  .check(
    status.in(200, 404), //both statuses are valid for this request
    status.transform( status => 404.equals(status) ).saveAs("OFFICE_NOT_FOUND") //if the office does not exist, set a boolean flag in the session
  )

теперь, когда у вас есть логическая переменная сеанса ("OFFICE_NOT_FOUND"), вы можете просто использовать ее в своем doIf ...

.doIf("${OFFICE_NOT_FOUND}") {
   exec(CompanyProfileRequest.create_company_profile).exitHereIfFailed
}
...