Доступ к состоянию сеанса гатлинга в функции карате

Я хотел бы получить доступ к сеансу гатлинга из функции карате. Это возможно?

Например, в сеансе gatling присутствует поле userId, которое я хочу использовать.

Мой вариант использования: у меня есть функция, в которой я создаю так называемое приложение, и каждому приложению нужен уникальный appId, поэтому я хочу использовать добавление переменной userId к имени приложения, фактически давая каждому виртуальному пользователю свой собственный appId.

Feature: Run an app

  Background:
    # userId is taken from gatling session
    * def appId = 'run_perf' + userId

Было бы здорово, если бы карате позволяло использовать переменные сеанса гатлинга, как любые другие переменные. Поэтому, если я обращаюсь к переменной foo, карате сначала проверяет, определена ли эта переменная как «нормальная» переменная карате, а если не находит ее, то может проверять, определена ли такая переменная в сеансе гатлинга.

редактировать:

val runApp = scenario("runApp").exec(karateFeature("classpath:performance/createAndRunApp.feature"))

  setUp(
    runApp.inject(atOnceUsers(50)).protocols(protocol)
  )

Если createAndRunApp.feature использует константу appId (например: myId) и я запускаю эту функцию с 50 виртуальными пользователями, все они, возможно, попытаются создать приложение с идентификатором myId, и 49 потерпят неудачу, потому что приложение с этим идентификатором уже существует. Я хочу, чтобы пользователь 1 использовал appId myId1, пользователь 2 использовал myId2 и так далее. Этого можно достичь, добавив значение поля userId из gatling Session к константе appId, или этого также можно добиться, добавив некоторый случайный идентификатор, например UUID, но в отчетах труднее увидеть, какой пользователь сделал запрос, потому что Я не могу узнать из appId{Some-UUID}, какой это был пользователь.


person leozilla    schedule 17.10.2018    source источник


Ответы (1)


У меня небольшие проблемы с пониманием этого примера.

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

Я ожидал, что вы скажете user-flow.feature верхнего уровня, который вызывает create-app.feature, который возвращает созданный идентификатор приложения вызывающей стороне - и все просто работает.

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

РЕДАКТИРОВАТЬ - будет доступно в версии 1.0: https://github.com/intuit/karate/issues/1382

person Peter Thomas    schedule 17.10.2018
comment
В gatling у каждого виртуального пользователя есть _1 _ (github.com/gatling/gatling/blob/master/gatling-core/src/main/), для которого вы можете получать и устанавливать переменные. Одним из фиксированных полей сеанса является userId, поэтому каждый виртуальный пользователь имеет уникальный идентификатор. Когда 10 пользователей теперь запускают мой create-app.feature, каждый из них должен выбрать уникальный appId, и простой способ сделать это - добавить userId к appId. Другой способ, который также будет работать, - это добавить UUID - это что-то, но чем сложнее отслеживать отношения между пользователем и приложением. - person leozilla; 17.10.2018
comment
@leozilla - это интересно. Я определенно могу подвергнуть сеанс Гатлинга тесту по карате. но это ломает представление о возможности использовать карате без гатлинга. Предложение: создайте синглтон Java / Scala, который вы создаете в начале теста Гатлинга. доступ к этому из ваших функций карате. если вам нужны настройки - я настаиваю на рабочем примере, чтобы я мог отлаживать / тестировать. надеюсь, что это честно. - person Peter Thomas; 17.10.2018
comment
я обновил исходный вопрос. Попробую с синглтоном или еще как-нибудь. Дам вам знать, как это сработало. - person leozilla; 17.10.2018