SlideShare ist ein Scribd-Unternehmen logo
1 von 63
Automatyzacja
testów
funkcjonalnych

© 2010 Tieto Corporation

z wykorzystaniem narzędzia JMeter,
CZĘŚĆ II

Tomasz Stupak
Senior Test Engineer
Tieto
Spis Treści
•

Wstęp
•

•

4

5

Przygotowanie środowiska
Konfiguracja HTTP Request Defaults
Konfiguracja HTTP Proxy Server
Konfiguracja przeglądarki
Start serwera proxy
Nagrywanie skryptu
Nagrany skrypt
Odtwarzanie nagranego skryptu
Wyniki testu

6
7
8
9
10
11
12
13
14

Parametryzacja testu
•
•
•
•
•
•
•
•
•
•

2

JMeter advanced

Nagrywanie skryptu
•
•
•
•
•
•
•
•
•

•

3

15

Sposoby tworzenia zmiennych
Parametryzacja nazwy serwera
Zastąpienie nazwy serwera zmienną
Parametryzacja szukanej frazy
Zastąpienie szukanej frazy zmienną
Uruchamianie sparametryzowanego testu
Zmiana wartości zmiennej
Wskazówka
Wskazówka – UWAGA!
Wskazówka - rozwiązanie

© 2010 Tieto Corporation

Tomasz Stupak

16
17
18
19
20
21
22
23
24
25

2014-01-24
Spis Treści
•

Wykorzystanie asercji
•
•
•
•
•
•
•
•
•

•

27
28
30
31
32
33
34
35
36

38

Wstęp
Dodawanie Kontrolerów Logicznych
Dodanie Kontrolera Once Only Controller
Dodanie Kontrolera Interleave Controller
Dodanie Kontrolera Loop Controller
Dodanie Kontrolera If Controller
Uruchomienie testu z Kontrolerami Logicznymi

39
40
41
42
43
44
45

Wykorzystanie Timerów
•
•
•
•
•

3

Wstęp
Dodanie asercji
Response Assertion
Konfiguracja Response Assertion
Size Assertion
Konfiguracja Size Assertion
Duration Assertion
Konfiguracja Durtion Assertion
Uruchomienie testu z asercjami

Wykorzystanie Kontrolerów Logicznych
•
•
•
•
•
•
•

•

26

46

Wstęp
Dodawanie Timerów
Dodanie Timera Synchronizing Timer
Dodanie Timera Constant Timer
Uruchomienie testu z Timerami

© 2010 Tieto Corporation

Tomasz Stupak

47
48
49
50
51

2014-01-24
Spis Treści
•

Symulacja „żywych” użytkowników
•
•
•
•
•

•

Wstęp
Przygotowanie środowiska
Dodanie Timera Gaussian Random Timer
Konfiguracja Gaussian Random Timer
Symulacja żywych użytkowników

53
54
55
56
58

W następnym odcinku
•

4

52

59

W następnym odcinku

© 2010 Tieto Corporation

60

Tomasz Stupak

2014-01-24
© 2010 Tieto Corporation

Wstęp

T
5 omasz Stupak

2014-01-24
JMeter advanced
• Wykorzytanie bardziej skomplikowanych elementów
aplikacji:
• Nagrywanie skryptów za pomocą elementu HTTP Proxy Server
• Parametryzacja testu
• Użycie asercji
• Użycie Logic Controllers
• Użycie Timerów

• Symulacja „żywych” użytkowników
6

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
© 2010 Tieto Corporation

Nagrywanie
skryptu

T
7 omasz Stupak

2014-01-24
Przygotowanie środowiska
• Utwórz nowy projekt i dodaj
następujące elementy:
• Thread Group do Test Planu
• HTTP Proxy Server (Non-Test Elements)
do WorkBench

• Dodaj do Thread Group następujące
elementy:
•
•
•
•

8

HTTP Request Defaults (Config Element)
HTTP Cookie Manager (Config Element)
Recording Controller (Logic Controller)
View Results Tree (Listener)

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Konfiguracja HTTP Request
Defaults
• Web Server -> Server Name or IP:
• bash.org.pl

9

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Konfiguracja HTTP Proxy Server
• Test plan content -> Target Controller:
• Use Recording Controller

• Test plan content -> Grouping:
• Store 1st sampler of each group only

10

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Konfiguracja przeglądarki
• W tym przykładzie użyto przeglądarki Mozilla Firefox
• Narzędzia -> Opcje -> Zaawansowane -> Sieć ->
Ustawienia
• Ręczna konfiguracja serwerów proxy
• Serwer proxy HTTP: Localhost
• Port: 8080

11

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Start serwera proxy
• HTTP Proxy Server -> Start

• JMeter będzie przechwytywał ruch HTTP z przeglądarki
• Port nasłuchu można zmienić w ustawieniach HTTP Proxy
Server (pole Port)
• Po zakończeniu nagrywania naciśnij Stop oraz przywróć
poprzednie ustawienia w przeglądarce
• JMeter domyślnie potrzebuje 1000 ms (1s) przerwy między
poszczególnymi „kliknięciami”

12

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Nagrywanie skryptu
• Otwórz w przeglądarce stronę http://www.bash.org.pl
• Pod Recording Controller pojawił się HTTP Request
• W celu większej przejrzystości skryptu zmień nazwę samplera np. na
„Strona glowna”

•
•
•
•

Kliknij link „najnowsze”
Kliknij link „losowe”
Kliknij link „szukaj”
W pole wyszukiwania wpisz np. „mazowsze” i naciśnij
„szukaj”
• Zatrzymaj serwer proxy
• Nadaj requestom przejrzyste nazwy
• Zapisz skrypt
13

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Nagrany skrypt
• Nagrany skrypt powinien wyglądać tak:

14

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Odtwarzanie nagranego skryptu
• Start testu:
• Run -> Start
• CTRL+R

• Stop testu:
• Run -> Stop
• CTRL+.

• Wyczyszczenie wyników
• Run -> Clear All
• CTRL+E

15

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Wyniki testu

16

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
© 2010 Tieto Corporation

Parametryzacja
testu
Sposoby tworzenia zmiennych
• Test Plan - > User Defined Variables
• Zmienne globalne dla całego Test Planu

• Thread Group -> Add -> Config Elements -> User Defined
Variables
• Zmienne lokalne dla danego wątku

18

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Parametryzacja nazwy serwera
• Test Plan -> User Defined Variables -> Add
• Name: host
• Value: bash.org.pl

19

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Zastąpienie nazwy serwera
zmienną
• Thread Group -> HTTP Request Defaults
• Wartość pola „Server Name or IP” zastąp wartością zmiennej host
• Stosuje się notację ${NAZWA_ZMIENNEJ}

• Przydatne np. w przypadku zapewnienia szybkiej
przenaszalności skryptu z serwera testowego na serwer
produkcyjny

20

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Parametryzacja szukanej frazy
• Test Plan -> User Defined Variables -> Add
• Name: search
• Value: mazowsze

21

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Zastąpienie szukanej frazy
zmienną
• Thread Group -> Recording Controller -> Szukaj (HTTP
Request) -> Send Parameters With the Request

• Wartość parametru q zastąp wartością zmiennej search:

22

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Uruchamianie
sparametryzowanego testu
• Wyczyść wyniki poprzedniego testu (jeśli to konieczne)
• Run -> Clear All (CTRL+E)

• Uruchom sparametryzowany test:
• Run -> Start (CTRL+R)

•

Sprawdź wyniki requestu wyszukiwania frazy:
• View Results Tree -> Szukaj -> Request
• Nazwa serwera oraz wartość parametru q powinny zostać prawidłowo
pobrane z użytych zmiennych

• View Results Tree -> Szukaj -> Response data (zmień na HTML)
• Powinna zostać pobrana odpowiednia strona

23

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Zmiana wartości zmiennej
• Zmień wartość zmiennej serach np. na „do sadu”:

• W przypadku problemów z kodowaniem znaków, użyj „%20”
zamiast znaku spacji („do%20sadu”)
• Uruchom test i sprawdź wyniki requestu wyszukiwania frazy

24

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Wskazówka
• Przed nagraniem skryptu dodaj zmienną z wartością
wyszukiwanej frazy
• Nagraj skrypt wpisując w pole wyszukiwania wartość
zdefiniowanej wcześniej zmiennej
• Wartość parametru q powinna automatycznie przybrać postać
zdefiniowanej wcześniej zmiennej

