Кореляція в LoadRunner з прикладом web_reg_save_param

⚡ Розумний підсумок

Кореляція в LoadRunner фіксує динамічне значення сервера, таке як ідентифікатор сеансу, і передає його в пізніші запити, щоб записаний скрипт VuGen успішно відтворювався, а не завершувався невдачею через застарілі дані.

  • 🔘 Визначення: Кореляція пов'язує відповідь сервера з кожним наступним запитом, який від неї залежить.
  • ☑️ Симптом: Повтор не вдається виконати, коли скрипт повертає записаний ідентифікатор сеансу, який сервер більше не розпізнає.
  • Автоматична: Правила VuGen та автоматичне визначення порівнюють два повтори, але охоплюють лише невелику частину випадків.
  • 🧪 Інструкція з експлуатації: web_reg_save_param зберігає значення, що знаходиться між лівою та правою межами.
  • 🛠️ Розміщення: Функції реєстрації повинні розташовуватися над кроком, відповідь якого містить значення.
  • 📊 Розплатитися: Корельовані скрипти відтворюються зі свіжими даними та залишаються помітно меншими.

Кореляція в LoadRunner з web_reg_save_param

Що таке кореляція?

Кореляція, як випливає з назви, – це механізм визначення зв'язку між двома змінними або сутностями. Словник визначає її як «статистичний зв'язок між двома або більше змінними, такий, що систематичні зміни іншої супроводжують систематичні зміни значення однієї змінної».

Примітка бренду: цей інструмент постачався як HP, а потім Micro Focus LoadRunner, і є зараз OpenText Професійна інженерія продуктивностіКожна функція кореляції нижче залишається незмінною, а постачальник вказує на генератор скриптів. ВуГен.

Навіщо нам кореляція?

Давайте розглянемо кореляцію з урахуванням наступного сценарію.

Уявіть, що ви записуєте сценарій за допомогою LoadRunner.

Зв'язок клієнт-сервер під час запису відбувається наступним чином, а діаграма підсумовує його:

  1. Під час запису клієнт надсилає запит на сервер для початку сеансу.
  2. Сервер отримує запит і призначає новий ідентифікатор сеансу ABC
  3. Клієнт зберігає ідентифікатор сеансу ABC у сценарії.
  4. Клієнт починає сеанс з ідентифікатором ABC та надсилає запит на сервер, щоб дозволити йому записувати
  5. Сервер розпізнає ID ABC і дозволяє клієнту записати сценарій

Обмін ідентифікаторами сеансу клієнт-сервер під час запису скрипта LoadRunner

Тепер давайте розглянемо зв'язок клієнт-сервер під час відтворення, показаний після цих кроків:

  1. Під час відтворення клієнт надсилає запит на сервер для початку сеансу
  2. Сервер отримує запит і призначає новий ідентифікатор сеансу XYZ
  3. Клієнт починає сеанс із попередньо записаним ідентифікатором сеансу ABC та надсилає запит на сервер, щоб дозволити йому записувати
  4. Сервер не може ідентифікувати ідентифікатор ABC, оскільки він очікував виділеного ідентифікатора XYZ, і сеанс не вдається.

Невідповідність ідентифікаторів сеансу під час відтворення, коли відсутня кореляція

Нам потрібне рішення, яке може захоплювати та аналізувати динамічне значення, що надсилається під час виконання, і повертати це значення назад на сервер. Ось як виглядатиме зв'язок клієнт-сервер з цим рішенням, як показано на діаграмі нижче:

  1. Під час відтворення клієнт надсилає запит на сервер для початку сеансу
  2. Сервер отримує запит і призначає новий ідентифікатор сеансу ZZZ
  3. Клієнт аналізує цей новий ідентифікатор сеансу ZZZ із запиту.
  4. Клієнт надсилає запит на початок сесії з id ZZZ
  5. Сервер розпізнає ідентифікатор ZZZ і дозволяє клієнту відтворити сценарій

