Z uwagi na zakres niniejszej pracy pominięto takie zagadnienia jak budżet, zasoby ludzkie itp. Plan testów zawiera podstawowe informacje o testowanej aplikacji oraz opis wszystkich działań związanych z testowaniem na poziomie pojedynczego projektu. Do celów tego projektu wybrano szablon planu testów zaproponowany w książce "Praktyka testowania" autorstwa Radosława Smilgina. Plan ten został jednak dopasowany do potrzeb wykonania testów wydajności. Dodatkowo został on rozszerzony o wymagania biznesowe stanowiące podstawę do definiowania akceptowalnych progów wydajnościowych.
Plan testów jest kluczowym dokumentem dla każdego działania testowego ze względu na zbiór założeń do testów oraz planowanych działań testowych. Jego zapisy są następnie realizowane, a efektywność w osiągnięciu celów jest weryfikowane na poziomie raportów z przeprowadzonych testów.
Założenia projektu
Głównym celem projektu jest pokazanie jak zmierzyć wydajność API przykładowej aplikacji internetowej typu open-source jaką jest "Restful-booker".
Aby zmierzyć wydajność zaproponowanego API stworzono przypadki testowe, które określają jakie elementy podlegają testom. Jest to zbiór, który powstał po analizie testowanego oprogramowania. Liczba przypadków testowych oraz wybrane funkcjonalności poddane weryfikacji wynikają ze zdefiniowanych zadań w planie testów. Typy testów wydajności oraz liczba użytkowników dociążających aplikację określono w celach testowania w planie testów.
REST API będzie poddawane zmiennym obciążeniom wraz z monitorowaniem następujących parametrów:
- czas odpowiedzi w milisekundach (ms),
- średni czas odpowiedzi serwera w ms,
- kody odpowiedzi HTTP z serwera z informacją o sukcesie lub błędzie,
- informacje o zużyciu zasobów sprzętowych serwera,
- APDEX - wskaźnik satysfakcji klienta,
- próg tolerancji 500ms,
- próg frustracji 1500ms.
Analiza testowanego oprogramowania
Testy przeprowadzono na aplikacji open source "Restful-Booker", która została wybrana ze względu na to, że realizuje podstawowe operacje CRUD (ang. Create Read Update Delete), czyli podstawowe operacje tworzenia, odczytu, aktualizacji i usuwania danych stosowane w aplikacjach. Wybór takiego systemu umożliwia zademonstrowanie szeregu różnych funkcjonalności i ich zachowania podczas generowanego obciążenia podczas testów wydajności. Założeniem analizy przeprowadzonej na potrzeby pracy dyplomowej jest określenie czy aplikacja oprócz problemów funkcjonalnych ma również problemy wydajnościowe. Opis komponentów i funkcjonalności do przetestowania przedstawiono w tab. 1.
L.p. | Komponent | Funkcje | Endpoint |
1 | Autoryzacja |
|
|
2 | Pobranie informacji o istniejących rezerwacjach |
|
|
3 | Tworzenie rezerwacji |
|
|
4 | Aktualizacja rezerwacji |
|
|
5 | Usunięcie rezerwacji |
|
|
Pełna dokumentacja API dostępna jest pod adresem https://restful-booker.herokuapp.com/apidoc/index.html.
W celu instalacji oprogramowania wykonano następujące kroki na instancji 2 (nazewnictwo według rys. 8):
- Sklonowano repozytorium aplikacji restful-booker
- Z lokalizacji sklonowanego repozytorium restful-booker zainstalowano aplikację wpisując polecenie:
- docker-compose build
- docker-compose up
- Po operacji instalacji, API jest dostępne pod adresem: http://localhost:3001.
Plan testów
W celu usystematyzowania poszczególnych kroków wykonywanych w ramach testów a także uzyskanych wyników sporządzono plan testów, który przedstawiono w tab. 2. Sporządzony został w oparciu o literaturę.
PLAN TESTÓW | |
Autor: Michał Zacharuk | Wersja dokumentu: 1.0 |
Data: 10.02.2021 | |
Aplikacja. Nazwa i link: Restful-booker https://restful-booker.herokuapp.com/ |
|
Cele testowania: [co jest do zrealizowania] | Środowiska: [w jakich środowiskach przeprowadzono testy] |
celem zmierzenia jakości produktu pod kątem wydajności oprogramowania. | Dwie stacje robocze: master i slave |
przeprowadzenie rozproszonych testów linii podstawowej dla 10 jednoczesnych użytkowników wraz z przedstawieniem i analizą wyników | Parametry stacji master (instancja 1):
|
przeprowadzenie rozproszonych testów obciążeniowych dla 30 jednoczesnych użytkowników wraz z przedstawieniem i analizą wyników | |
przeprowadzenie rozproszonych testów przeciążeniowych dla 100 jednoczesnych użytkowników wraz z przedstawieniem i analizą wyników | Parametry stacji slave (instancja 2):
|
Zadania | |
Zadanie | Czas realizacji [w minutach] |
konfiguracja środowiska | 360 |
stworzenie przypadków testowych pokrywających podstawowe funkcjonalności: wyszukanie rezerwacji, stworzenie rezerwacji, aktualizacja rezerwacji, usunięcie rezerwacji | 120 |
implementacja testów w narzędziu JMeter | 360 |
uruchomienie serii testów: linii podstawowej, obciążeniowych, przeciążeniowych | 360 |
zbieranie i analiza wyników | 360 |
wydanie rekomendacji odnośnie potencjalnego wdrożenia aplikacji na produkcję | 60 |
Kryteria oceny jakości Jeśli wymienione kryteria zostaną spełnione, to testowaną aplikację uznać można za oprogramowanie o wysokiej jakości. |
|
czas odpowiedzi serwera dla pojedynczych żądań nie większy niż 1500ms dla 10 jednoczesnych użytkowników | |
czas odpowiedzi serwera dla pojedynczych żądań nie większy niż 1500ms dla 30 jednoczesnych użytkowników | |
średni czas odpowiedzi serwera dla wszystkich żądań nie większy niż 1500ms dla 30 jednoczesnych użytkowników | |
zużycie zasobów sprzętowych (CPU) serwera nie przekracza 80% dla 10 jednoczesnych użytkowników | |
zużycie zasobów sprzętowych (CPU) serwera nie przekracza 80% dla 30 jednoczesnych użytkowników | |
kody odpowiedzi HTTP zwracają informację o sukcesie dla 30 jednoczesnych użytkowników |
Rodzaje testów
W ramach pracy wykonane zostaną następujące testy wydajności:
- testy linii podstawowej,
- testy obciążające,
- testy przeciążające.
Przyjęte metryki testów
Poniżej przedstawiono przyjęte metryki jakości testowanego oprogramowania, na podstawie których zostanie przeprowadzona analiza i ocena wydajności systemu.
- Czas odpowiedzi serwera dla wszystkich rodzajów przeprowadzonych testów
- Średni czas odpowiedzi serwera
- Wyniki zaplanowanych testów – asercji z informacją o sukcesie lub błędzie
- Kody odpowiedzi HTTP
- Informacje o zużyciu zasobów sprzętowych:
- Zużycie procesora
Przypadki testowe
Do wykonania testów wydajności przygotowano następujące przypadki testowe, które zostały zdefiniowane w planie testów:
- wyszukaj rezerwację przedstawiono w tab. 3,
- stwórz rezerwację przedstawiono w tab. 4,
- usuń rezerwację przedstawiono w tab. 5,
- zaktualizuj rezerwację przedstawiono w tab. 6.
Tab. 3 Przypadek Testowy 1 - Wyszukaj rezerwację
Tab. 4 Przypadek Testowy 2 – Utwórz rezerwację
Tab. 5 Przypadek Testowy 3 – Usuń rezerwację
Tab. 6 Przypadek Testowy 4 – Zaktualizuj rezerwację
Uruchomienie testów
W celu uruchomienia przygotowanych testów wydajności w trybie CLI (ang. Command line) w wierszu poleceń / konsoli powershell należy uruchomić polecenie: jmeter -n -t <test JMX file> -l <test log file> -e -o <Path to output folder>
- -n – parameter oznaczający uruchomienie JMetera w trybie CLI (ang. Command line),
- -t – wskazanie ścieżki do pliku .jmx, czyli zapisanego wcześniej stworzonego planu testów,
- -l – wskazanie miejsca zapisu pliku raportu z testów w formacie .csv,
- -e – parametr mówiący o wygenerowaniu raportu HTML po wykonaniu testów,
- -o – wskazanie katalogu do zapisu raportu w formacie HTML.
Po wykonaniu testów we wskazanym katalogu w poleceniu powershell po parametrze -o <Path to output folder> dostępny jest raport z testów, który zawiera wszelkie informacje potrzebne do analizy i oceny wyników.
Raport jest zapisywany w formacie .html dzięki czemu jest łatwo dostępny i estetyczny w przeglądaniu. Ma to znaczenie w profesjonalnym zastosowaniu testów wydajności, gdyż można wtedy w szybki sposób i bez dodatkowej obróbki pokazać raport wszystkim interesariuszom. W niniejszej pracy raport z testów zostanie przedstawiony w formie tabel, zawierających wcześniej opisane metryki jakości wraz z analizą wyników.
Część drugą pracy znajdziesz tutaj.
*) Od autora pracy:
"Z niniejszej publikacji usunięto wstęp związany ściśle z zagadnieniem samego testowania oprogramowania. Nacisk tej publikacji skierowany jest na testy wydajności wraz ze sprawozdaniem z przebiegu wykonania tych prac. Pomysł na temat obrony dyplomu i publikacji tego artykułu był prosty – ja jako autor chciałem nauczyć się nowej umiejętności w moim testerskim przyborniku, a z wami czytelnikami chciałem podzielić się efektem mojej kilkumiesięcznej pracy, na którą złożyła się nauka testowania wydajności od zupełnych podstaw, przez implementację rozwiązania w JMeter, a także stworzenie raportu. Cel został osiągnięty poprzez znalezienie wielu źródeł w postaci teorii testowania wydajności, a przede wszystkim znalezieniu informacji na temat dobrych praktyk i przykładów jak zaplanować i wykonać tego typu testy. Puentą jest to, jak to w projekcie informatycznym, czyli dostarczenie pewnej wartości w postaci przeprowadzenia i wykonaniem testów wydajności wraz z raportem i wnioskami. Z perspektywy czasu wiele rzeczy bym zmienił, natomiast myślę, że ten artykuł może komuś jeszcze posłuży."
*) Publikacja ta jest skróconą wersją pracy dyplomowej.
Autor: Michał Zacharuk
Tytuł pracy: "Testowanie wydajności API w środowisku rozproszonym"
Uczelnia: Politechnika Łódzka, Wydział Elektrotechniki, Elektroniki, Informatyki i Automatyki
Instytut Informatyki Stosowanej
Opis: Przedstawienie i rozwiązanie problemu testowania wydajności aplikacji internetowej opartej na REST API w środowisku rozproszonym. Skrócona wersja pracy dyplomowej.