25

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Wskazówka – UWAGA!
• Serwer Proxy szuka wszystkich wystąpień wartości danej
zmiennej i zmienia je
• Może to doprowadzić do niepożądanej sytuacji:
• Dodaj zmienną o dowolnej nazwie i wartości search
• Nagraj skrypt wpisując w pole wyszukiwania „search”

• Wartość zmiennej została wpisana także do ścieżki

26

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Wskazówka - rozwiązanie
• HTTP Proxy Server -> Test plan content
• Zaznacz „Regex matching”
• Serwer proxy będzie traktorał zmienne jako wyrażenia regularne

• Wykorzystując wyrażenia regularne, sprecyzuj które
występowania powinny być zastępowane zmienną
• ^search$
• Serwer proxy będzie zastępował tylko pojedyncze stringi „search”
• Nie będzie zastępował np. „/search/”, używanego w ścieżce

• Przed odtworzeniem nagranego skryptu, przywróć wartość
zmiennej do poprzedniego stanu
27

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
© 2010 Tieto Corporation

Wykorzystanie
asercji

Tomasz Stupak
28

2014-01-24
Wstęp
• Asercje służą do dodatkowego sprawdzania poprawności
wyników, zwracanych przez requesty
• Przetwarzane są po każdym requeście w danym zakresie
• Aby asercja stosowana była do jednego requestu, dodaj ją
jako jego podelement
• Asercje domyślnie stosowane są do requestu głównego, a nie jego
podelementów
• Można to zmienić w seksji „Apply to”

• Błędne wyniki asercji powodują pojawienie się błędu dla
danego requestu
• W celu monitorowania błędów asersji można też użyć
Listenera: Assertion Results

© 2010 Tieto Corporation
Dodanie asercji
• W nagranym wcześniej skrypcie dodaj asercje do requestu
wyszukiwania frazy:
• Thread Group -> Szukaj -> Add -> Assertions

• Dodaj następujące asercje:
• Response Assertion
• Size Assertion
• Duration Assertion

• Do Thread Group dodaj teże Listener: Assertion Results:
• Thread Gruop -> Add -> Listeners -> Assertion Results

30

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
31

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Response Assertion
• Porównuje wybraną część odpowiedzi na request ze
zdefiniowanym wzorce w wybrany sposób.
• Sekcja „Apply to” pozwala określić do których requestów
odnosi się dana asercja (głównego, czy także
podelementów)
• Sekcja „Response Field to Test” pozwala określić do jakiej
części odpowiedzi odnosi się dana asercja
• Sekcja „Pattern Matching Rules” określa sposób, w jaki
dany wzorzec jest porównywany:
• Contains / Matches – wzorzec traktowany jest jako wyrażenie
regularne
• Equals / Substring – wzorzec traktowany jest jako tekst

• Sekcja „Patterns to Test” definiuje wzorce do porównania
32

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Konfiguracja Response Assertion
• Patterns to Test -> Add
• Dodaj wzorzec, który będzie sprawdzany w odpowiedzi requestu

33

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Size Assertion
• Sprawdza, czy odpowiedź na request zajmuje odpowiednią
ilość bajtów
• Sekcja „Apply to” pozwala określić do których requestów
odnosi się dana asercja (głównego, czy także
podelementów)
• Sekcja „Size to Assert” określa rozmiar oraz sposób
porównania:
•
•
•
•

34

Równe
Różne
Większe (lub równe)
Mniejsze (lub równe)

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Konfiguracja Size Assertion
• W pole „Size in bytes” wpisz przykładową ilość bajtów
• W „Type of Comparison” wybierz „>”

35

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Duration Assertion
• Sprawdza, czy odpowiedź na request pojawiła się przed
upłynięciem podanego czasu
• Sekcja „Apply to” pozwala określić do których requestów
odnosi się dana asercja (głównego, czy także
podelementów)
• Jeśli odpowiedź pojawi się po upłynięciu podanego czasu,
zwracany jest błąd
• Czas podawany jest w milisekundach

36

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Konfiguracja Durtion Assertion
• W pole „Duration in milliseconds” wpisz przykładowy czas

37

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Uruchomienie testu z asercjami
• Wyczyść wyniki poprzedniego testu (jeśli to konieczne)
• Run -> Clear All (CTRL+E)

• Uruchom sparametryzowany test:
• Run -> Start (CTRL+R)

•

Sprawdź wyniki requestu wyszukiwania frazy:
• View Results Tree -> Szukaj
• W tym przykładzie wszystkie asercje powinny zwrócić błąd

• Sprawdź wyniki Listenera: Assertion Results
• Dla requestu wyszukiwania frazy powinny być zwrócone błędy
asercji

38

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Zawartość
Listenerów:
• View Results Tree
(po lewej)
• Assertion Results
(poniżej)

• Zmień parametry asercji i po ponownym
uruchomieniu skryptu obserwuj wyniki
39

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
© 2010 Tieto Corporation

Wykorzystanie
Kontrolerów
Logicznych

Tomasz Stupak
40

2014-01-24
Wstęp
• Kontrolery Logiczne określają logikę decydującą o tym,
kiedy wysłać request
• Mogą zmienić kolejność wykonywania requestów
• Mogą modyfikować requesty
• Mogą powodować powtórzenie wykonania requestów
• Można je łączyć w celu uzyskania danych rezultatów

41

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Dodawanie Kontrolerów
Logicznych
• Istnieją dwa sposoby dodawania Kontrolerów Logicznych
• Dodawanie pustego Kontrolera Logicznego i umieszczenie
Samplerów jako jego podelementy
• Dodanie Kontrolera Logicznego jako rodzica danego Samplera

• Thread Group -> Add -> Logic Controller
• Po dodaniu Kontrolera Logicznego, można umieszczać Samplery
jako jego podelementy

• Sampler -> Insert Parent -> Logic Controller
• Kontroler Logiczny zostanie dodany jako rodzic danego Samplera

• W poprzednich przykładach użyty został jeden Kontroler
Logiczny:
• Recording Controller

42

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Dodanie Kontrolera Once Only
Controller
• Once Only Controller sprawia, że
jego podelementy uruchamiane są
tylko przy pierwszej iteracji testu
• Dodaj Once Only Controller jako
rodzica requestu „Strona glowna”:
• Strona glowna -> Insert Parent ->
Once Only Controller

• Ustaw liczbę iteracji wątku na 3
• Thread Group -> Loop Count: 3

43

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Dodanie Kontrolera Interleave
Controller
• Interleave Controller sprawia, że
jego podelementy uruchamiane są
naprzemiennie co każdą iterację
(kolejno)
• Dodaj Interleave Controller jako
rodzica requestów „Najnowsze” i
„Losowe”
• Najnowsze -> Insert Parent ->
Interleave Controller
• Metodą „przenieś i upuść” dodaj
request „Losowe” jako podelement
Kontrolera Interleave Controller (Add
as Child)

• Podobnie działa Random
Controller (uruchamia losowo)
44

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Dodanie Kontrolera Loop
Controller
• Loop Controller uruchamia
podelementy daną ilość
razy w ramach danej iteracji
• Dodaj Loop Controller jako
rodzica requestu „Strona
wyszukiwania” i ustaw
liczbę iteracji na 2
• Strona wyszukiwania -> Insert
Parent -> Loop Controller
• Loop Controller -> Loop
Count: 2

45

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Dodanie Kontrolera If Controller
• If Controller decyduje, czy
jego podelementy mają być
uruchomione, czy nie
• Dodaj If Controller jako
rodzica requestu „Szukaj” i
ustaw warunek uruchomienia,
jeżeli zmienna search ma
wartość „test”:
• Szukaj -> Insert Parent -> If
Controller
• If Controller -> Condition:
"${search}" == "test"

46

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Uruchomienie testu z Kontrolerami
Logicznymi
• Uruchom test i sprawdź
wyniki Listenera: View
Results Tree:
• Request „Strona glowna”
wykonał się tylko w pierwszej
iteracji
• Requesty „Najnowsze” i
„Losowe” wykonywały się
naprzemiennie co iterację
• Request „Strona wyszukiwania”
wykonał się dwukrotnie co
daną iterację
• Request „Szukaj” nie wykonał
się, ponieważ warunek nie
został spełniony
47

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
© 2010 Tieto Corporation

