Gatling: сессия.isFailed возвращает значение true, даже если ранее выполненный запрос был выполнен успешно

#performance #gatling #scala-gatling

#Производительность #gatling #scala-gatling

Вопрос:

Мне было поручено выполнить некоторые тесты производительности, чтобы сравнить наши системы. Я разработал сценарий, как показано ниже :

 var scn: ScenarioBuilder = scenario("Sample Scenario")
    .exec(
      forever(
        exec(<first request>)
          .pause(2, 5)
          .doIf(session => !session.isFailed) {
            randomSwitch(
              70d -> exec(<second request>),
              15d -> exec(<third request),
              15d -> exec(<fourth request>)
            )
          }
      )
    )
 

Проблема, с которой я столкнулся, возникла, когда мы выполняли отказоустойчивые тесты в нашей системе. Я заметил, что во время моделирования все запросы перестали выполняться после «первого запроса», как только в системе произошел сбой.

Я проверил журналы, и «первый запрос» прошел успешно, и, согласно моему пониманию !session.isFailed , условие должно быть истинным, что позволяет продолжить выполнение сценария.

Может кто-нибудь, пожалуйста, поделиться, почему условие помечается как false вместо true ?

Ответ №1:

Согласно Gatling.команда ввода — вывода:


Сеанс сохраняет свой статус даже после нескольких запросов.

Как вы упомянули, a failure was introduced in the system

Одна из основных целей — иметь точки в вашем сценарии, в которых виртуальный пользователь может уйти (из-за сбоя) с exitHereIfFailed

Если вы хотите восстановить, вы должны пометить свой сеанс как успешный.

 var scn: ScenarioBuilder = scenario("Sample Scenario")
    .exec(
      forever(
        exec(session => session.markAsSucceeded) // <---- reset the status
          .exec(<first request>)
          .pause(2, 5)
          .doIf(session => !session.isFailed) {
            randomSwitch(
              70d -> exec(<second request>),
              15d -> exec(<third request),
              15d -> exec(<fourth request>)
            )
          }
      )
    )