Wyślij zapytanie Dołącz do Sii

Dobre praktyki w programowaniu testów wydajnościowych w kontekście k6 obejmują szereg technik i podejść, które pomagają w efektywnym, wiarygodnym i skutecznym testowaniu wydajności aplikacji. Ponadto, dobre praktyki mają za zadanie wskazać, w jaki sposób tworzyć scenariusze testowe, aby były one łatwe w przygotowaniu i utrzymywaniu.

Upraszczanie scenariuszy testowych

Do tej pory skupialiśmy się na tworzeniu prostych scenariuszy testowych. Ich problem polega na tym, że mimo reużywania wielu elementów w scenariuszu, istnieje możliwość jego dalszego uproszczenia.

W tym celu wykorzystamy moduł httpx oparty na API k6. Zmienia on podejście do tworzenia scenariuszy testowych, sprawiając, że stają się bardziej intuicyjne i łatwiejsze w utrzymaniu. Jest też uznawany za jedną z wielu dobrych praktyk stosowanych w k6.

Podstawą korzystania z modułu httpx jest tworzenie sesji użytkownika. Przywodzi to na myśl podejście stosowane w narzędziach takich jak JMeter. Na obiekcie sesji możemy zdefiniować pola takie jak bazowy adres URL czy nagłówki, które zostaną dołączone do każdego kolejnego żądania. Dodatkowo, istnieje możliwość zdefiniowania ustawień globalnych, takich jak czas, po którym otrzymamy timeout w przypadku braku odpowiedzi aplikacji.

Przyjrzyjmy się przykładowemu scenariuszowi testowemu.

Przykładowy scenariusz testowy
Ryc. 1 Przykładowy scenariusz testowy

W powyższym przykładzie nie musimy już definiować za każdym razem nagłówków czy pełnego adresu URL aplikacji.

Pokrywanie żądaniami http zasobów statycznych

Inną ciekawą praktyką jest pokrywanie żądaniami HTTP zasobów statycznych. Pliki statyczne często zmieniają się na stronie, co może powodować uciążliwe edycje scenariuszy testowych przy każdej zmianie. W związku z tym, stworzymy katalog utils, w którym będziemy przechowywać nasze funkcje pomocnicze. Następnie, umieścimy w tym katalogu plik o nazwie helper.js z poniższą zawartością:

Zawartość pliku helper.js
Ryc. 2 Zawartość pliku helper.js

W pliku znajdują się dwie funkcje. Pierwsza z nich jest nam już znana i odpowiada za przerwanie działania tekstu. Druga funkcja natomiast służy do wydobycia wszystkich żądań dotyczących zasobów statycznych na stronie, a następnie wykonuje na nich żądanie GET. Ta funkcja może zostać rozbudowana o odpowiednie tagowanie i sprawdzanie czy domena należy do tych, które nas interesują.

Ponadto, moglibyśmy dodać możliwość wykonywania sześciu równoczesnych asynchronicznych wywołań statycznych zasobów równocześnie. Skutkowałoby to tym, że nasze testy jeszcze bardziej przypominałyby działanie przeglądarki.

Tworzenie zbioru testów

Bazując na wiedzy zdobytej z całej serii artykułów, spróbujmy utworzyć dwa scenariusze testowe, które będą oparte na aplikacji Sii. Załóżmy, że chcemy pokryć poniższe, uproszczone scenariusze testowe:

  1. Scenariusz o nazwie search-article.js – odpowiada za wyszukiwanie artkułów na stronie, a następnie wejście w ten, który nas interesuje:
Numer krokuKrok testowyOczekiwany efekt
1Użytkownik przechodzi na stronę głównąUżytkownik znajduje się na stronie głównej
2Użytkownik wyszukuje 1 z 5 zdefiniowanych wcześniej artykułówUżytkownikowi wyświetla się wyszukany artykuł
3Użytkownik klika w wyszukany artykułUżytkownikowi wyświetla się nazwa artykułu

Implementacja w k6:

Implementacja scenariusza w k6
Ryc. 3 Implementacja scenariusza w k6
  1. Scenariusz o nazwie search-training.js. – ten scenariusz wyszukuje interesujące nas szkolenie:
Numer krokuKrok testowyOczekiwany efekt
1Użytkownik przechodzi na stronę głównąUżytkownik znajduje się na stronie głównej
2Użytkownik przechodzi do sekcji „Szkolenia”Użytkownik znajduje się w sekcji „Szkolenia”
3Użytkownik przechodzi do wyszukiwarki szkoleńUżytkownik znajduje się w wyszukiwarce szkoleń
4Użytkownik wyszukuje szkolenie o nazwie „Zostań Analitykiem Biznesowym”Oferta zostaje wyszukana