Wykorzystanie
Timerów

Tomasz Stupak
48

2014-01-24
Wstęp
• Timery używane są do tworzenia przerw między
wykonywaniem requestów
• Domyślnie JMeter wysyła requesty bez przerw, co może
spowodować przeciążenie serwera

• Gdy użyty jest więcej niż jeden Timer, JMeter sumuje ich
wartości
• Dodawane jako podelementy Samplerów lub Kontrolerów
• Timery przetwarzane są przed danym Samplerem
• Timery, które nie są przydzielone do Samplera, nie są
przetwarzane w ogóle

© 2010 Tieto Corporation
Dodawanie Timerów
• Aby przydzielić Timer do danego Samplera, dodaj go jako
jego podelement:
• Sampler -> Add -> Timer

• Timer będzie przetwarzany przed danym Samplerem
• Aby uruchomić Timer po danym Samplerze, dodaj go do
następnego Samplera

50

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Dodanie Timera Synchronizing
Timer
• Synchronizing Timer blokuje wątki, do
czasu aż określona liczba wątków
zostanie zablokowana, po czym
wznawia je jednocześnie
• Ustaw liczbę wątków na 3
• Thread Group -> Number of Threads: 3

• Dodaj Synchronizing Timer jako
podelement requestu „Strona glowna”:
• Strona glowna -> Add -> Timers ->
Synchronizing Timer

• Ustaw blokowanie 3 wątków:
• Synchronizing Timer -> Number of
Simulated Users to Group by: 3

51

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Dodanie Timera Constant Timer
• Constant Timer opóźnia wykonanie
danego requestu o ustaloną ilość
czasu
• W celu wprowadzenia losowego
opóźnienia, użyj Gaussian Random
Timer lub Uniform Random Timer
• Dodaj Constant Timer jako
podelement requestu „Strona
Wyszukiwania”:
• Strona wyszukiwania -> Add -> Timer ->
Constant Timer

• Ustaw opóźnienie na 1 sekundę:
• Constant Timer -> Thread Delay: 1000
• Czas podawany jest w milisekundach
52

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Uruchomienie testu z Timerami
• Uruchom test i obsersuj wyniki
Listenera: View Results Tree:
• Dzięki Timerowi: Synchronizing
Timer request najpierw wykonały się
3 requesty „Strona glowna”
• Przed każdorazowym wykonaniem
requestu „Strona wyszukiwania”
miała miejsce 1-sekundowa pauza

53

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
© 2010 Tieto Corporation

Symulacja
„żywych”
użytkowników
Wstęp
• Zachowanie „żywego” użytkownika nieco różni się od
zachowania nagranego skryptu
• Użytkownik wysyła requesty do serwera w różnych
odstępach czasu, a powtarzane przez niego czynności
prawie nigdy nie są identycznie rozmieszczone w czasie
• „Ręczna” konfiguracja JMetera w celu symulacji „żywego”
użytkownika zajęłaby dużo czasu
• Przy odpowiednim wykorzystaniu dostępnych opcji, można
znacznie zautomatyzować proces symulacji „żywych”
użytkowników

© 2010 Tieto Corporation
Przygotowanie środowiska
• Otwórz nowy projekt i dodaj
oraz skonfiguruj elementy
potrzebne do nagrywania
skryptu
• Opcjonalnie sparametryzuj
skrypt dodając odpowiednie
zmienne
• Ustaw proxy przeglądarki,
aby requesty mogły być
rejestrowane przez JMetera

56

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Dodanie Timera Gaussian Random
Timer
• Gaussian Random Timer
powoduje opóźnienie
wykonania danego requestu o
zdefiniowaną wartość czasu
oraz zdefiniowane odchylenie
standardowe
• Dodaj Guassian Random
Timer jako podelement HTTP
Proxy Server:
• HTTP Proxy Server -> Add ->
Timer -> Gaussian Random Timer

57

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Konfiguracja Gaussian Random
Timer
• Gaussian Random Timer generuje opóźnienie będące
sumą:
• Rozkład normalny (średnia 0.0, odchylenie 1.0) * Deviation (wartość
podana przez użytkownika)
• Stałe opóźnienie (wartość podana przez użytkownika)

• W sekcji „Thread Delay Properties” ustaw następujące
wartości:
• Deviation: 1000
• Constant Delay Offset: ${T}

• T jest zmienną, w której JMeter przechowuje faktyczny czas,
jaki minął od wysłania ostatniego requestu

58

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
• W ten sposób do każdego requestu nagranego przez HTTP
Proxy Server dodawany będzie Gaussian Random Timer z
faktycznym opóźnieniem, jakie miało miejsce podczas
nagrywania, losowo zmodyfikowana o wartość z pola
„Deviation”
59

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
Symulacja żywych użytkowników
• Włącz HTTP Proxy Server i
nagraj przykładowy skrypt
• Zauważ, że do każdego
requestu HTTP dołączany jest
Gaussian Random Timer z taką
wartością Constant Delay Offset,
jaka faktycznie miała miejsce
podczas nagrywania
• Można usunąć lub
zdezaktywować Timer
pierwszego requestu:
• Gaussian Random Timer ->
Remove (Delete)
• Gaussian Random Timer -> Disable
60

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
© 2010 Tieto Corporation

W następnym
odcinku
W następnym odcinku
• JMeter advanced+ – testowanie bazy danych +
wykorzystanie wyrażeń regularnych (RegExp):
• Konfiguracja środowiska bazodanowego na potrzeby testów
• Łączenie się JMetara z bazą danych za pomocą JDBC Connection
Configuration
• Wysyłanie zapytań do bazy danych zapomocą JDBC Request
• Ekstrakcja potrzebnych informacji z wykorzystaniem wyrażeń
regularnych

62

© 2010 Tieto Corporation

Tomasz Stupak

2014-01-24
© 2010 Tieto Corporation

Tomasz Stupak
Senior Test Engineer
Tieto

Weitere ähnliche Inhalte

Was ist angesagt?

Narzedzia zarządzania testowaniem. Badanie SpiraTest
Narzedzia zarządzania testowaniem. Badanie SpiraTestNarzedzia zarządzania testowaniem. Badanie SpiraTest
Narzedzia zarządzania testowaniem. Badanie SpiraTestRadoslaw Smilgin
 
Analiza TestLink - narzędzie do zarzadzania testowaniem
Analiza TestLink - narzędzie do zarzadzania testowaniemAnaliza TestLink - narzędzie do zarzadzania testowaniem
Analiza TestLink - narzędzie do zarzadzania testowaniemRadoslaw Smilgin
 
Narzedzia zarządzania testowaniem.Wyniki.
Narzedzia zarządzania testowaniem.Wyniki.Narzedzia zarządzania testowaniem.Wyniki.
Narzedzia zarządzania testowaniem.Wyniki.Radoslaw Smilgin
 
Narzędzia zarzadzania testowaniem - analiza rynku
Narzędzia zarzadzania testowaniem - analiza rynkuNarzędzia zarzadzania testowaniem - analiza rynku
Narzędzia zarzadzania testowaniem - analiza rynkuRadoslaw Smilgin
 
Interoperability Testing
Interoperability TestingInteroperability Testing
Interoperability Testingkraqa
 
PHP i memcached, zaawansowane przypadki użycia
PHP i memcached, zaawansowane przypadki użyciaPHP i memcached, zaawansowane przypadki użycia
PHP i memcached, zaawansowane przypadki użyciaPHPCon Poland
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Cloudskraqa
 

Was ist angesagt? (8)

Narzedzia zarządzania testowaniem. Badanie SpiraTest
Narzedzia zarządzania testowaniem. Badanie SpiraTestNarzedzia zarządzania testowaniem. Badanie SpiraTest
Narzedzia zarządzania testowaniem. Badanie SpiraTest
 
Benchmarking
Benchmarking Benchmarking
Benchmarking
 
Analiza TestLink - narzędzie do zarzadzania testowaniem
Analiza TestLink - narzędzie do zarzadzania testowaniemAnaliza TestLink - narzędzie do zarzadzania testowaniem
Analiza TestLink - narzędzie do zarzadzania testowaniem
 
