Как выполнить вызов Auth, если переменная Session не установлена - PullRequest
1 голос
/ 16 апреля 2019

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

У меня проблемы с тем, чтобы проверить, установлен ли токен, если нет, то позвоню, чтобы получить токен.В противном случае, если токен установлен, затем выполните вызовы.

Мой код, который выполняет эту проверку, выглядит следующим образом:

val scn = scenario("Get All Events")

    .doIf(session => session("bearerToken").asOption[String].isEmpty) {
      exec(getAuth.getBearerToken)
    }
    .pause(2)
    .exec (http("Get Events")
      .get("v1/events")
      .header("x-request-id", "perf-test")
      .header("HttpLogRequestId", s"${BaseHelpers.getUUID}")
      .header("x-api-key", s"${BaseHelpers.getXAPIKey}")
      .header("Authorization", "Bearer ${bearerToken}")
      .check(status.is(200))
  )

Когда он вызывает для установки токена аутентификации, он выглядит так:

val getBearerToken = exec(http("Get Authorization Token")
    .post(baseAuthURL + "v1/oauth2/token?grant_type=password&client_id=" + client_id + "&username=" + username + "&password=" + password)
    .basicAuth(client_id, client_secret)
    .header("x-request-id", "perf-test")
    .header("HttpLogRequestId", s"${BaseHelpers.getUUID}")
    .check(status.is(200))
    .check(jsonPath("$.id_token").saveAs("bearerToken"))
  )

Результат для меня, как правило, один из двух.Либо он будет делать этот вызов каждый раз, каким-то образом игнорируя проверку, либо выдает ошибку, сообщая, что ключ не найден.

Я пытался сделать это несколькими различными способами, но все еще не повезло.Надеясь, что вторая пара глаз может указать, где я иду не так.

1 Ответ

1 голос
/ 17 апреля 2019

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

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

doIf("${bearerToken.exists()}") {...}

Но главный вопрос в том, что вы хотите, чтобы ваша симуляция выполняла? Как вы уже описали, вы хотите, чтобы один пользователь вошел в систему, а затем одновременно сделал вызов «v1 / events». Как вы уже написали, вы хотите, чтобы к каждому входу в систему подключилось несколько пользователей, а затем выполните этот вызов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...