Implementacja w k6:

Implementacja scenariusza w k6
Ryc. 4 Implementacja scenariusza w k6

Konfiguracje scenariuszy

W poprzednich częściach omawialiśmy różne typy executorów stosowanych w k6. Jest to o tyle kluczowe, że w przypadku, kiedy chcielibyśmy zmienić rodzaj, konieczna będzie edycja kodu wewnątrz scenariusza. Inną możliwością jest duplikowanie tego samego scenariusza testowego.

Oba rozwiązania w długiej perspektywie są ciężkie w utrzymywaniu i niepraktyczne. W związku z tym wykorzystuje się różne konfiguracje testowe, które mogą zostać użyte uniwersalne dla każdego ze scenariuszy. Przyjrzyjmy się dwóm konfiguracjom:

  1. smoke.json – konfiguracja odpowiedzialna za pojedynczy przebieg scenariusza:
Konfiguracja smoke.json
Ryc. 5 Konfiguracja smoke.json
  1. load.json – docelowa konfiguracja zwiększająca obciążenie wraz z czasem trwania testu:
Konfiguracja load.json
Ryc. 6 Konfiguracja load.json

Definiowanie własnych poleceń

Ostatnim z etapów jest zdefiniowanie poleceń do uruchomienia docelowych scenariuszy. Skorzystamy ze znanego już nam mechanizmu z pliku konfiguracyjnego package.json:

Definiowanie własnych poleceń
Ryc. 7 Definiowanie własnych poleceń

Zdefiniowaliśmy cztery polecenia, z których pierwsze odpowiadają za uruchomienie dwóch testów z konfiguracją pojedynczej iteracji. W przypadku ostatnich, wykonanie dotyczy konfiguracji testów obciążeniowych.

Jednym z aspektów, który można ulepszyć, jest dynamiczne definiowanie ilości wirtualnych użytkowników wykorzystywanych w drugim z konfiguracji scenariuszy. To ulepszenie sprawiłoby, że konfiguracje stałyby się jeszcze bardziej uniwersalne dla każdego scenariusza. W końcu obciążenie stosowne dla pierwszego scenariusza będzie się najpewniej różnić od tego w drugim. Moglibyśmy to osiągnąć za pomocą zmiennych środowiskowych.

Podsumowanie

W szóstym już artykule serii artykułów o k6 omówiliśmy dobre praktyki pisania scenariuszy testowych w k6, stworzyliśmy przykładowe scenariusze testowe i utworzyliśmy konfiguracje do nich. Dzięki temu, mogliśmy zwiększyć uniwersalność frameworka testowego.

Nasza podróż z narzędziem jeszcze się nie kończy – w kolejnej części, z wykorzystaniem Grafany, InfluxDB oraz Dockera, rozwiniemy framework i dostosujemy go do naszych potrzeb, aby zapewnić jakość oraz niezawodność tworzonych aplikacji.

***

Jeśli jeszcze nie mieliście okazji zapoznać się z artykułami z serii o narzędziu k6, znajdziecie je tutaj:

Ponadto, zachęcam do zapoznania się z Repozytorium projektu.

5/5 ( głosy: 2)
Ocena:
5/5 ( głosy: 2)
Autor
Avatar
Grzegorz Piechnik

Performance Test Engineer z udokumentowanym doświadczeniem w branży bankowej, giełdowej i streamingowej. Jego praca skupiona jest głównie na pełnej automatyzacji procesów wydajnościowych oraz zarządzaniu obserwowalnością w systemach. Poza pracą prowadzi bloga dotyczącego CyberSecurity, Devops i wydajności aplikacji oraz zajmuje się rozwojem narzędzi open source. Ponadto edukuje, szkoli i wprowadza nowe osoby do branży IT

Zostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Może Cię również zainteresować

Pokaż więcej artykułów

Bądź na bieżąco

Zasubskrybuj naszego bloga i otrzymuj informacje o najnowszych wpisach.

Otrzymaj ofertę

Jeśli chcesz dowiedzieć się więcej na temat oferty Sii, skontaktuj się z nami.

Wyślij zapytanie Wyślij zapytanie

Natalia Competency Center Director

Get an offer

Dołącz do Sii

Znajdź idealną pracę – zapoznaj się z naszą ofertą rekrutacyjną i aplikuj.

Aplikuj Aplikuj

Paweł Process Owner

Join Sii

ZATWIERDŹ

This content is available only in one language version.
You will be redirected to home page.

Are you sure you want to leave this page?