Корреляция в LoadRunner с примером Web_Reg_Save_Param
Что такое корреляция?
Корреляция, как следует из названия, представляет собой механизм определения взаимосвязи между двумя переменными или объектами. Словарь определяет это как «статистическую связь между двумя или более переменными, при которой систематические изменения в другой сопровождаются систематическими изменениями в значении одной переменной».
Зачем нам нужна корреляция?
Давайте разберемся во взаимосвязи со следующим сценарием.
Предположим, вы записываете сценарий с помощью LoadRunner.
Связь клиент-сервер
- Во время записи клиент отправляет серверу запрос на запуск сеанса.
- Сервер получает запрос и выделяет новый идентификатор сеанса ABC.
- Клиент сохраняет идентификатор сеанса ABC в скрипте.
- Клиент запускает сеанс с идентификатором ABC и отправляет запрос на сервер, чтобы разрешить запись.
- Сервер распознает идентификатор ABC и позволяет клиенту записать сценарий.
- Теперь давайте изучим взаимодействие клиент-сервер во время воспроизведения.
- Во время воспроизведения клиент отправляет серверу запрос на запуск сеанса.
- Сервер получает запрос и выделяет новый идентификатор сеанса XYZ.
- Клиент запускает сеанс с ранее записанным идентификатором сеанса ABC и отправляет запрос на сервер, чтобы разрешить ему запись.
- Сервер не может идентифицировать идентификатор ABC, поскольку он ожидал присвоенный им идентификатор XYZ, и сеанс завершается неудачно.
Нам нужно решение, которое могло бы анализировать динамическое значение, отправленное во время выполнения, и возвращать это значение обратно на сервер. Вот как будет выглядеть связь клиент-сервер с этим решением
- Во время воспроизведения клиент отправляет серверу запрос на запуск сеанса.
- Сервер получает запрос и выделяет новый идентификатор сеанса ZZZ.
- Клиент анализирует этот новый идентификатор сеанса ZZZ из запроса.
- Клиент отправляет запрос на начало сеанса с идентификатором ZZZ.
- Сервер распознает идентификатор ZZZ и позволяет клиенту воспроизвести сценарий.
Это не что иное, как корреляция.
Нажмите здесь если видео недоступно
В случае VUGen корреляция — это связь между ответом и любым предыдущим запросом.
Существуют различные ситуации, когда запрос основан на ранее полученном ответе от сервера, например, идентификаторе сеанса, дате/времени сервера, который получен с сервера. Эти значения меняются каждый раз, когда вы запускаете приложение или записываете сценарий. Очевидно, что если выполнение скрипта зависит от значения, возвращаемого сервером, это означает, что вам нужно найти механизм, с помощью которого вы сможете «перехватывать» ответ сервера и прикреплять к тем запросам, которые сервер ожидает. Обычно это называется корреляцией в LoadRunner.
Проще говоря, решение с использованием корреляции:
- Захват выходного значения с шага
- Используйте полученное выше значение в качестве входных данных для всех последующих шагов.
В VUGen/LoadRunner корреляция подразделяется на две категории:
- Автоматическая корреляция
- Ручная корреляция
Автоматическая корреляция
LoadRunner предоставляет механизм, позволяющий легко выполнять корреляцию в автоматическом режиме.
VUGen потребует от вас запустить записанный сценарий как минимум два раза, чтобы он мог внутренне сравнить различные значения в ответе сервера.
Автоматическую корреляцию можно разделить на 3 категории:
- Автоопределение корреляции
- Корреляция на основе правил
- Сопоставление всех утверждений
Имя правила | Когда использовать |
---|---|
Автоопределение корреляции | Обнаружение и сопоставление динамических данных для серверов приложений, поддерживаемых HP LoadRunner. |
на основе правил | Используется при работе с неподдерживаемым сервером приложений, для которого известен контекст. |
Сопоставить все | Помогает сопоставить все динамические данные вслепую. |
Хотя автоматическая корреляция кажется более простой, она может быть подвержена ошибкам и работает не более чем в 5% случаев. Всегда желательно использовать ручную корреляцию.
Чтобы настроить автоматическую корреляцию во время записи, выполните приведенную ниже настройку в разделе «Настройка времени записи» после записи сценария.
Нажмите «Запись» => «Параметры записи» (или нажмите Ctrl +F7),
Ниже откроется окно:
Нажмите Корреляция => Конфигурация – откроется окно ниже.
Здесь вам необходимо отметить как проверенные все приложения (ASPNET) и т. д., которые используются в вашем рассматриваемом приложении. С правой стороны вы можете увидеть правила, которые будут определять возможных кандидатов на корреляцию, например _VIEWSTATE. Вы также можете добавить больше приложений или собственных правил, нажав кнопку «Новое правило».
Вы также можете нажать «ПРАВИЛА», и вы увидите, как показано ниже:
Чтобы автоматическая корреляция работала, вам необходимо убедиться, что сканирование правил отмечено как отмеченное. Если вы нажмете кнопку «Автоматическая корреляция найденных значений», VUGen не предложит вам сделать выбор после того, как будет найден кандидат на корреляцию, а просто сопоставит их.
Позже мы разберемся с API, используемым для корреляции. Однако вместо сравнения текста рекомендуется использовать сравнение HTML.
После того, как вы выбрали какие-либо правила, нажмите кнопку «ОК», чтобы закрыть окна.
Нажмите на из меню, и VUGen перегенерирует сценарий (без необходимости записи) с новыми конфигурациями. VUGen автоматически добавит необходимый фрагмент кода для обработки корреляции. Мы рассмотрим образец более подробно в разделе «Ручная корреляция».
Обратите внимание: если вы выполняете корреляцию вручную или используете автоматическую корреляцию, фрагмент кода будет содержать точно такой же синтаксис и функцию.
Шаги для автоматической корреляции сценария:
- Записать сценарий
- Сценарий повтора
- Определите значения, которые необходимо соотнести
- Выберите значения и нажмите кнопку автокорреляции.
- Проверьте сценарий, запустив его еще раз. Успешный запуск означает успешную корреляцию.
Наконечник:
- Корреляция помогает запускать скрипт с разными значениями.
- Корреляция также уменьшает размер вашего скрипта.
Ручная корреляция
Ручная корреляция заключается в написании кода непосредственно в скрипте для учета постоянно меняющихся значений. Мы можем разделить его на следующие шаги:
- Определите ценность для захвата
- Найдите правую и левую границы текста значения для захвата (WEB)
- Найдите, какое вхождение границ текста следует использовать
- Добавьте в скрипт функцию web_reg_save_param над фрагментом кода, который запрашивает страницу со значением для захвата.
- Добавьте имя параметра, левую границу, правую границу и вхождение в функцию.
- Параметризируйте динамическое значение в скрипте каждый раз, когда оно происходит.
- Проверьте правильность выполнения
web_reg_save_param (" OracleAppJSESSIONID3", "LB/IC=JSESSIONID=", "RB/IC=;", "Ord=l", "Search=headers", "RelFrameId=l", LAST); web_reg_save_param("Siebel_Analytic_ViewState2", "LB/IC=ViewState\" value=\"", "RB/IC=\"", "Ord=1", "Search=Body", "RelFrameId=l", LAST);
Ручная корреляция может быть выполнена с помощью VUser Comparison. Шаги метода корреляции VUser Comparison можно разделить следующим образом:
- Определить динамические значения, которые необходимо коррелировать
- Ответ «Найти серверы», содержащий динамическое значение
- Зафиксируйте динамическое значение в параметре
- Замените каждое вхождение динамического значения параметром.
- Проверьте изменения
Понимание функции Web_reg_save_param
VUGen предоставляет несколько функций или API для сопоставления кандидатов, в том числе:
- web_reg_save_param
- web_reg_save_param_ex
- web_reg_save_param_regexp
- web_reg_save_param_xpath
Хотя здесь приводится краткое введение, для детального понимания функций и их параметров откройте VUGen, напишите функцию (или используйте панель инструментов Steps), наведите курсор на функцию и нажмите F1 – ознакомьтесь со справкой VUGen и создайте привычка. Вам придется много с этим сталкиваться при работе в отрасли.
Здесь мы переходим к деталям функции:
web_reg_save_param (имя параметра, левая граница, правая граница)
Список атрибутов
Конвертировать: Возможные значения:
HTML_TO_URL: преобразовать данные в формате HTML в формат данных в формате URL.
HTML_TO_TEXT: конвертировать данные в формате HTML в обычный текстовый формат; этот атрибут является необязательным.
Игнорировать перенаправления: Если указано «Игнорировать перенаправления=Да» и ответ сервера представляет собой информацию о перенаправлении (код состояния HTTP 300–303, 307), поиск ответа не производится. Вместо этого после получения ответа на перенаправление запрос GET отправляется в перенаправленное местоположение, и поиск выполняется по ответу из этого местоположения.
Этот атрибут является необязательным. По умолчанию установлено значение «Игнорировать перенаправления=Нет».
ФУНТ: Левая граница параметра или динамических данных. Если вы не укажете значение LB, в качестве границы будут использоваться все символы из начала данных. Граничные параметры чувствительны к регистру. Для дальнейшей настройки текста поиска используйте один или несколько текстовых флагов. Этот атрибут является обязательным. См. раздел «Граничные аргументы».
НЕ НАЙДЕНО: вариант обработки, когда граница не найдена и генерируется пустая строка.
«Не найдено=ошибка», значение по умолчанию, вызывает ошибку, когда граница не найдена.
«Не найдено=предупреждение» («Не найдено=пусто» в более ранних версиях) не выдает ошибку. Если граница не найдена, он устанавливает счетчик параметров равным 0 и продолжает выполнение сценария. Опция «Предупреждение» идеальна, если вы хотите проверить, была ли найдена строка, но не хотите, чтобы сценарий завершился неудачно.
Внимание: Если для сценария включен параметр «Продолжить при ошибке», то даже если для параметра NOTFOUND установлено значение «ошибка», сценарий продолжает работу, если граница не найдена, но сообщение об ошибке записывается в расширенный файл журнала.
Этот атрибут также является необязательным.
ORD: указывает порядковый номер или экземпляр совпадения. Экземпляр по умолчанию — 1. Если вы укажете «Все», значения параметров будут сохранены в массиве. Этот атрибут является необязательным.
Примечание. Использование экземпляра вместо ORD поддерживается для обратной совместимости, но не рекомендуется.
RB: Правая граница параметра или динамических данных. Если вы не укажете значение RB, в качестве границы будут использоваться все символы до конца данных. Граничные параметры чувствительны к регистру. Для дальнейшей настройки текста поиска используйте один или несколько текстовых флагов. Этот атрибут является обязательным. См. раздел «Граничные аргументы».
Релфреймид: уровень иерархии HTML-страницы относительно запрошенного URL-адреса. Возможные значения: ВСЕ или число. Нажмите Атрибут RelFrameID для получения подробного описания. Этот атрибут является необязательным.
Примечание: RelFrameID не поддерживается в сценариях уровня графического интерфейса.
СохранитьЛен: Длина подстроки найденного значения от указанного смещения для сохранения в параметре. Этот атрибут является необязательным. По умолчанию установлено значение -1, что означает сохранение в конец строки.
СохранитьСмещение: Смещение подстроки найденного значения для сохранения в параметре. Значение смещения должно быть неотрицательным. Значение по умолчанию — 0. Этот атрибут является необязательным.
Поиск: Область поиска — где искать данные с разделителями. Возможные значения: «Заголовки» (ищите только в заголовках), «Тело» (ищите только данные тела, а не заголовки), «Нет ресурса» (ищите только тело HTML, исключая все заголовки и ресурсы) или BCE (тело поиска, заголовки и ресурсы). Значение по умолчанию — ВСЕ. Этот атрибут не является обязательным, но обычно предпочтителен.