Narzedzia zarządzania testowaniem.Wyniki.
Narzedzia zarządzania testowaniem.Wyniki.Narzedzia zarządzania testowaniem.Wyniki.
Narzedzia zarządzania testowaniem.Wyniki.
 
Narzędzia zarzadzania testowaniem - analiza rynku
Narzędzia zarzadzania testowaniem - analiza rynkuNarzędzia zarzadzania testowaniem - analiza rynku
Narzędzia zarzadzania testowaniem - analiza rynku
 
Interoperability Testing
Interoperability TestingInteroperability Testing
Interoperability Testing
 
PHP i memcached, zaawansowane przypadki użycia
PHP i memcached, zaawansowane przypadki użyciaPHP i memcached, zaawansowane przypadki użycia
PHP i memcached, zaawansowane przypadki użycia
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Clouds
 

Andere mochten auch

Implementing DDD with C#
Implementing DDD with C#Implementing DDD with C#
Implementing DDD with C#Pascal Laurin
 
Domain-Driven Design (Artur Trosin Product Stream)
Domain-Driven Design (Artur Trosin Product Stream)Domain-Driven Design (Artur Trosin Product Stream)
Domain-Driven Design (Artur Trosin Product Stream)IT Arena
 
Architecture Principles CodeStock
Architecture Principles CodeStock Architecture Principles CodeStock
Architecture Principles CodeStock Steve Barbour
 
Domain-driven design - tactical patterns
Domain-driven design - tactical patternsDomain-driven design - tactical patterns
Domain-driven design - tactical patternsTom Janssens
 
Domain Driven Design in the Browser - Cameron Edwards
Domain Driven Design in the Browser - Cameron EdwardsDomain Driven Design in the Browser - Cameron Edwards
Domain Driven Design in the Browser - Cameron EdwardsHakka Labs
 
2011 iska - tim m - domain driven design
2011   iska - tim m - domain driven design2011   iska - tim m - domain driven design
2011 iska - tim m - domain driven designTim Mahy
 
Solid principles, Design Patterns, and Domain Driven Design
Solid principles, Design Patterns, and Domain Driven DesignSolid principles, Design Patterns, and Domain Driven Design
Solid principles, Design Patterns, and Domain Driven DesignIrwansyah Irwansyah
 
Why Domain-Driven Design and Reactive Programming?
Why Domain-Driven Design and Reactive Programming?Why Domain-Driven Design and Reactive Programming?
Why Domain-Driven Design and Reactive Programming?VMware Tanzu
 
Domain-Driven Design with ASP.NET MVC
Domain-Driven Design with ASP.NET MVCDomain-Driven Design with ASP.NET MVC
Domain-Driven Design with ASP.NET MVCSteven Smith
 
DDD patterns that were not in the book
DDD patterns that were not in the bookDDD patterns that were not in the book
DDD patterns that were not in the bookCyrille Martraire
 
Beyond design patterns and principles - writing good OO code
Beyond design patterns and principles - writing good OO codeBeyond design patterns and principles - writing good OO code
Beyond design patterns and principles - writing good OO codeMatthias Noback
 
Domain Driven Design Quickly
Domain Driven Design QuicklyDomain Driven Design Quickly
Domain Driven Design QuicklyMariam Hakobyan
 
Principles of microservices velocity
Principles of microservices   velocityPrinciples of microservices   velocity
Principles of microservices velocitySam Newman
 

Andere mochten auch (15)

Implementing DDD with C#
Implementing DDD with C#Implementing DDD with C#
Implementing DDD with C#
 
Domain-Driven Design (Artur Trosin Product Stream)
Domain-Driven Design (Artur Trosin Product Stream)Domain-Driven Design (Artur Trosin Product Stream)
Domain-Driven Design (Artur Trosin Product Stream)
 
Architecting iOS Project
Architecting iOS ProjectArchitecting iOS Project
Architecting iOS Project
 
Architecture Principles CodeStock
Architecture Principles CodeStock Architecture Principles CodeStock
Architecture Principles CodeStock
 
Domain-driven design - tactical patterns
Domain-driven design - tactical patternsDomain-driven design - tactical patterns
Domain-driven design - tactical patterns
 
Domain Driven Design in the Browser - Cameron Edwards
Domain Driven Design in the Browser - Cameron EdwardsDomain Driven Design in the Browser - Cameron Edwards
Domain Driven Design in the Browser - Cameron Edwards
 
2011 iska - tim m - domain driven design
2011   iska - tim m - domain driven design2011   iska - tim m - domain driven design
2011 iska - tim m - domain driven design
 
Solid principles, Design Patterns, and Domain Driven Design
Solid principles, Design Patterns, and Domain Driven DesignSolid principles, Design Patterns, and Domain Driven Design
Solid principles, Design Patterns, and Domain Driven Design
 
Why Domain-Driven Design and Reactive Programming?
Why Domain-Driven Design and Reactive Programming?Why Domain-Driven Design and Reactive Programming?
Why Domain-Driven Design and Reactive Programming?
 
Domain-Driven Design with ASP.NET MVC
Domain-Driven Design with ASP.NET MVCDomain-Driven Design with ASP.NET MVC
Domain-Driven Design with ASP.NET MVC
 
DDD patterns that were not in the book
DDD patterns that were not in the bookDDD patterns that were not in the book
DDD patterns that were not in the book
 
Go-jek's Go-Food Chatbot
Go-jek's Go-Food ChatbotGo-jek's Go-Food Chatbot
Go-jek's Go-Food Chatbot
 
Beyond design patterns and principles - writing good OO code
Beyond design patterns and principles - writing good OO codeBeyond design patterns and principles - writing good OO code
Beyond design patterns and principles - writing good OO code
 
Domain Driven Design Quickly
Domain Driven Design QuicklyDomain Driven Design Quickly
Domain Driven Design Quickly
 
Principles of microservices velocity
Principles of microservices   velocityPrinciples of microservices   velocity
Principles of microservices velocity
 

Ähnlich wie Automation of functional tests using JMeter Part II (in Polish)

Podstawy AngularJS
Podstawy AngularJSPodstawy AngularJS
Podstawy AngularJSSages
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaWojciech Lichota
 
Serwer internetowy w systemie Linux
Serwer internetowy w systemie LinuxSerwer internetowy w systemie Linux
Serwer internetowy w systemie Linuxbm9ib2r5
 
Jak nie narobić sobie problemów korzystając z EntityFramework
Jak nie narobić sobie problemów korzystając z EntityFrameworkJak nie narobić sobie problemów korzystając z EntityFramework
Jak nie narobić sobie problemów korzystając z EntityFrameworkHighWheelSoftware
 
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16Krzysztof Synak
 
Bezstratna kompresja listy przypadków testowych
Bezstratna kompresja listy przypadków testowychBezstratna kompresja listy przypadków testowych
Bezstratna kompresja listy przypadków testowychPiotr Piotrowski
 
4Developers 2015: Procesy biznesowe z perspektywy atakującego - Mateusz Olejarka
4Developers 2015: Procesy biznesowe z perspektywy atakującego - Mateusz Olejarka4Developers 2015: Procesy biznesowe z perspektywy atakującego - Mateusz Olejarka
4Developers 2015: Procesy biznesowe z perspektywy atakującego - Mateusz OlejarkaPROIDEA
 
Procesy biznesowe z perspektywy atakującego
Procesy biznesowe z perspektywy atakującegoProcesy biznesowe z perspektywy atakującego
Procesy biznesowe z perspektywy atakującegoMateusz Olejarka
 
Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!Wojciech Klocek
 