Кореляція, що фіксує новий ідентифікатор сеансу та повертає його на сервер

Це не що інше Співвідношення.

У короткому відео нижче показано ту саму проблему запису та відтворення.

Натисніть тут якщо відео недоступне

У випадку VuGen кореляція – це зв'язуючий зв'язок між відповіддю та будь-яким попереднім запитом.

Існують різні ситуації, коли запит базується на раніше отриманій відповіді від сервера, такій як ідентифікатор сеансу або дата й час сервера, які отримуються з сервера. Ці значення відрізняються щоразу, коли ви запускаєте програму або записуєте скрипт. Очевидно, що якщо виконання скрипта залежить від значення, повернутого сервером, це означає, що вам потрібно знайти механізм, за допомогою якого ви можете «зловити» відповідь сервера та приєднати її до тих запитів, які сервер очікує. Зазвичай це називається кореляцією в LoadRunner.

Простими словами, рішення за допомогою кореляції таке:

  1. Захоплення вихідного значення кроку
  2. Використовуйте отримане вище значення як вхідні дані для всіх наступних кроків

Кореляція класифікується на 2 категорії у VuGen/LoadRunner:

  • Автоматична кореляція
  • Ручна кореляція

Автоматична кореляція

LoadRunner надає механізм для легкого виконання кореляції в автоматичному режимі.

VuGen вимагатиме від вас запуску записаного скрипта принаймні двічі, щоб він міг внутрішньо порівняти різні значення у відповіді сервера.

Автоматичну кореляцію можна розділити на 3 категорії:

  • Автоматичне визначення кореляції
  • Кореляція на основі правил
  • Співвіднесення всіх тверджень
Назва правила Коли використовувати
Автоматичне визначення кореляції Виявлення та співвіднесення динамічних даних для серверів додатків, що підтримуються LoadRunner
На основі правил Використовується під час роботи з непідтримуваним сервером програм, для якого відомий контекст.
Співвіднести все Допомагає корелювати всі динамічні дані сліпим способом.

Хоча автоматична кореляція здається простішою, вона може бути схильною до помилок і працює не більше ніж у 5% випадків. Завжди доцільно використовувати кореляцію вручну.

Щоб налаштувати автоматичну кореляцію під час запису, виконайте наведену нижче конфігурацію в налаштуваннях часу запису після запису сценарію.

Натисніть на Запис => Параметри запису (або натисніть Ctrl + F7), як показано в меню нижче,

Меню запису VuGen з вибраним пунктом «Параметри запису»

Нижче відкриється вікно:

Вікно параметрів запису VuGen зі списком вузлів конфігурації запису

Клацніть Кореляція => Конфігурація – відкриється вікно нижче.

Панель конфігурації кореляції зі списком наборів правил програм, таких як ASPNET

Тут вам потрібно позначити як перевірені всі програми (ASPNET) тощо, які використовуються у вашій предметній програмі. Праворуч ви можете побачити правила, які виявлятимуть можливих кандидатів на кореляцію, наприклад _VIEWSTATE. Ви також можете додати більше програм або спеціальних правил, натиснувши кнопку «Нове правило».

Ви також можете натиснути ПРАВИЛА, ви побачите, як показано нижче:

Панель «Правила кореляції» з доступною опцією «Сканування за правилами»

Щоб автоматична кореляція працювала, переконайтеся, що опція «Сканування правил» позначена як прапорець. Якщо ви натиснете «Автоматично співвідносити знайдені значення», VuGen не запропонує вам варіант вибору після того, як буде знайдено варіант кореляції, а просто співвіднесе їх.

Пізніше ми розберемося з API, який використовується для кореляції. Однак доцільно використовувати порівняння HTML замість порівняння тексту.

Вибравши будь-які правила, натисніть кнопку OK, щоб закрити вікна.

