Testowanie wydajności API w środowisku rozproszonym. Część 3. Przygotowanie do wykonania testów wydajności

Testowanie wydajności API w środowisku rozproszonym. Część 3. Przygotowanie do wykonania testów wydajności
W ramach przygotowania do wykonania części technicznej testów wydajności zgodnie z metodyką testowania oprogramowania warto stworzyć dokument prowadzenia testów bazujący na planie testów.

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.

Tab. 1 Lista funkcjonalności aplikacji "Restful-Booker"
L.p. Komponent Funkcje Endpoint
1 Autoryzacja
  • Stworzenie unikalnego tokena wymaganego do autoryzacji
  • POST 
    http://localhost:3001/auth
2 Pobranie informacji o istniejących rezerwacjach
  • Pobranie wszystkich rezerwacji
  • Pobranie rezerwacji na podstawie unikalnego numeru id
  • GET 
    http://localhost:3001 /booking
  • GET 
    http://localhost:3001 /booking/:id
3 Tworzenie rezerwacji
  • Stworzenie rezerwacji na podstawie przekazanych danych wejściowych
  • POST 
    http://localhost:3001/booking
4 Aktualizacja rezerwacji
  • Aktualizacja rezerwacji o wskazanym numerze id na podstawie danych wejściowych
  • Możliwość częściowej aktualizacji rezerwacji na podstawie podanych danych wejściowych
  • POST 
    http://localhost:3001/booking/:id
  • PATCH 
    http://localhost:3001/booking/:id
5 Usunięcie rezerwacji
  • Usuwanie rezerwacji na podstawie wskazanego numeru id
  • DELETE 
    http://localhost:3001/booking/:id

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): 

  1. Sklonowano repozytorium aplikacji restful-booker
    1. Git clone https://github.com/mwinteringham/restful-booker.git
  2. Z lokalizacji sklonowanego repozytorium restful-booker zainstalowano aplikację wpisując polecenie: 
    1. docker-compose build
    2. docker-compose up
  3. 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ę.

Tab. 2 Sporządzony plan testów
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): 
  • Windows 10 64bit
  • 16GB RAM
Intel Core i5-10310U CPU @ 1.70GHz 2.21GHz
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):
  • Windows 10 64 bit
  • 8GB RAM
Intel Core i7-4720HQ CPU @ 2.60 GHz 2.60GHz
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. 

  1. Czas odpowiedzi serwera dla wszystkich rodzajów przeprowadzonych testów
  2. Średni czas odpowiedzi serwera
  3. Wyniki zaplanowanych testów – asercji z informacją o sukcesie lub błędzie
  4. Kody odpowiedzi HTTP
  5. Informacje o zużyciu zasobów sprzętowych:
    1. 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:  

  1. wyszukaj rezerwację przedstawiono w tab. 3,
  2. stwórz rezerwację przedstawiono w tab. 4,
  3. usuń rezerwację przedstawiono w tab. 5,
  4. zaktualizuj rezerwację przedstawiono w tab. 6.

Tab. 3 Przypadek Testowy 1 - Wyszukaj rezerwację

testowanie-wydajności-api-tabela-3.png

Tab. 4 Przypadek Testowy 2 – Utwórz rezerwację

testowanie-wydajności-api-tabela-4.png

Tab. 5 Przypadek Testowy 3 – Usuń rezerwację

testowanie-wydajności-api-tabela-5.png

Tab. 6 Przypadek Testowy 4 – Zaktualizuj rezerwację

testowanie-wydajności-api-tabela-6.png

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.

To powinno Cię zainteresować