Запись Gatling JSessionID из URL

Я системный администратор небольшой компании, и я пытаюсь настроить первый тест с гатлингом для одного из наших веб-приложений. Я немного знаю синтаксис C и Java, а также регулярные выражения, но совсем не знаю Scala.

Приложение, которое я пытаюсь протестировать, имеет jsessionid (включая jvmRoute) в URL-адресе, а не в файле cookie. Согласно тому, что Стефан Ландель написал здесь, Гатлинг должен автоматически запишите jsessionid для каждого сеанса пользователя и воспроизведите его, но, похоже, это работает только тогда, когда jsessionid установлен как файл cookie.

Я удалил фактически записанный jsessionid из URL-адресов в тестовом случае, рассудив, что он не будет действителен при любых будущих попытках. Когда я запускаю тест, сервер приложений генерирует новый jsessionid, который затем не включается ни в какие будущие вызовы.

Из-за этого я пытаюсь очистить jsessionid от первоначального перенаправления и включить его в любой будущий URL-адрес. В первом ответе есть заголовок местоположения, который выглядит так:

Location    https://URL/welcome.do;jsessionid=F97250BDC1576B5766CEFA56645EA3F4.node1

В настоящее время код выглядит так:

    .exec(http("Open Page")
      .get("""/?code=abcdef""")
      .headers(headers_0)
 // Test extract jsessionid from URL
       .check(headerRegex("Location", "jsessionid=(.*)")).saveAs("jsess")

    .exec(http("welcome.do")
      .post("""/welcome.do;jsessionid=${jsess}""")

...и не компилируется.

12:15:14.198 [ERROR] i.g.a.ZincCompiler$ - FirstTest.scala:53: value saveAs is not a member of io.gatling.http.request.builder.HttpRequestBuilder
12:15:14.199 [ERROR] i.g.a.ZincCompiler$ -          .check(headerRegex("Location", "jsessionid=(.*)")).saveAs("jsess")
12:15:14.200 [ERROR] i.g.a.ZincCompiler$ -                                                             ^
12:15:14.261 [ERROR] i.g.a.ZincCompiler$ - one error found

Если я передвину одну закрывающую скобку в конец:

  .check(headerRegex("Location", "jsessionid=(.*)").saveAs("jsess"))

он компилируется, но не делает то, что нужно:

---- Errors --------------------------------------------------------------------
> No attribute named 'jsess' is defined                              11 (78.57%)
> status.in(200,304,201,202,203,204,205,206,207,208,209), but ac      2 (14.29%)
tually found 404
> headerRegex((Location,jsessionid=(.*))).exists, found nothing       1 ( 7.14%)
================================================================================

Итак, как мне записать jsessionid, чтобы использовать его повторно? Или я делаю совершенно неправильно здесь? Любая помощь приветствуется.


person Christoph Gösgens    schedule 17.09.2014    source источник


Ответы (1)


Что происходит, так это то, что если Gatling следует за перенаправлением (по умолчанию), проверки будут применяться к запросу на посадку. Чтобы получить параметр пути jsessionid, вы можете либо отключить перенаправление в HttpProtocol, либо использовать currentLocationRegex.

Тогда этот параметр пути jsessionid существует только для первой страницы или для всех? Обычно это только на первой странице, пока контейнер сервлетов не поймет, что ваш браузер поддерживает файлы cookie, и вместо этого может использовать их для отслеживания сеанса.

Вы действительно уверены, что хотите, чтобы ваше приложение поддерживало отключенные файлы cookie (я имею в виду, что мы в 2014 году, почему бы не отключить и javascript...). Если нет, вы, вероятно, можете отключить отслеживание сеанса параметров пути. Проверьте эту тему, чтобы узнать, как это можно сделать на Кот.

Если да, вам придется добавить этот параметр пути к каждому URL-адресу. Вы, вероятно, захотите определить метод для этого, например:

def appendJSessionId(pathWithoutQuery: String) =
  pathWithoutQuery + ";jsessionid=${jsessionid}"
person Stephane Landelle    schedule 17.09.2014
comment
Вы дважды включили один и тот же URL в свое сообщение. Кроме того, я не могу контролировать поведение приложения — я не могу переключить его на файлы cookie, хотя я бы предпочел и это. Наконец, да, jsessionid находится в URL-адресе каждого последующего запроса. - person Christoph Gösgens; 17.09.2014
comment
Мне пришлось перейти с 2.0.0-RC2 на 2.0.0-RC5, чтобы получить эту функциональность (currentLocationRegex), но теперь она работает. Спасибо, Стефан! - person Christoph Gösgens; 18.09.2014
comment
Извините, я забыл упомянуть, что это было добавлено в RC4: github.com /gatling/gatling/issues?q=milestone%3A2.0.0-RC4. Рад, что это помогло. - person Stephane Landelle; 18.09.2014