Натисніть кнопку на панелі інструментів, показану тут Кнопка панелі інструментів VuGen, яка використовується для повторного створення записаного сценарію з меню, і VuGen перегенерує скрипт (без необхідності запису) з новими конфігураціями. VuGen автоматично додасть необхідний фрагмент коду для обробки кореляції. Ми розглянемо приклад детальніше в розділі «Ручна кореляція».

Зауважте, якщо ви виконуєте кореляцію вручну або використовуєте автоматичну кореляцію, фрагмент коду міститиме точно такий же синтаксис і функцію.

Кроки для автоматичної кореляції сценарію:

  1. Записати сценарій
  2. Відтворення сценарію
  3. Визначте значення, які потрібно співвіднести
  4. Виберіть значення та натисніть кнопку автокореляції
  5. Перевірте сценарій, запустивши ще раз. Успішний пробіг означає успішну кореляцію.

Порада:

  • Кореляція допомагає запускати ваш сценарій з різними значеннями
  • Кореляція також зменшує розмір вашого сценарію

Ручна кореляція

Ручна кореляція — це написання коду безпосередньо у ваш сценарій, щоб задовольнити значення, що постійно змінюються. Ми можемо розділити це на наступні кроки:

  1. Визначте значення для захоплення
  2. Знайти праву та ліву межі тексту значення для захоплення (WEB)
  3. Знайдіть, які входження меж тексту слід використовувати
  4. Додайте функцію web_reg_save_param до сценарію над фрагментом коду, який запитує сторінку зі значенням для захоплення
  5. Додайте назву параметра, ліву межу, праву межу та входження до функції
  6. Параметризуйте динамічне значення в сценарії кожного разу, коли воно виникає
  7. Перевірте правильність виконання
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);

Code зазначає: Обидва фрагменти виглядають точно так, як опубліковано. Зверніть увагу на порядкові номери: Ord=l та RelFrameId=l використовуйте малу літеру L, а VuGen очікує цифру 1.

Кореляцію вручну можна виконати за допомогою VUser Comparison. Кроки в методі кореляції VUser Comparison можна розділити так:

  1. Визначте динамічні значення, які потрібно співвіднести
  2. Знайдіть відповідь сервера, що містить значення Dynamic
  3. Захоплення динамічного значення в параметрі
  4. Замініть кожне входження динамічного значення параметром
  5. Підтвердити зміни

Розуміння функції 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 пригощають web_reg_save_param_ex як наступник початкової функції, та web_reg_save_param_regexp як вибір, коли самі межі змінюються. Початковий приклад все ще працює.

Хоча тут наведено короткий вступ, для детального розуміння функцій та їх параметрів відкрийте VuGen, напишіть функцію (або скористайтеся інструментарієм Steps Toolbox), наведіть курсор на функцію та натисніть F1 – ознайомтеся з Допомога VuGen і виробіть звичку. Вам доведеться багато з цим стикатися, працюючи в цій галузі.

Ось ми з деталями функції:

web_reg_save_param(Назва параметра, Ліва межа, Права межа)

Список атрибутів

У таблиці нижче зібрано всі атрибути, які приймає функція, чи є вони обов'язковими та що вони контролюють.

