transakcje LoadRunner, sprawdzanie tekstu i obrazu, komentarze i punkty spotkania
Wprowadzenie do podstawowych ulepszeń skryptu VuGen:
szczegółowo zbadaliśmy korelację w LoadRunner w naszym poprzednim samouczku w tym kompletnym samouczku szkoleniowym LoadRunner.
w dwóch ostatnich tutorialach pracowaliśmy nad obsługą danych w skrypcie Vugena (korelacja i parametryzacja).
w tym samouczku Loadrunnera zobaczymy inne podstawowe ulepszenia (wymienione poniżej), które są wymagane dla naszego skryptu:
- transakcje – do pomiaru szybkości i czasu reakcji działań użytkownika.
- sprawdzanie tekstu i obrazu – aby upewnić się, że zwrócona odpowiedź jest poprawna.
- punkty spotkania-aby Vusers wykonywali zadanie jednocześnie.
=> Kliknij tutaj, aby uzyskać pełną serię samouczków LoadRunner
transakcje w skrypcie VuGen
samo odtworzenie skryptów wydajności tylko obciąży aplikację, ale nie mierzy niczego. Celem końcowym każdego skryptu wydajności jest wstrzyknięcie obciążenia oraz pomiar szybkości i czasu reakcji działań użytkownika w aplikacji.
na przykład, ile czasu zajęło wyszukiwanie produktu, Gdy 100 użytkowników jest w aplikacji, ile raportów jest generowanych w czasie powiedzmy 15 minut i tak dalej. Aby je zmierzyć, musimy wstawić transakcje do skryptu Vugena (po teście widzimy szybkość i czas reakcji tych transakcji w wynikach).
‘transakcja to końcowy pomiar akcji użytkownika (lub grupy akcji użytkownika) w aplikacji’.
transakcje można wstawiać na dwa sposoby:
- podczas nagrywania
- po nagrywaniu (gdzie ręcznie wstawiamy funkcje transakcyjne w skrypcie)
wstawmy transakcję dla akcji użytkownika “Login” w naszej aplikacji “Web Tours”.
w naszym pierwszym samouczku zobaczyliśmy, jak nagrywać akcje użytkowników. Podczas nagrywania, po wprowadzeniu “nazwy użytkownika” i “hasła” na stronie logowania, tuż przed kliknięciem przycisku “Zaloguj się”, kliknij ikonę “Wstaw rozpocznij transakcję” na pływającym pasku nagrywania.
VuGen pyta o nazwę transakcji. Wprowadź dowolną znaczącą nazwę. Podaliśmy tutaj ‘Login’, ale dobrą praktyką jest przestrzeganie takiej konwencji(numer transakcji, Nazwa scenariusza, akcja użytkownika itp.): 01_WebTours_Launch 02_WebTours_Login (i tak dalej).
teraz kliknij przycisk logowania.
po dotarciu do strony głównej (Strona główna), kliknij ikonę “Wstaw transakcję końcową” na pływającym pasku nagrywania.
wybierz transakcję, którą chcemy zakończyć (transakcja’ Login ‘ tutaj).
Zatrzymaj nagrywanie i zobacz wygenerowany skrypt. Widzimy, że funkcje rozpoczęcia i zakończenia transakcji są wstawione do skryptu (podświetlone na Żółto) i wszystkie żądania odpowiadające akcji użytkownika ‘Login’ są zamknięte pomiędzy tymi funkcjami.
lr_start_transaction("Login");web_submit_data("login.pl","Action=http://127.0.0.1:1080/cgi-bin/login.pl","Method=POST","TargetFrame=","RecContentType=text/html","Referer=http://127.0.0.1:1080/cgi-bin/nav.pl?in=home","Snapshot=t3.inf","Mode=HTML",ITEMDATA,"Name=userSession", "Value=123530.624949372zDftVAzpfcAiDDDDDiVctpzDQVcf", ENDITEM,"Name=username", "Value=jojo", ENDITEM,"Name=password", "Value=bean", ENDITEM,"Name=JSFormSubmit", "Value=off", ENDITEM,"Name=login.x", "Value=69", ENDITEM,"Name=login.y", "Value=8", ENDITEM,LAST);lr_end_transaction("Login",LR_AUTO);
składnia funkcji “rozpoczęcie transakcji” i “koniec transakcji” jest dość prosta. Oba mają nazwę transakcji jako pierwszy argument. Funkcja ‘end transaction’ posiada jeszcze jeden atrybut – ‘LR_AUTO’, który instruuje Vugena, aby przeszedł lub Fail transakcję automatycznie (zamiast jawnie określać warunek dla pass or fail).
jeśli Load runner napotka jakiekolwiek błędy podczas wykonywania żądań w ramach transakcji, to zawiedzie transakcję, w przeciwnym razie przejdzie transakcję.
sprawdzanie tekstu i obrazu w skrypcie VuGen
sprawdzanie tekstu służy do sprawdzenia, czy odpowiedź zwrócona dla żądania jest poprawna, czy nie. W samouczku “korelacja” zauważyliśmy, że czasami VuGen może nie wykazywać żadnego błędu, ale zwracana odpowiedź może nie być prawidłowa. Tak więc, aby upewnić się, że odpowiedź jest poprawna, używamy sprawdzania tekstu.
na przykład, gdy logujemy się do aplikacji Web Tours, przechodzimy do strony głównej. Sprawdźmy w skrypcie, czy otrzymujemy poprawną odpowiedź (homepage), czy też nie po zalogowaniu.
aby to zrobić, musimy zidentyfikować jakiś tekst w odpowiedzi (Strona główna tutaj), który może powiedzieć, czy odpowiedź jest poprawna, czy nie. “Welcome” to jeden z takich tekstów.
do sprawdzania tekstu używamy funkcji ‘web_reg_find’ tuż przed żądaniem.
składnia tej funkcji jest:
web_reg_find("Text=","SaveCount=","Fail=",LAST);
tutaj mamy trzy atrybuty (patrz vugen help, aby uzyskać pełną listę atrybutów):
‘Text’- używany do określenia, który tekst ma być wyszukiwany.
‘SaveCount’ – zapisuje ilość wystąpień podanego tekstu do parametru, który podajemy.
‘Fail’ – pobiera jedną z dwóch wartości- ‘ Found ‘I’ NotFound ‘ i odpowiednio nie wykonuje skryptu.
funkcja web_reg_find(“Text=Welcome”,”SaveCount=WelcomeCount”,”Fail=NotFound”, LAST) wyszukuje tekst ‘Welcome’ w odpowiedzi i zapisuje liczbę wystąpień do parametru ‘WelcomeCount’ (i nie powiedzie się skryptowi, jeśli tekst nie zostanie znaleziony).
skrypt wygląda tak:
web_reg_find("Text=Welcome","SaveCount=WelcomeCount","Fail=NotFound",LAST);web_submit_data("login.pl","Action=http://127.0.0.1:1080/cgi-bin/login.pl","Method=POST","TargetFrame=body","RecContentType=text/html","Referer=http://127.0.0.1:1080/cgi-bin/nav.pl?in=home","Snapshot=t2.inf","Mode=HTML",ITEMDATA,"Name=userSession", "Value=123531.149939247zDftVDDpfcfDiVctpiAVVf", ENDITEM,"Name=username", "Value=jojo", ENDITEM,"Name=password", "Value=bean", ENDITEM,"Name=JSFormSubmit", "Value=off", ENDITEM,"Name=login.x", "Value=66", ENDITEM,"Name=login.y", "Value=12", ENDITEM,LAST);
teraz, jeśli odtworzymy skrypt, otrzymamy błąd dla żądania logowania (patrz w dzienniku przekaźników), ponieważ VuGen nie znalazł tekstu, który podaliśmy, w odpowiedzi. Dzieje się tak dlatego, że nie otrzymaliśmy poprawnej strony głównej (jak pokazano w ‘przeglądarce czasu pracy’).
teraz poprawmy nasz skrypt (skorelujmy userSession) i ponownie odtworzymy skrypt.
web_reg_find("Text=Welcome","SaveCount=WelcomeCount","Fail=NotFound",LAST);web_submit_data("login.pl", "Action=http://127.0.0.1:1080/cgi-bin/login.pl", "Method=POST", "TargetFrame=body", "RecContentType=text/html", "Referer=http://127.0.0.1:1080/cgi-bin/nav.pl?in=home", "Snapshot=t2.inf", "Mode=HTML", ITEMDATA, "Name=userSession", "Value={corUserSession}", ENDITEM, "Name=username", "Value=jojo", ENDITEM, "Name=password", "Value=bean", ENDITEM, "Name=JSFormSubmit", "Value=off", ENDITEM, "Name=login.x", "Value=66", ENDITEM, "Name=login.y", "Value=12", ENDITEM, LAST);
tym razem nie widzimy żadnego błędu w dzienniku powtórek, ale widzimy komunikat, że nasze sprawdzenie tekstu powiodło się. Tym razem otrzymaliśmy więc poprawną odpowiedź (co potwierdza ‘przeglądarka runtime’).
możemy łączyć kontrole tekstowe z transakcjami i sprawić, że vugen przejdzie transakcję, jeśli sprawdzenie tekstowe powiedzie się i nie powiedzie się transakcja, jeśli sprawdzenie tekstowe nie powiedzie się.
:
lr_start_transaction("Login");web_reg_find("Text=Welcome","SaveCount=WelcomeCount",LAST);web_submit_data("login.pl", "Action=http://127.0.0.1:1080/cgi-bin/login.pl", "Method=POST", "TargetFrame=body", "RecContentType=text/html", "Referer=http://127.0.0.1:1080/cgi-bin/nav.pl?in=home", "Snapshot=t2.inf", "Mode=HTML", ITEMDATA, "Name=userSession", "Value={corUserSession}", ENDITEM, "Name=username", "Value=jojo", ENDITEM, "Name=password", "Value=bean", ENDITEM, "Name=JSFormSubmit", "Value=off", ENDITEM, "Name=login.x", "Value=66", ENDITEM, "Name=login.y", "Value=12", ENDITEM, LAST);if(atoi(lr_eval_string("{WelcomeCount}"))>0){lr_end_transaction("Login",LR_PASS);}else{lr_end_transaction("Login",LR_FAIL);}
użyliśmy tutaj instrukcji ‘ if ‘z atrybutem ‘SaveCount’. Parametr ‘ WelcomeCount ‘(zapisujący liczbę wystąpień tekstu) jest używany jako warunek do przekazania/niepowodzenia transakcji. Atrybuty’ LR_PASS ‘i’ lr_fail ‘ funkcji transakcyjnych są używane do jawnego przekazania i niepowodzenia (odpowiednio) transakcji.
Uwaga: użyliśmy tu dwóch nowych funkcji – ‘atoi’ i ‘lr_eval_string’. O tych funkcjach porozmawiamy później.
kilka informacji na temat kombinacji atrybutów funkcji ‘web_reg_find’ :
#1) Jeśli używany jest tylko atrybut ‘Text’-
przykład: web_reg_find (“Text=Welcome”, LAST) –
VuGen wyszukuje tekst i nie wykonuje skryptu, jeśli Wyszukiwanie się nie powiedzie.
#2) Jeżeli są użyte tylko atrybuty ‘Text’ i ‘SaveCount’ –
przykład: web_reg_find(“Text=Welcome”,”SaveCount=WelcomeCount”, LAST) – VuGen wyszukuje tekst i zapisuje ilość wystąpień (nawet jeżeli jest zerowa) do podanego parametru (nie zawiedzie skryptu, jeżeli wyszukiwanie nie powiedzie się).
#3) jeśli używane są tylko atrybuty ‘ Text ‘I’ Fail ‘ –
przykład: web_reg_find (“Text=Welcome”, “Fail=NotFound”, LAST) – VuGen wyszukuje tekst i nie wykonuje skryptu, jeśli tekst zostanie znaleziony/nie został znaleziony.
sprawdzanie tekstu można również wstawiać podczas nagrywania za pomocą ikony “Wstaw sprawdzanie tekstu” na pływającym pasku nagrywania. Spowoduje to wstawienie tej samej funkcji ‘web_reg_find’ do skryptu.
ale lepiej jest wstawić tę funkcję ręcznie, ponieważ będziemy mieli lepszą kontrolę głównie nad atrybutami.
wyraźnie zrozumieliśmy sprawdzanie tekstu, teraz przejdźmy do sprawdzania obrazu.
sprawdzanie obrazu służy do weryfikacji obecności określonego obrazu w odpowiedzi. funkcja ‘web_image_check’służy do sprawdzania obrazu. Funkcję tę należy umieścić po żądaniu (w odpowiedzi na które oczekujemy obrazu).
przykład tej funkcji:
web_image_check("Image","Src=/WebTours/images/flights.gif",LAST)
gdzie pierwszym atrybutem jest dowolna znacząca nazwa, a drugim atrybutem (“Src”) jest nazwa obrazu/link (patrz Pomoc VuGen, aby uzyskać pełną listę atrybutów).
komentarze w skrypcie VuGen
komentarze w skrypcie VuGen mogą być wprowadzane podczas nagrywania, a także ręcznie po nagraniu skryptu.
podczas nagrywania kliknij ikonę “Wstaw Komentarz” na pływającym pasku nagrywania.
wprowadź komentarz (powiedz tutaj ‘Zaloguj się’).
po nagraniu możemy zobaczyć komentarze w skrypcie, jak pokazano poniżej.
/* Login */web_submit_data("login.pl", "Action=http://127.0.0.1:1080/cgi-bin/login.pl", "Method=POST", "TargetFrame=body", "RecContentType=text/html", "Referer=http://127.0.0.1:1080/cgi-bin/nav.pl?in=home", "Snapshot=t6.inf", "Mode=HTML",
w VuGen pojedynczy wiersz można skomentować, po prostu umieszczając “/ / ” przed wierszem, jak pokazano poniżej:
// web_add_cookie("SRCHD=AF=IESS3N; DOMAIN=www.bing.com");web_add_cookie("SRCHUID=V=2&GUID=89730C3AA700412BAB917005DE9F5F47&dmnchg=1; DOMAIN=www.bing.com");web_add_cookie("SRCHUSR=DOB=20180312; DOMAIN=www.bing.com");
i wiele linii można połączyć, umieszczając “/ * “na początku i” * / ” na końcu (jak pokazano poniżej)
/* web_add_cookie("SRCHD=AF=IESS3N; DOMAIN=www.bing.com");web_add_cookie("SRCHUID=V=2&GUID=89730C3AA700412BAB917005DE9F5F47&dmnchg=1; DOMAIN=www.bing.com");web_add_cookie("SRCHUSR=DOB=20180312; DOMAIN=www.bing.com"); */
Uwaga: w powyższych przykładach skomentowaliśmy funkcje plików cookie (web_add_cookie). O funkcjach plików cookie porozmawiamy później w tej serii samouczków.
dobrą praktyką jest wstawianie komentarzy na każdym kroku podczas nagrywania, ponieważ pomoże nam to powiązać żądania w skrypcie z działaniami użytkownika w aplikacji.
Rendezvous Point w skrypcie Vugena
jeśli mamy scenariusz, w którym większa liczba użytkowników wykonuje akcję jednocześnie w aplikacji (np. sprawdzanie wyników) i jeśli musimy symulować to samo w naszym teście wydajności, możemy użyć “Rendezvous point”.
‘Rendezvous point’ to pojedyncza i prosta funkcja w skrypcie Vugena, która instruuje Load runnera (podczas testu z wieloma użytkownikami), aby czekał na określonym kroku skryptu, aż wszyscy użytkownicy (wykonujący skrypt) dojdą do tego kroku, aby kolejne żądanie mogło być wykonane jednocześnie.
składnia funkcji Rendezvous to:
lr_rendezvous("MeaningfulName");
funkcja ta może być wstawiona podczas nagrywania, a także ręcznie po nagraniu skryptu.
Załóżmy, że chcemy umieścić jednoczesne obciążenie kroku płatności w naszej aplikacji ‘Web Tours’. Podczas nagrywania na tym etapie (przed przesłaniem szczegółów płatności) kliknij ikonę “Wstaw spotkanie” na pływającym pasku nagrywania.
i wprowadź nazwę punktu spotkania (dowolną znaczącą nazwę).
po nagraniu możemy zobaczyć funkcję spotkania w skrypcie w ten sposób.
lr_rendezvous("Payment");web_submit_data("reservations.pl_3","Action=http://127.0.0.1:1080/cgi-bin/reservations.pl","Method=POST","TargetFrame=","RecContentType=text/html","Referer=http://127.0.0.1:1080/cgi-bin/reservations.pl","Snapshot=t13.inf","Mode=HTML",ITEMDATA,"Name=firstName", "Value=Jojo", ENDITEM,"Name=lastName", "Value=Bean", ENDITEM,"Name=address1", "Value=1st Lane, Down Street", ENDITEM,"Name=address2", "Value=567123", ENDITEM,"Name=pass1", "Value=Jojo Bean", ENDITEM,"Name=creditCard", "Value=123456789101", ENDITEM,"Name=expDate", "Value=0520", ENDITEM,"Name=oldCCOption", "Value=", ENDITEM,"Name=numPassengers", "Value=1", ENDITEM,"Name=seatType", "Value=Coach", ENDITEM,"Name=seatPref", "Value=None", ENDITEM,"Name=outboundFlight", "Value=020;338;05/03/2018", ENDITEM,"Name=advanceDiscount", "Value=0", ENDITEM,"Name=returnFlight", "Value=", ENDITEM,"Name=JSFormSubmit", "Value=off", ENDITEM,"Name=.cgifields", "Value=saveCC", ENDITEM,"Name=buyFlights.x", "Value=63", ENDITEM,"Name=buyFlights.y", "Value=12", ENDITEM,LAST);
teraz, gdy uruchomimy ten skrypt z wieloma użytkownikami w kontrolerze, skrypt będzie wykonywany przez Vuserów niezależnie, ale Vuserzy będą czekać na tym kroku ‘płatności’, aż wszyscy (lub pewien procent Vuserów zdefiniowanych w Rendezvous policy) osiągną ten krok, po czym wykonają ten krok jednocześnie.
więcej informacji o zasadach spotkania (opcjach) zobaczymy w samouczku kontrolera.
wniosek
do tej pory omawialiśmy korelację i parametryzację w poprzednich samouczkach i transakcjach, sprawdzaniu tekstu/obrazu, komentarzach i punktach spotkania w tym samouczku omówiliśmy również najważniejsze metody ulepszania skryptów.
w naszym następnym samouczku zobaczymy więcej wyzwań skryptowych wraz ze sposobami radzenia sobie z nimi.
=> odwiedź tutaj pełną serię samouczków LoadRunner
poprzedni samouczek / następny samouczek
Leave a Reply