Przykład korelacji w LoadRunner z web_reg_save_param
⚡ Inteligentne podsumowanie
Korelacja w LoadRunner przechwytuje dynamiczną wartość serwera, np. identyfikator sesji, i uwzględnia ją w późniejszych żądaniach, dzięki czemu zarejestrowany skrypt VuGen odtwarza się poprawnie, zamiast kończyć się niepowodzeniem z powodu nieaktualnych danych.
Co to jest korelacja?
Korelacja, jak sama nazwa wskazuje, to mechanizm definiowania relacji między dwiema zmiennymi lub bytami. Słownik definiuje ją jako „statystyczną relację między dwiema lub więcej zmiennymi, taką, że systematycznym zmianom wartości drugiej zmiennej towarzyszą systematyczne zmiany wartości jednej zmiennej”.
Uwaga dotycząca marki: to narzędzie zostało dostarczone jako HP, a następnie Micro Focus LoadRunneri jest teraz OpenText Inżynieria wydajności profesjonalnejKażda funkcja korelacji poniżej pozostaje niezmieniona, a dostawca podaje kod generatora skryptów VuGen.
Dlaczego potrzebujemy korelacji?
Zrozumiemy korelację w następującym scenariuszu.
Wyobraź sobie, że nagrywasz skrypt za pomocą LoadRunner.
Komunikacja klient-serwer podczas nagrywania przebiega następująco, a diagram ją podsumowuje:
- Podczas nagrywania klient wysyła żądanie do serwera w celu rozpoczęcia sesji
- Serwer odbiera żądanie i przydziela nowy identyfikator sesji ABC
- Klient przechowuje w skrypcie identyfikator sesji ABC.
- Klient rozpoczyna sesję z identyfikatorem ABC i wysyła żądanie do serwera, aby zezwolić na nagrywanie
- Serwer rozpoznaje identyfikator ABC i umożliwia klientowi nagranie skryptu
Przyjrzyjmy się teraz komunikacji klient-serwer podczas odtwarzania, przedstawionej po poniższych krokach:
- Podczas odtwarzania klient wysyła do serwera żądanie rozpoczęcia sesji
- Serwer odbiera żądanie i przydziela nowy identyfikator sesji XYZ
- Klient rozpoczyna sesję z wcześniej zarejestrowanym identyfikatorem sesji ABC i wysyła żądanie do serwera, aby zezwolić na nagrywanie
- Serwer nie jest w stanie zidentyfikować identyfikatora ABC, ponieważ oczekiwał przydzielonego przez siebie identyfikatora XYZ i sesja kończy się niepowodzeniem.
Potrzebujemy rozwiązania, które może przechwycić i przeanalizować wartość dynamiczną wysyłaną w czasie wykonywania oraz zwrócić ją serwerowi. Oto jak będzie wyglądała komunikacja klient-serwer w tym rozwiązaniu, jak pokazuje poniższy diagram:
- Podczas odtwarzania klient wysyła do serwera żądanie rozpoczęcia sesji
- Serwer odbiera żądanie i przydziela nowy identyfikator sesji ZZZ
- Klient analizuje nowy identyfikator sesji ZZZ z żądania.
- Klient wysyła żądanie rozpoczęcia sesji o identyfikatorze ZZZ
- Serwer rozpoznaje identyfikator ZZZ i umożliwia klientowi odtworzenie skryptu
To nic innego korelacja.
Krótki film poniżej przedstawia ten sam problem nagrywania i odtwarzania.
Kliknij w tym miejscu jeśli film nie jest dostępny
W przypadku VuGen korelacja jest wiążącym związkiem pomiędzy odpowiedzią i każdym poprzednim żądaniem.
Istnieją różne sytuacje, w których żądanie jest oparte na wcześniej otrzymanej odpowiedzi z serwera, takiej jak identyfikator sesji lub data i godzina serwera pobrane z serwera. Wartości te są różne za każdym razem, gdy uruchamiasz aplikację lub nagrywasz skrypt. Oczywiście, jeśli wykonanie skryptu zależy od wartości zwróconej przez serwer, oznacza to konieczność znalezienia mechanizmu, który umożliwi „przechwycenie” odpowiedzi serwera i dołączenie jej do żądań, których serwer oczekuje. W LoadRunnerze zjawisko to nazywa się zazwyczaj korelacją.
Krótko mówiąc, rozwiązaniem przy użyciu korelacji jest:
- Przechwyć wartość wyjściową z kroku
- Użyj powyższej przechwyconej wartości, aby służyć jako dane wejściowe we wszystkich kolejnych krokach
W VuGen/LoadRunner korelację można podzielić na dwie kategorie:
- Automatyczna korelacja
- Korelacja ręczna
Automatyczna korelacja
LoadRunner zapewnia mechanizm umożliwiający łatwe i automatyczne wykonywanie korelacji.
VuGen będzie wymagał uruchomienia nagranego skryptu co najmniej dwa razy, aby mógł wewnętrznie porównać różne wartości w odpowiedzi serwera.
Korelację automatyczną można podzielić na 3 kategorie:
- Automatyczne wykrywanie korelacji
- Korelacja oparta na regułach
- Korelowanie wszystkich stwierdzeń
| Nazwa reguły | Kiedy użyć |
| Automatyczne wykrywanie korelacji | Wykrywaj i koreluj dynamiczne dane dla serwerów aplikacji obsługiwanych przez LoadRunner |
| Oparte na regułach | Używane podczas pracy z nieobsługiwanym serwerem aplikacji, którego kontekst jest znany. |
| Powiąż wszystko | Pomaga korelować wszystkie dane dynamiczne w sposób ślepy. |
Chociaż automatyczna korelacja wydaje się prostsza, może być podatna na błędy i działa w nie więcej niż 5% przypadków. Zawsze zaleca się stosowanie korelacji ręcznej.
Aby skonfigurować automatyczną korelację w czasie nagrywania, po nagraniu skryptu wykonaj poniższą konfigurację w Ustawieniach czasu nagrywania.
Kliknij Nagrywanie => Opcje nagrywania (lub kliknij Ctrl + F7), jak pokazano w menu poniżej,
Otworzy się poniższe okno:
Kliknij na Korelacja =>Konfiguracja – otworzy się poniższe okno.
Tutaj musisz oznaczyć jako sprawdzone względem wszystkich aplikacji (ASPNET) itp., które są używane w aplikacji tematycznej. Po prawej stronie możesz zobaczyć reguły, które wykryją potencjalnych kandydatów do korelacji, np. _VIEWSTATE. Możesz także dodać więcej aplikacji lub reguł niestandardowych, klikając przycisk Nowa reguła.
Możesz także kliknąć ZASADY, zobaczysz jak poniżej:
Aby funkcja automatycznej korelacji działała, należy upewnić się, że opcja „Skanowanie reguł” jest zaznaczona. Jeśli klikniesz opcję „Automatycznie koreluj znalezione wartości”, VuGen nie wyświetli monitu o wybór po znalezieniu kandydata do korelacji, lecz jedynie go skoreluje.
Później zrozumiemy API używane do korelacji. Jednak zaleca się używanie porównania HTML zamiast porównania tekstu.
Po wybraniu reguł kliknij przycisk OK, aby zamknąć okna.
Kliknij przycisk paska narzędzi pokazany tutaj z menu, a VuGen ponownie wygeneruje skrypt (bez konieczności rejestrowania) z nowymi konfiguracjami. VuGen automatycznie doda wymagany fragment kodu do obsługi korelacji. Przyjrzymy się temu przykładowi bardziej szczegółowo w sekcji „Korelacja ręczna”.
Pamiętaj, że jeśli wykonasz korelację ręcznie lub użyjesz korelacji automatycznej, fragment kodu będzie zawierał dokładnie tę samą składnię i funkcję.
Kroki, aby automatycznie skorelować skrypt:
- Nagraj scenariusz
- Odtwórz skrypt
- Zidentyfikuj wartości, które mają być skorelowane
- Wybierz wartości i kliknij przycisk automatycznej korelacji
- Sprawdź skrypt, uruchamiając go ponownie. Pomyślny przebieg oznacza pomyślną korelację.
Wskazówka:
- Korelacja pomaga uruchomić skrypt z różnymi wartościami
- Korelacja zmniejsza również rozmiar skryptu
Korelacja ręczna
Korelacja ręczna polega na pisaniu kodu bezpośrednio w skrypcie w celu uwzględnienia stale zmieniających się wartości. Możemy podzielić to na poniższe kroki:
- Określ wartość do przechwycenia
- Znajdź prawą i lewą granicę tekstu wartości do przechwycenia (WEB)
- Znajdź, które wystąpienie granic tekstu powinno zostać użyte
- Dodaj funkcję web_reg_save_param do skryptu, nad fragmentem kodu żądającym strony z wartością do przechwycenia
- Dodaj nazwę parametru, lewą i prawą granicę oraz wystąpienie do funkcji
- Sparametryzuj wartość dynamiczną w skrypcie za każdym razem, gdy wystąpi
- Sprawdź poprawność wykonania
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 Uwagi: Oba fragmenty wyglądają dokładnie tak, jak zostały opublikowane. Zwróć uwagę na liczebniki porządkowe: Ord=l oraz RelFrameId=l użyj małej litery L, a VuGen będzie oczekiwał cyfry 1.
Ręczną korelację można wykonać za pomocą porównania VUser. Kroki metody korelacji VUser Comparison można podzielić jak poniżej:
- Zidentyfikuj wartości dynamiczne, które należy skorelować
- Znajdź odpowiedź serwera zawierającą wartość dynamiczną
- Przechwyć wartość dynamiczną w parametrze
- Zastąp każde wystąpienie wartości dynamicznej parametrem
- Sprawdź zmiany
Zrozumienie funkcji web_reg_save_param
VuGen udostępnia wiele funkcji lub interfejsów API umożliwiających korelację kandydatów, w tym:
- web_reg_save_param
- web_reg_save_param_ex
- web_reg_save_param_regexp
- web_reg_save_param_xpath
Uwaga dotycząca wersji: aktualne wydania VuGen leczą web_reg_save_param_ex jako następca pierwotnej funkcji i web_reg_save_param_regexp jako wybór, gdy same granice ulegają zmianie. Oryginalny przykład nadal obowiązuje.
Chociaż tutaj znajduje się krótkie wprowadzenie, aby uzyskać szczegółowe zrozumienie funkcji i ich parametrów, otwórz VuGen, napisz funkcję (lub użyj Steps Toolbox), przesuń kursor na funkcję i kliknij F1 – zapoznaj się z Pomoc VuGen i wyrób w sobie nawyk. Będziesz mieć z tym sporo do czynienia, pracując w tej branży.
Oto szczegóły funkcji:
web_reg_save_param(Nazwa parametru, lewa granica, prawa granica)
Lista atrybutów
Poniższa tabela zawiera wszystkie atrybuty akceptowane przez funkcję, informację, czy są obowiązkowe, oraz co kontroluje.
| Atrybut | Wymagany? | Co to robi |
| konwertować | Opcjonalnie | HTML_TO_URL konwertuje dane zakodowane w formacie HTML na URL-format zakodowanych danych. HTML_TO_TEXT konwertuje dane zakodowane w formacie HTML do formatu zwykłego tekstu. |
| Ignoruj przekierowania | Opcjonalnie, domyślnie „Ignoruj przekierowania=Nie” | Jeśli opcja jest ustawiona na Tak, a odpowiedzią serwera są informacje o przekierowaniu (kod stanu HTTP 300-303, 307), ta odpowiedź nie jest przeszukiwana. Żądanie GET trafia do przekierowanej lokalizacji, a wyszukiwanie jest uruchamiane w odpowiedzi z tego miejsca. |
| LB | Wymagane | Lewa granica parametru lub danych dynamicznych. Jeśli nie określisz wartości LB, jako granicę zostaną użyte wszystkie znaki od początku danych. Parametry graniczne rozróżniają wielkość liter. Aby dodatkowo dostosować tekst wyszukiwania, użyj jednej lub więcej flag tekstowych. |
| NIE ZNALEZIONO | Opcjonalny, domyślny „błąd” | Obsługa sytuacji, gdy granica nie zostanie znaleziona i wygenerowany zostanie pusty ciąg znaków. „Not found=error” zgłasza błąd. „Not found=warning” („Not found=empty” we wcześniejszych wersjach) ustawia liczbę parametrów na 0 i kontynuuje działanie, co jest idealnym rozwiązaniem, gdy chcesz sprawdzić, czy ciąg znaków został znaleziony bez błędu skryptu. Po włączeniu opcji „Continue on Error” skrypt jest kontynuowany nawet w przypadku błędu, ale jest on rejestrowany w rozszerzonym dzienniku. |
| ORD | Opcjonalnie, domyślnie 1 | Wskazuje pozycję porządkową lub wystąpienie dopasowania. Jeśli wybierzesz „Wszystkie”, wartości parametrów zostaną zapisane w tablicy. Użycie parametru „Instancja” zamiast „ORD” jest obsługiwane ze względu na kompatybilność wsteczną, ale jest przestarzałe. |
| RB | Wymagane | Prawa granica parametru lub danych dynamicznych. Jeśli nie określisz wartości RB, jako granicę zostaną użyte wszystkie znaki do końca danych. Parametry graniczne rozróżniają wielkość liter. Aby dodatkowo dostosować tekst wyszukiwania, użyj jednej lub więcej flag tekstowych. |
| RelFrameID | Opcjonalnie | Poziom hierarchii strony HTML w stosunku do żądanej URLMożliwe wartości to ALL lub liczba. RelFrameID nie jest obsługiwany w skryptach na poziomie GUI. |
| Zapisz Len | Opcjonalnie, domyślnie -1 | Długość podciągu znalezionej wartości, od określonego przesunięcia, do zapisania w parametrze. Domyślnie zapisuje się na końcu ciągu. |
| ZapiszPrzesunięcie | Opcjonalnie, domyślnie 0 | Przesunięcie podciągu znalezionej wartości, który ma zostać zapisany w parametrze. Wartość przesunięcia musi być nieujemna. |
| Szukaj | Opcjonalnie, domyślnie ALL | Zakres wyszukiwania — gdzie szukać danych rozdzielonych. Możliwe wartości to: „Nagłówki” (wyszukiwanie tylko w nagłówkach), „Treść” (wyszukiwanie tylko w treści, bez nagłówków), „Brak zasobu” (wyszukiwanie tylko w treści HTML, z wyłączeniem wszystkich nagłówków i zasobów) lub „WSZYSTKIE” (wyszukiwanie w treści, nagłówkach i zasobach). |
Gdy skrypt zostanie odtworzony poprawnie, dodaj parametryzacja, transakcje i ustawienia czasu wykonania, uruchom go z kontroleri odczytaj wynik w Analiza jako część szerszego Test wydajności oraz Testowanie obciążenia.