атрибут Вимагається? Що вона робить
Конвертувати опціональний HTML_TO_URL перетворює дані, закодовані HTML, на URL-кодований формат даних. HTML_TO_TEXT перетворює дані, закодовані HTML, у формат звичайного тексту.
Ігнорувати переспрямування Необов’язково, за замовчуванням «Ігнорувати перенаправлення=Ні» Якщо встановлено значення «Так», а відповідь сервера містить інформацію про перенаправлення (код стану HTTP 300-303, 307), пошук у цій відповіді не виконується. Запит GET надсилається до місця перенаправлення, і пошук виконується звідти у відповіді.
LB Вимагається Ліва межа параметра або динамічних даних. Якщо не вказати значення LB, як межа використовуються всі символи з початку даних. Параметри межі чутливі до регістру. Щоб додатково налаштувати текст пошуку, використовуйте один або кілька текстових прапорців.
НЕ ЗНАЙДЕНО Необов'язково, за замовчуванням «помилка» Обробка ситуації, коли межу не знайдено та згенеровано порожній рядок. «Не знайдено=помилка» викликає помилку. «Не знайдено=попередження» («Не знайдено=порожньо» у попередніх версіях) натомість встановлює параметр count на 0 та продовжує роботу, що ідеально підходить, коли потрібно перевірити, чи було знайдено рядок, не збиваючи скрипт. Якщо ввімкнено «Продовжити при помилці», скрипт продовжує роботу навіть за умови «помилки», але розширений журнал записує це.
ORD Необов'язково, за замовчуванням 1 Вказує порядкову позицію або екземпляр збігу. Якщо вказати «Усі», значення параметрів зберігаються в масиві. Використання Instance замість ORD підтримується для зворотної сумісності, але є застарілим.
RB Вимагається Права межа параметра або динамічних даних. Якщо не вказати значення RB, як межа використовуються всі символи до кінця даних. Параметри меж чутливі до регістру. Щоб додатково налаштувати текст пошуку, використовуйте один або кілька текстових прапорців.
RelFrameID опціональний Рівень ієрархії HTML-сторінки відносно запитуваної URLМожливі значення — ALL або число. RelFrameID не підтримується у скриптах рівня графічного інтерфейсу.
SaveLen Необов'язково, за замовчуванням -1 Довжина підрядка знайденого значення, починаючи з заданого зміщення, для збереження в параметрі. За замовчуванням зберігається в кінець рядка.
SaveOffset Необов'язково, за замовчуванням 0 Зсув підрядка знайденого значення, який потрібно зберегти в параметрі. Значення зсуву має бути невід'ємним.
Пошук Необов'язково, за замовчуванням ВСІ Область пошуку — де шукати розділені дані. Можливі значення: Headers (шукати лише заголовки), Body (шукати лише дані в тілі, без заголовків), No resource (шукати лише в HTML-телі, виключаючи всі заголовки та ресурси) або ALL (шукати в тілі, заголовках та ресурсах).

Після того, як скрипт відтвориться коректно, додайте параметризація, транзакції та налаштування часу виконання, запустіть його з контролер, і прочитайте результат у Аналіз як частина ширшого Тестування продуктивності та Тестування навантаження.

Поширені запитання

Відтворіть це двічі з розширеним входом у систему та порівняйте відповіді. Будь-яке значення, яке сервер видає заново під час кожного запуску — ідентифікатори сеансів, токени, позначки часу — є кандидатом.

web_reg_save_param відповідає між фіксованими лівою та правою межами. web_reg_save_param_regexp збігається з регулярним виразом, тому він справляється, коли самі межі змінюються.

Так. Машинне навчання може розрізняти дві відповіді повторного відтворення та ранжувати поля, що змінюються, набагато швидше, ніж ручне сканування. Розглядайте ранжування як короткий список, який все одно підтверджує людина.

Копілот GitHub створює виклик функції та її аргументи з коментаря. Він не може бачити відповідь сервера, тому кожну запропоновану ним межу необхідно перевірити на наявність реального трафіку.

Це функція реєстрації: вона реєструє пошук у наступній відповіді, яку отримає VuGen. Розміщений після запиту, параметр залишається порожнім, і нічого не залишається для сканування.

Межі не збігалися. Звичайними причинами є невідповідність регістру, межа, яка відображається лише на іншій сторінці, або пошук у тексті, коли значення знаходиться в заголовках.

Ні. Параметризація передає ваші власні вхідні дані в скрипт з файлу даних. Кореляція фіксує значення, яке сервер генерує під час виконання, і передає його назад. Більшість скриптів потребують і того, і іншого.

Так, часто більше. Токени-носії, поля CSRF та ідентифікатори JSON змінюються кожного сеансу, тому REST та односторінковий трафік повний кандидатів навіть без HTML-форми.

Підсумуйте цей пост за допомогою: