0

Это сценарий рекордера Gatling.Как получить билет в Gatling с использованием корреляции

val httpProtocol = http 
    // LaunchURL 
    .baseURL("https://mywebsite/instance") 
    .acceptHeader("*/*") 
    .acceptEncodingHeader("gzip, deflate") 
    .acceptLanguageHeader("en-US,en;q=0.5") 
    .connection("keep-alive") 
    .userAgentHeader("Mozilla/5.0 (Windows NT 5.1; rv:26.0) Gecko/20100101 Firefox/26.0") 

    // Login 
    .exec(http("request_6") 
    .post("""/cas/login;jsessionid=cN7KK9FvXzsqWjmLxL2M5xjk.undefined?service=https://mywebsite/instance/index.jsp""") 
    .headers(headers_6) 
    .param("""username""", """abc""") 
    .param("""password""", """abcpwd""") 
    .param("""lt""", """LT-828-wppjtrEoGU6gj9UVFt3soVqQ3mLMwe""") 
    .param("""execution""", """e1s1""") 
    .param("""_eventId""", """submit""") 
    .param("""submit""", """LOGIN""")) 
    .pause(10) 

Если мы видим, эти три линии:

.param("""username""", """abc""") 
.param("""password""", """abcpwd""") 
.param("""lt""", """LT-828-wppjtrEoGU6gj9UVFt3soVqQ3mLMwe""") 

Мы будем использовать параметризацию для имени пользователя и пароля. это входные значения, которые мы можем получить из файла csv во время выполнения теста. Здесь «lt» - это параметр для билета. он был создан CAS при запуске URL-адреса.

Следующий код - часть ответа BaseURL.

<table width="100%"> 
    <tr> 
    <td> 
     <label for="username" class="fl-label"><span class="accesskey">U</span>sername:</label> 
     <input id="username" name="username" class="required" tabindex="1" accesskey="u" type="text" value="" size="25" autocomplete="false"/> 
    </td> 
    </tr> 
    <tr> 
    <td>       
     <label for="password" class="fl-label"><span class="accesskey">P</span>assword:</label> 
     <input id="password" name="password" class="required" tabindex="2" accesskey="p" type="password" value="" size="25" autocomplete="off"/> 
    </td> 
    </tr> 
    <tr> 
    <td> 
     <input id="warn" name="warn" value="true" tabindex="3" accesskey="w" type="checkbox" /> 
     <label for="warn"><span class="accesskey">W</span>arn me before logging me into other sites.</label> 
     <input type="hidden" name="lt" value="LT-828-wppjtrEoGU6gj9UVFt3soVqQ3mLMwe" /> 
     <input type="hidden" name="execution" value="e1s1" /> 
     <input type="hidden" name="_eventId" value="submit" /> 
    </td> 
    </tr> 
    <tr> 
    <td> 
     <input class="btn-submit" name="submit" accesskey="l" value="LOGIN" tabindex="4" type="submit" /> 
     <input class="btn-reset" name="reset" accesskey="c" value="CLEAR" tabindex="4" type="reset" />   
    </td> 
    </tr> 
</table> 

Здесь КАС генерируется билет "LT-828-wppjtrEoGU6gj9UVFt3soVqQ3mLMwe" в BaseUrl Response. Здесь мне нужно извлечь билет из ответа BaseURL и использовать этот билет в запросе Login.

Предыдущий i извлеченный билет с использованием регулярного выражения в Jmeter как name="lt" value="(.*?)" из BaseURL Response.

Пожалуйста, помогите мне, как извлечь билет в Гатлинге.

и может, пожалуйста, скажите мне, как соотнести взгляды.

Благодаря & уважением

Нарасимха

ответ

3

Прежде всего, вам нужно будет сделать первый GET запрос к вашей службе как таковой:

http("getLogin") 
    .get(casUrl) 

Учитывая casUrl вал содержит путь к ваш фактический сервис, и только тогда вы сможете получить необходимую информацию, скажем, с помощью выражения css:

http("getLogin") 
    .get(casUrl) 
    .check(css("input[name='lt']", "value").saveAs("lt")) 

Шашки используются для извлечения данных из тела запроса. Важная часть - saveAs. Это позволит вам записывать данные в сеанс gatling.

Вы можете использовать его таким образом:

http("postLogin") 
    .post(...) 
    ... 
    .param("lt", "${lt}") 

Скобки также являются обязательными: он замечает Гатлинга, чтобы попытаться найти в сессии значение, связанное с ключом lt.

Вот полный пример, основанный на вашем скрипте:

val casUrl = "/cas/login;jsessionid=cN7KK9FvXzsqWjmLxL2M5xjk.undefined?service=https://mywebsite/instance/index.jsp" 

val httpProtocol = http 
    // LaunchURL 
    .baseURL("https://mywebsite/instance") 
    .acceptHeader("*/*") 
    .acceptEncodingHeader("gzip, deflate") 
    .acceptLanguageHeader("en-US,en;q=0.5") 
    .connection("keep-alive") 
    .userAgentHeader("Mozilla/5.0 (Windows NT 5.1; rv:26.0) Gecko/20100101 Firefox/26.0") 

    // Login 
    .exec(
    http("getLogin") 
     .get(casUrl) 
     .check(css("input[name='lt']", "value").saveAs("lt"))) 
    .exec(
    http("postLogin") 
     .post(casUrl) 
     .headers(headers_6) 
     .param("username", "abc") 
     .param("password", "abcpwd") 
     .param("lt", "${lt}") 
     .param("execution", "e1s1") 
     .param("_eventId", "submit") 
     .param("submit", "LOGIN")) 

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

+0

спасибо. Я попробую и дам вам знать. – user2571340

+0

Здравствуйте, notdrft, мне также нужно скорректировать видовые окна. может у, пожалуйста, скажите мне. – user2571340

+0

Я не знаю, что это такое, вам действительно нужно потратить некоторое время и прочитать wiki: https://github.com/excilys/gatling/wiki/Checks. Я буду рад помочь вам в дальнейшем. – notdryft