[Quality Meetup #14] Tomasz Kus - Testowanie w pętli
[Quality Meetup #14] Tomasz Kus - Testowanie w pętli[Quality Meetup #14] Tomasz Kus - Testowanie w pętli
[Quality Meetup #14] Tomasz Kus - Testowanie w pętliFuture Processing
 
Krytyczne błędy konfiguracji
Krytyczne błędy konfiguracjiKrytyczne błędy konfiguracji
Krytyczne błędy konfiguracjiLogicaltrust pl
 
HYC - Angular stań się kanciastym
HYC - Angular stań się kanciastymHYC - Angular stań się kanciastym
HYC - Angular stań się kanciastymDariusz Jagieło
 
Jak skrócić czas wykonywania testów integracyjnych?
Jak skrócić czas wykonywania testów integracyjnych?Jak skrócić czas wykonywania testów integracyjnych?
Jak skrócić czas wykonywania testów integracyjnych?Łukasz Zakrzewski
 

Ähnlich wie Automation of functional tests using JMeter Part II (in Polish) (19)

Podstawy AngularJS
Podstawy AngularJSPodstawy AngularJS
Podstawy AngularJS
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użycia
 
[TestWarez 2017] Zen testów wydajnościowych
[TestWarez 2017] Zen testów wydajnościowych[TestWarez 2017] Zen testów wydajnościowych
[TestWarez 2017] Zen testów wydajnościowych
 
PyLadies #3
PyLadies #3PyLadies #3
PyLadies #3
 
Serwer internetowy w systemie Linux
Serwer internetowy w systemie LinuxSerwer internetowy w systemie Linux
Serwer internetowy w systemie Linux
 
Jak nie narobić sobie problemów korzystając z EntityFramework
Jak nie narobić sobie problemów korzystając z EntityFrameworkJak nie narobić sobie problemów korzystając z EntityFramework
Jak nie narobić sobie problemów korzystając z EntityFramework
 
Testowanie na 101 sposobów
Testowanie na 101 sposobówTestowanie na 101 sposobów
Testowanie na 101 sposobów
 
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
 
Licencje flopsar
Licencje flopsarLicencje flopsar
Licencje flopsar
 
Bezstratna kompresja listy przypadków testowych
Bezstratna kompresja listy przypadków testowychBezstratna kompresja listy przypadków testowych
Bezstratna kompresja listy przypadków testowych
 
4Developers 2015: Procesy biznesowe z perspektywy atakującego - Mateusz Olejarka
4Developers 2015: Procesy biznesowe z perspektywy atakującego - Mateusz Olejarka4Developers 2015: Procesy biznesowe z perspektywy atakującego - Mateusz Olejarka
4Developers 2015: Procesy biznesowe z perspektywy atakującego - Mateusz Olejarka
 
Procesy biznesowe z perspektywy atakującego
Procesy biznesowe z perspektywy atakującegoProcesy biznesowe z perspektywy atakującego
Procesy biznesowe z perspektywy atakującego
 
Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!
 
[Quality Meetup #14] Tomasz Kus - Testowanie w pętli
[Quality Meetup #14] Tomasz Kus - Testowanie w pętli[Quality Meetup #14] Tomasz Kus - Testowanie w pętli
[Quality Meetup #14] Tomasz Kus - Testowanie w pętli
 
Monitoring sieci
Monitoring sieciMonitoring sieci
Monitoring sieci
 
Krytyczne błędy konfiguracji
Krytyczne błędy konfiguracjiKrytyczne błędy konfiguracji
Krytyczne błędy konfiguracji
 
Dlaczego flopsar
Dlaczego flopsarDlaczego flopsar
Dlaczego flopsar
 
HYC - Angular stań się kanciastym
HYC - Angular stań się kanciastymHYC - Angular stań się kanciastym
HYC - Angular stań się kanciastym
 
Jak skrócić czas wykonywania testów integracyjnych?
Jak skrócić czas wykonywania testów integracyjnych?Jak skrócić czas wykonywania testów integracyjnych?
Jak skrócić czas wykonywania testów integracyjnych?
 

Mehr von Tieto Corporation

Vad blir nästä steg mot den smarta försäkringsindustrin
Vad blir nästä steg mot den smarta försäkringsindustrinVad blir nästä steg mot den smarta försäkringsindustrin
Vad blir nästä steg mot den smarta försäkringsindustrinTieto Corporation
 
Tieto Future Perspectives Report
Tieto Future Perspectives Report Tieto Future Perspectives Report
Tieto Future Perspectives Report Tieto Corporation
 
How to build a modern cloud environment
How to build a modern cloud environmentHow to build a modern cloud environment
How to build a modern cloud environmentTieto Corporation
 
Smartare affärer genom det bästa från molnet
Smartare affärer genom det bästa från molnetSmartare affärer genom det bästa från molnet
Smartare affärer genom det bästa från molnetTieto Corporation
 
The business value of cloud maturity
The business value of cloud maturityThe business value of cloud maturity
The business value of cloud maturityTieto Corporation
 
Foresight 2020 - Industry trends and scenarios
Foresight 2020 - Industry trends and scenariosForesight 2020 - Industry trends and scenarios
Foresight 2020 - Industry trends and scenariosTieto Corporation
 
Intelligent IoT Gateway on OpenWrt
Intelligent IoT Gateway on OpenWrtIntelligent IoT Gateway on OpenWrt
Intelligent IoT Gateway on OpenWrtTieto Corporation
 
Tieto Retail Experience - How will the retail remain relevant for all of us?
Tieto Retail Experience - How will the retail remain relevant for all of us?Tieto Retail Experience - How will the retail remain relevant for all of us?
Tieto Retail Experience - How will the retail remain relevant for all of us?Tieto Corporation
 
Varautuminen EU-henkilötietosuoja-asetukseen
Varautuminen EU-henkilötietosuoja-asetukseenVarautuminen EU-henkilötietosuoja-asetukseen
Varautuminen EU-henkilötietosuoja-asetukseenTieto Corporation
 
Digitalisaatio Suomen yhteisellä agendalla
Digitalisaatio Suomen yhteisellä agendallaDigitalisaatio Suomen yhteisellä agendalla
Digitalisaatio Suomen yhteisellä agendallaTieto Corporation
 
Hur kan IT användas framgångsrikt i skolan?
Hur kan IT användas framgångsrikt i skolan?Hur kan IT användas framgångsrikt i skolan?
Hur kan IT användas framgångsrikt i skolan?Tieto Corporation
 
Digitally Empowered Customer Experience
Digitally Empowered Customer ExperienceDigitally Empowered Customer Experience
Digitally Empowered Customer ExperienceTieto Corporation
 
10 reasons why the cloud is great for the environment
10 reasons why the cloud is great for the environment10 reasons why the cloud is great for the environment
10 reasons why the cloud is great for the environmentTieto Corporation
 
The digital customer - Design to influence experiences and behaviors
The digital customer - Design to influence experiences and behaviorsThe digital customer - Design to influence experiences and behaviors
The digital customer - Design to influence experiences and behaviorsTieto Corporation
 
The cloud story in an infographic nutshell
The cloud story in an infographic nutshellThe cloud story in an infographic nutshell
The cloud story in an infographic nutshellTieto Corporation
 
Webinarie 2014 11-24 mer tid åt lärandet
Webinarie 2014 11-24 mer tid åt lärandetWebinarie 2014 11-24 mer tid åt lärandet
Webinarie 2014 11-24 mer tid åt lärandetTieto Corporation
 
How to create successful service experience
How to create successful service experienceHow to create successful service experience
How to create successful service experienceTieto Corporation
 
Capital Markets Day 2014- presentation panel, Google and Smart Capital
Capital Markets Day 2014- presentation panel, Google and Smart CapitalCapital Markets Day 2014- presentation panel, Google and Smart Capital
Capital Markets Day 2014- presentation panel, Google and Smart CapitalTieto Corporation
 
Capital Markets Day 2014- presentation Robin Teigland, Stockholm School of Ec...
Capital Markets Day 2014- presentation Robin Teigland, Stockholm School of Ec...Capital Markets Day 2014- presentation Robin Teigland, Stockholm School of Ec...
Capital Markets Day 2014- presentation Robin Teigland, Stockholm School of Ec...Tieto Corporation
 

Mehr von Tieto Corporation (20)

Vad blir nästä steg mot den smarta försäkringsindustrin
Vad blir nästä steg mot den smarta försäkringsindustrinVad blir nästä steg mot den smarta försäkringsindustrin
Vad blir nästä steg mot den smarta försäkringsindustrin
 
Tieto Future Perspectives Report
Tieto Future Perspectives Report Tieto Future Perspectives Report
Tieto Future Perspectives Report
 
How to build a modern cloud environment
How to build a modern cloud environmentHow to build a modern cloud environment
How to build a modern cloud environment
 
Smartare affärer genom det bästa från molnet
Smartare affärer genom det bästa från molnetSmartare affärer genom det bästa från molnet
Smartare affärer genom det bästa från molnet
 
The business value of cloud maturity
The business value of cloud maturityThe business value of cloud maturity
The business value of cloud maturity
 
Foresight 2020 - Industry trends and scenarios
Foresight 2020 - Industry trends and scenariosForesight 2020 - Industry trends and scenarios
Foresight 2020 - Industry trends and scenarios
 
Intelligent IoT Gateway on OpenWrt
Intelligent IoT Gateway on OpenWrtIntelligent IoT Gateway on OpenWrt
Intelligent IoT Gateway on OpenWrt
 
Tieto digitalization story
Tieto digitalization storyTieto digitalization story
Tieto digitalization story
 
Tieto Retail Experience - How will the retail remain relevant for all of us?
Tieto Retail Experience - How will the retail remain relevant for all of us?Tieto Retail Experience - How will the retail remain relevant for all of us?
Tieto Retail Experience - How will the retail remain relevant for all of us?
 
Varautuminen EU-henkilötietosuoja-asetukseen
Varautuminen EU-henkilötietosuoja-asetukseenVarautuminen EU-henkilötietosuoja-asetukseen
Varautuminen EU-henkilötietosuoja-asetukseen
 
Digitalisaatio Suomen yhteisellä agendalla
Digitalisaatio Suomen yhteisellä agendallaDigitalisaatio Suomen yhteisellä agendalla
Digitalisaatio Suomen yhteisellä agendalla
 
Hur kan IT användas framgångsrikt i skolan?
Hur kan IT användas framgångsrikt i skolan?Hur kan IT användas framgångsrikt i skolan?
Hur kan IT användas framgångsrikt i skolan?
 
Digitally Empowered Customer Experience
Digitally Empowered Customer ExperienceDigitally Empowered Customer Experience
Digitally Empowered Customer Experience
 
10 reasons why the cloud is great for the environment
10 reasons why the cloud is great for the environment10 reasons why the cloud is great for the environment
10 reasons why the cloud is great for the environment
 
The digital customer - Design to influence experiences and behaviors
The digital customer - Design to influence experiences and behaviorsThe digital customer - Design to influence experiences and behaviors
The digital customer - Design to influence experiences and behaviors
 
The cloud story in an infographic nutshell
The cloud story in an infographic nutshellThe cloud story in an infographic nutshell
The cloud story in an infographic nutshell
 
Webinarie 2014 11-24 mer tid åt lärandet
Webinarie 2014 11-24 mer tid åt lärandetWebinarie 2014 11-24 mer tid åt lärandet
Webinarie 2014 11-24 mer tid åt lärandet
 
How to create successful service experience
How to create successful service experienceHow to create successful service experience
How to create successful service experience
 
Capital Markets Day 2014- presentation panel, Google and Smart Capital
Capital Markets Day 2014- presentation panel, Google and Smart CapitalCapital Markets Day 2014- presentation panel, Google and Smart Capital
Capital Markets Day 2014- presentation panel, Google and Smart Capital
 
Capital Markets Day 2014- presentation Robin Teigland, Stockholm School of Ec...
Capital Markets Day 2014- presentation Robin Teigland, Stockholm School of Ec...Capital Markets Day 2014- presentation Robin Teigland, Stockholm School of Ec...
Capital Markets Day 2014- presentation Robin Teigland, Stockholm School of Ec...
 

Automation of functional tests using JMeter Part II (in Polish)

  • 1. Automatyzacja testów funkcjonalnych © 2010 Tieto Corporation z wykorzystaniem narzędzia JMeter, CZĘŚĆ II Tomasz Stupak Senior Test Engineer Tieto
  • 2. Spis Treści • Wstęp • • 4 5 Przygotowanie środowiska Konfiguracja HTTP Request Defaults Konfiguracja HTTP Proxy Server Konfiguracja przeglądarki Start serwera proxy Nagrywanie skryptu Nagrany skrypt Odtwarzanie nagranego skryptu Wyniki testu 6 7 8 9 10 11 12 13 14 Parametryzacja testu • • • • • • • • • • 2 JMeter advanced Nagrywanie skryptu • • • • • • • • • • 3 15 Sposoby tworzenia zmiennych Parametryzacja nazwy serwera Zastąpienie nazwy serwera zmienną Parametryzacja szukanej frazy Zastąpienie szukanej frazy zmienną Uruchamianie sparametryzowanego testu Zmiana wartości zmiennej Wskazówka Wskazówka – UWAGA! Wskazówka - rozwiązanie © 2010 Tieto Corporation Tomasz Stupak 16 17 18 19 20 21 22 23 24 25 2014-01-24
  • 3. Spis Treści • Wykorzystanie asercji • • • • • • • • • • 27 28 30 31 32 33 34 35 36 38 Wstęp Dodawanie Kontrolerów Logicznych Dodanie Kontrolera Once Only Controller Dodanie Kontrolera Interleave Controller Dodanie Kontrolera Loop Controller Dodanie Kontrolera If Controller Uruchomienie testu z Kontrolerami Logicznymi 39 40 41 42 43 44 45 Wykorzystanie Timerów • • • • • 3 Wstęp Dodanie asercji Response Assertion Konfiguracja Response Assertion Size Assertion Konfiguracja Size Assertion Duration Assertion Konfiguracja Durtion Assertion Uruchomienie testu z asercjami Wykorzystanie Kontrolerów Logicznych • • • • • • • • 26 46 Wstęp Dodawanie Timerów Dodanie Timera Synchronizing Timer Dodanie Timera Constant Timer Uruchomienie testu z Timerami © 2010 Tieto Corporation Tomasz Stupak 47 48 49 50 51 2014-01-24
  • 4. Spis Treści • Symulacja „żywych” użytkowników • • • • • • Wstęp Przygotowanie środowiska Dodanie Timera Gaussian Random Timer Konfiguracja Gaussian Random Timer Symulacja żywych użytkowników 53 54 55 56 58 W następnym odcinku • 4 52 59 W następnym odcinku © 2010 Tieto Corporation 60 Tomasz Stupak 2014-01-24
  • 5. © 2010 Tieto Corporation Wstęp T 5 omasz Stupak 2014-01-24
  • 6. JMeter advanced • Wykorzytanie bardziej skomplikowanych elementów aplikacji: • Nagrywanie skryptów za pomocą elementu HTTP Proxy Server • Parametryzacja testu • Użycie asercji • Użycie Logic Controllers • Użycie Timerów • Symulacja „żywych” użytkowników 6 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 7. © 2010 Tieto Corporation Nagrywanie skryptu T 7 omasz Stupak 2014-01-24
  • 8. Przygotowanie środowiska • Utwórz nowy projekt i dodaj następujące elementy: • Thread Group do Test Planu • HTTP Proxy Server (Non-Test Elements) do WorkBench • Dodaj do Thread Group następujące elementy: • • • • 8 HTTP Request Defaults (Config Element) HTTP Cookie Manager (Config Element) Recording Controller (Logic Controller) View Results Tree (Listener) © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 9. Konfiguracja HTTP Request Defaults • Web Server -> Server Name or IP: • bash.org.pl 9 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 10. Konfiguracja HTTP Proxy Server • Test plan content -> Target Controller: • Use Recording Controller • Test plan content -> Grouping: • Store 1st sampler of each group only 10 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 11. Konfiguracja przeglądarki • W tym przykładzie użyto przeglądarki Mozilla Firefox • Narzędzia -> Opcje -> Zaawansowane -> Sieć -> Ustawienia • Ręczna konfiguracja serwerów proxy • Serwer proxy HTTP: Localhost • Port: 8080 11 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 12. Start serwera proxy • HTTP Proxy Server -> Start • JMeter będzie przechwytywał ruch HTTP z przeglądarki • Port nasłuchu można zmienić w ustawieniach HTTP Proxy Server (pole Port) • Po zakończeniu nagrywania naciśnij Stop oraz przywróć poprzednie ustawienia w przeglądarce • JMeter domyślnie potrzebuje 1000 ms (1s) przerwy między poszczególnymi „kliknięciami” 12 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 13. Nagrywanie skryptu • Otwórz w przeglądarce stronę http://www.bash.org.pl • Pod Recording Controller pojawił się HTTP Request • W celu większej przejrzystości skryptu zmień nazwę samplera np. na „Strona glowna” • • • • Kliknij link „najnowsze” Kliknij link „losowe” Kliknij link „szukaj” W pole wyszukiwania wpisz np. „mazowsze” i naciśnij „szukaj” • Zatrzymaj serwer proxy • Nadaj requestom przejrzyste nazwy • Zapisz skrypt 13 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 14. Nagrany skrypt • Nagrany skrypt powinien wyglądać tak: 14 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 15. Odtwarzanie nagranego skryptu • Start testu: • Run -> Start • CTRL+R • Stop testu: • Run -> Stop • CTRL+. • Wyczyszczenie wyników • Run -> Clear All • CTRL+E 15 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 16. Wyniki testu 16 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 17. © 2010 Tieto Corporation Parametryzacja testu
  • 18. Sposoby tworzenia zmiennych • Test Plan - > User Defined Variables • Zmienne globalne dla całego Test Planu • Thread Group -> Add -> Config Elements -> User Defined Variables • Zmienne lokalne dla danego wątku 18 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 19. Parametryzacja nazwy serwera • Test Plan -> User Defined Variables -> Add • Name: host • Value: bash.org.pl 19 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 20. Zastąpienie nazwy serwera zmienną • Thread Group -> HTTP Request Defaults • Wartość pola „Server Name or IP” zastąp wartością zmiennej host • Stosuje się notację ${NAZWA_ZMIENNEJ} • Przydatne np. w przypadku zapewnienia szybkiej przenaszalności skryptu z serwera testowego na serwer produkcyjny 20 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 21. Parametryzacja szukanej frazy • Test Plan -> User Defined Variables -> Add • Name: search • Value: mazowsze 21 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 22. Zastąpienie szukanej frazy zmienną • Thread Group -> Recording Controller -> Szukaj (HTTP Request) -> Send Parameters With the Request • Wartość parametru q zastąp wartością zmiennej search: 22 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 23. Uruchamianie sparametryzowanego testu • Wyczyść wyniki poprzedniego testu (jeśli to konieczne) • Run -> Clear All (CTRL+E) • Uruchom sparametryzowany test: • Run -> Start (CTRL+R) • Sprawdź wyniki requestu wyszukiwania frazy: • View Results Tree -> Szukaj -> Request • Nazwa serwera oraz wartość parametru q powinny zostać prawidłowo pobrane z użytych zmiennych • View Results Tree -> Szukaj -> Response data (zmień na HTML) • Powinna zostać pobrana odpowiednia strona 23 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 24. Zmiana wartości zmiennej • Zmień wartość zmiennej serach np. na „do sadu”: • W przypadku problemów z kodowaniem znaków, użyj „%20” zamiast znaku spacji („do%20sadu”) • Uruchom test i sprawdź wyniki requestu wyszukiwania frazy 24 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 25. Wskazówka • Przed nagraniem skryptu dodaj zmienną z wartością wyszukiwanej frazy • Nagraj skrypt wpisując w pole wyszukiwania wartość zdefiniowanej wcześniej zmiennej • Wartość parametru q powinna automatycznie przybrać postać zdefiniowanej wcześniej zmiennej 25 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 26. Wskazówka – UWAGA! • Serwer Proxy szuka wszystkich wystąpień wartości danej zmiennej i zmienia je • Może to doprowadzić do niepożądanej sytuacji: • Dodaj zmienną o dowolnej nazwie i wartości search • Nagraj skrypt wpisując w pole wyszukiwania „search” • Wartość zmiennej została wpisana także do ścieżki 26 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 27. Wskazówka - rozwiązanie • HTTP Proxy Server -> Test plan content • Zaznacz „Regex matching” • Serwer proxy będzie traktorał zmienne jako wyrażenia regularne • Wykorzystując wyrażenia regularne, sprecyzuj które występowania powinny być zastępowane zmienną • ^search$ • Serwer proxy będzie zastępował tylko pojedyncze stringi „search” • Nie będzie zastępował np. „/search/”, używanego w ścieżce • Przed odtworzeniem nagranego skryptu, przywróć wartość zmiennej do poprzedniego stanu 27 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 28. © 2010 Tieto Corporation Wykorzystanie asercji Tomasz Stupak 28 2014-01-24
  • 29. Wstęp • Asercje służą do dodatkowego sprawdzania poprawności wyników, zwracanych przez requesty • Przetwarzane są po każdym requeście w danym zakresie • Aby asercja stosowana była do jednego requestu, dodaj ją jako jego podelement • Asercje domyślnie stosowane są do requestu głównego, a nie jego podelementów • Można to zmienić w seksji „Apply to” • Błędne wyniki asercji powodują pojawienie się błędu dla danego requestu • W celu monitorowania błędów asersji można też użyć Listenera: Assertion Results © 2010 Tieto Corporation
  • 30. Dodanie asercji • W nagranym wcześniej skrypcie dodaj asercje do requestu wyszukiwania frazy: • Thread Group -> Szukaj -> Add -> Assertions • Dodaj następujące asercje: • Response Assertion • Size Assertion • Duration Assertion • Do Thread Group dodaj teże Listener: Assertion Results: • Thread Gruop -> Add -> Listeners -> Assertion Results 30 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 31. 31 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 32. Response Assertion • Porównuje wybraną część odpowiedzi na request ze zdefiniowanym wzorce w wybrany sposób. • Sekcja „Apply to” pozwala określić do których requestów odnosi się dana asercja (głównego, czy także podelementów) • Sekcja „Response Field to Test” pozwala określić do jakiej części odpowiedzi odnosi się dana asercja • Sekcja „Pattern Matching Rules” określa sposób, w jaki dany wzorzec jest porównywany: • Contains / Matches – wzorzec traktowany jest jako wyrażenie regularne • Equals / Substring – wzorzec traktowany jest jako tekst • Sekcja „Patterns to Test” definiuje wzorce do porównania 32 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 33. Konfiguracja Response Assertion • Patterns to Test -> Add • Dodaj wzorzec, który będzie sprawdzany w odpowiedzi requestu 33 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 34. Size Assertion • Sprawdza, czy odpowiedź na request zajmuje odpowiednią ilość bajtów • Sekcja „Apply to” pozwala określić do których requestów odnosi się dana asercja (głównego, czy także podelementów) • Sekcja „Size to Assert” określa rozmiar oraz sposób porównania: • • • • 34 Równe Różne Większe (lub równe) Mniejsze (lub równe) © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 35. Konfiguracja Size Assertion • W pole „Size in bytes” wpisz przykładową ilość bajtów • W „Type of Comparison” wybierz „>” 35 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 36. Duration Assertion • Sprawdza, czy odpowiedź na request pojawiła się przed upłynięciem podanego czasu • Sekcja „Apply to” pozwala określić do których requestów odnosi się dana asercja (głównego, czy także podelementów) • Jeśli odpowiedź pojawi się po upłynięciu podanego czasu, zwracany jest błąd • Czas podawany jest w milisekundach 36 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 37. Konfiguracja Durtion Assertion • W pole „Duration in milliseconds” wpisz przykładowy czas 37 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 38. Uruchomienie testu z asercjami • Wyczyść wyniki poprzedniego testu (jeśli to konieczne) • Run -> Clear All (CTRL+E) • Uruchom sparametryzowany test: • Run -> Start (CTRL+R) • Sprawdź wyniki requestu wyszukiwania frazy: • View Results Tree -> Szukaj • W tym przykładzie wszystkie asercje powinny zwrócić błąd • Sprawdź wyniki Listenera: Assertion Results • Dla requestu wyszukiwania frazy powinny być zwrócone błędy asercji 38 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 39. Zawartość Listenerów: • View Results Tree (po lewej) • Assertion Results (poniżej) • Zmień parametry asercji i po ponownym uruchomieniu skryptu obserwuj wyniki 39 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 40. © 2010 Tieto Corporation Wykorzystanie Kontrolerów Logicznych Tomasz Stupak 40 2014-01-24
  • 41. Wstęp • Kontrolery Logiczne określają logikę decydującą o tym, kiedy wysłać request • Mogą zmienić kolejność wykonywania requestów • Mogą modyfikować requesty • Mogą powodować powtórzenie wykonania requestów • Można je łączyć w celu uzyskania danych rezultatów 41 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 42. Dodawanie Kontrolerów Logicznych • Istnieją dwa sposoby dodawania Kontrolerów Logicznych • Dodawanie pustego Kontrolera Logicznego i umieszczenie Samplerów jako jego podelementy • Dodanie Kontrolera Logicznego jako rodzica danego Samplera • Thread Group -> Add -> Logic Controller • Po dodaniu Kontrolera Logicznego, można umieszczać Samplery jako jego podelementy • Sampler -> Insert Parent -> Logic Controller • Kontroler Logiczny zostanie dodany jako rodzic danego Samplera • W poprzednich przykładach użyty został jeden Kontroler Logiczny: • Recording Controller 42 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 43. Dodanie Kontrolera Once Only Controller • Once Only Controller sprawia, że jego podelementy uruchamiane są tylko przy pierwszej iteracji testu • Dodaj Once Only Controller jako rodzica requestu „Strona glowna”: • Strona glowna -> Insert Parent -> Once Only Controller • Ustaw liczbę iteracji wątku na 3 • Thread Group -> Loop Count: 3 43 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 44. Dodanie Kontrolera Interleave Controller • Interleave Controller sprawia, że jego podelementy uruchamiane są naprzemiennie co każdą iterację (kolejno) • Dodaj Interleave Controller jako rodzica requestów „Najnowsze” i „Losowe” • Najnowsze -> Insert Parent -> Interleave Controller • Metodą „przenieś i upuść” dodaj request „Losowe” jako podelement Kontrolera Interleave Controller (Add as Child) • Podobnie działa Random Controller (uruchamia losowo) 44 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 45. Dodanie Kontrolera Loop Controller • Loop Controller uruchamia podelementy daną ilość razy w ramach danej iteracji • Dodaj Loop Controller jako rodzica requestu „Strona wyszukiwania” i ustaw liczbę iteracji na 2 • Strona wyszukiwania -> Insert Parent -> Loop Controller • Loop Controller -> Loop Count: 2 45 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 46. Dodanie Kontrolera If Controller • If Controller decyduje, czy jego podelementy mają być uruchomione, czy nie • Dodaj If Controller jako rodzica requestu „Szukaj” i ustaw warunek uruchomienia, jeżeli zmienna search ma wartość „test”: • Szukaj -> Insert Parent -> If Controller • If Controller -> Condition: "${search}" == "test" 46 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 47. Uruchomienie testu z Kontrolerami Logicznymi • Uruchom test i sprawdź wyniki Listenera: View Results Tree: • Request „Strona glowna” wykonał się tylko w pierwszej iteracji • Requesty „Najnowsze” i „Losowe” wykonywały się naprzemiennie co iterację • Request „Strona wyszukiwania” wykonał się dwukrotnie co daną iterację • Request „Szukaj” nie wykonał się, ponieważ warunek nie został spełniony 47 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 48. © 2010 Tieto Corporation Wykorzystanie Timerów Tomasz Stupak 48 2014-01-24
  • 49. Wstęp • Timery używane są do tworzenia przerw między wykonywaniem requestów • Domyślnie JMeter wysyła requesty bez przerw, co może spowodować przeciążenie serwera • Gdy użyty jest więcej niż jeden Timer, JMeter sumuje ich wartości • Dodawane jako podelementy Samplerów lub Kontrolerów • Timery przetwarzane są przed danym Samplerem • Timery, które nie są przydzielone do Samplera, nie są przetwarzane w ogóle © 2010 Tieto Corporation
  • 50. Dodawanie Timerów • Aby przydzielić Timer do danego Samplera, dodaj go jako jego podelement: • Sampler -> Add -> Timer • Timer będzie przetwarzany przed danym Samplerem • Aby uruchomić Timer po danym Samplerze, dodaj go do następnego Samplera 50 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 51. Dodanie Timera Synchronizing Timer • Synchronizing Timer blokuje wątki, do czasu aż określona liczba wątków zostanie zablokowana, po czym wznawia je jednocześnie • Ustaw liczbę wątków na 3 • Thread Group -> Number of Threads: 3 • Dodaj Synchronizing Timer jako podelement requestu „Strona glowna”: • Strona glowna -> Add -> Timers -> Synchronizing Timer • Ustaw blokowanie 3 wątków: • Synchronizing Timer -> Number of Simulated Users to Group by: 3 51 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 52. Dodanie Timera Constant Timer • Constant Timer opóźnia wykonanie danego requestu o ustaloną ilość czasu • W celu wprowadzenia losowego opóźnienia, użyj Gaussian Random Timer lub Uniform Random Timer • Dodaj Constant Timer jako podelement requestu „Strona Wyszukiwania”: • Strona wyszukiwania -> Add -> Timer -> Constant Timer • Ustaw opóźnienie na 1 sekundę: • Constant Timer -> Thread Delay: 1000 • Czas podawany jest w milisekundach 52 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 53. Uruchomienie testu z Timerami • Uruchom test i obsersuj wyniki Listenera: View Results Tree: • Dzięki Timerowi: Synchronizing Timer request najpierw wykonały się 3 requesty „Strona glowna” • Przed każdorazowym wykonaniem requestu „Strona wyszukiwania” miała miejsce 1-sekundowa pauza 53 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 54. © 2010 Tieto Corporation Symulacja „żywych” użytkowników
  • 55. Wstęp • Zachowanie „żywego” użytkownika nieco różni się od zachowania nagranego skryptu • Użytkownik wysyła requesty do serwera w różnych odstępach czasu, a powtarzane przez niego czynności prawie nigdy nie są identycznie rozmieszczone w czasie • „Ręczna” konfiguracja JMetera w celu symulacji „żywego” użytkownika zajęłaby dużo czasu • Przy odpowiednim wykorzystaniu dostępnych opcji, można znacznie zautomatyzować proces symulacji „żywych” użytkowników © 2010 Tieto Corporation
  • 56. Przygotowanie środowiska • Otwórz nowy projekt i dodaj oraz skonfiguruj elementy potrzebne do nagrywania skryptu • Opcjonalnie sparametryzuj skrypt dodając odpowiednie zmienne • Ustaw proxy przeglądarki, aby requesty mogły być rejestrowane przez JMetera 56 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 57. Dodanie Timera Gaussian Random Timer • Gaussian Random Timer powoduje opóźnienie wykonania danego requestu o zdefiniowaną wartość czasu oraz zdefiniowane odchylenie standardowe • Dodaj Guassian Random Timer jako podelement HTTP Proxy Server: • HTTP Proxy Server -> Add -> Timer -> Gaussian Random Timer 57 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 58. Konfiguracja Gaussian Random Timer • Gaussian Random Timer generuje opóźnienie będące sumą: • Rozkład normalny (średnia 0.0, odchylenie 1.0) * Deviation (wartość podana przez użytkownika) • Stałe opóźnienie (wartość podana przez użytkownika) • W sekcji „Thread Delay Properties” ustaw następujące wartości: • Deviation: 1000 • Constant Delay Offset: ${T} • T jest zmienną, w której JMeter przechowuje faktyczny czas, jaki minął od wysłania ostatniego requestu 58 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 59. • W ten sposób do każdego requestu nagranego przez HTTP Proxy Server dodawany będzie Gaussian Random Timer z faktycznym opóźnieniem, jakie miało miejsce podczas nagrywania, losowo zmodyfikowana o wartość z pola „Deviation” 59 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 60. Symulacja żywych użytkowników • Włącz HTTP Proxy Server i nagraj przykładowy skrypt • Zauważ, że do każdego requestu HTTP dołączany jest Gaussian Random Timer z taką wartością Constant Delay Offset, jaka faktycznie miała miejsce podczas nagrywania • Można usunąć lub zdezaktywować Timer pierwszego requestu: • Gaussian Random Timer -> Remove (Delete) • Gaussian Random Timer -> Disable 60 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 61. © 2010 Tieto Corporation W następnym odcinku
  • 62. W następnym odcinku • JMeter advanced+ – testowanie bazy danych + wykorzystanie wyrażeń regularnych (RegExp): • Konfiguracja środowiska bazodanowego na potrzeby testów • Łączenie się JMetara z bazą danych za pomocą JDBC Connection Configuration • Wysyłanie zapytań do bazy danych zapomocą JDBC Request • Ekstrakcja potrzebnych informacji z wykorzystaniem wyrażeń regularnych 62 © 2010 Tieto Corporation Tomasz Stupak 2014-01-24
  • 63. © 2010 Tieto Corporation Tomasz Stupak Senior Test Engineer Tieto