Katalon Studio krok po kroku
W tym artykule chciałbym przybliżyć wam narzędzie do testowania jakim jest Katalon Studio (https://www.katalon.com/). Jest to narzędzie które możemy wykorzystywać do automatyzowania takich obszarów jak: Api, Web, Mobile.
Katalon zyskuje co raz większą popularność o czym może świadczyć tego roczne wyróżnienie w środowisku testerskim jako jedne z najlepszych narzędzi do automatyzacji testów. Osobiście mnie ten fakt nie dziwi ponieważ Katalon jest to bardzo przyjazny użytkownikowi interfejs który z pewnością ułatwi pracę w automatyzowaniu jednego z tych trzech obszarów ww. W tym wpisie chciałbym się jednak najbardziej skupić na automatyzacji Web Serwisów.
Jeżeli ktoś testował Soap-owe Api to z pewnością zetkną się z oprogramowaniem takim jak SoapUi. Ja co prawda chciałbym się skupić na rozwiązaniach REST-owych ale nie przez przypadek jest tu nawiązanie do SoapUi ponieważ przy pracy w Katalon można zauważyć pewne podobieństwa pomiędzy tymi narzędziami. Zwłaszcza że skrypty piszę się w Groovy (http://groovy-lang.org/).
Jeżeli chodzi o REST API jest to od pewnego czasu standard pisania Web Serwis-ów który zawładną światem IT i zepchną na drugi plan API oparte na SOAP.
Przy wyborze narzędzia zależało mi na tym aby było darmowe jak i dawało duże możliwości w wykonywaniu testów, możliwość połączenia się z bazą oraz asercji. Przy krótkim research'u wybór padł na Katalon Studio.
Zacznę od tego że stworzyłem Repozytorium które można zaciągnąć z GIT-a gdzie napisałem prosty Web Service w JAVA wraz z bazą danych H2. Na potrzeby kursu wykorzystałem bazę H2 ponieważ powstaję ona wraz z uruchomieniem kodu na maszynie i przetrzymywana jest w pamięci. W sam raz na potrzeby tego wpisu. Jednocześnie unikniemy tutaj problemów z konfiguracją.
Tutaj jest link do repozytorium: https://github.com/Kajetanos/JwtRestApi
Aby je uruchomić można użyć dowolnego IDE do JAVY ja korzystam z IntelliJ IDEA.
Przykład API jakie mamy w repozytorium opiera się na technologii JWT. Json Web Token (JWT) to rodzaj tokenu przechowywanego po stronie klienta. Token jest zaszyfrowany po stronie serwera i tylko serwer ma klucz pozwalający zweryfikować autentyczność tokenu.
JWT składa się z trzech części.
HEADER – zawiera informację o rodzaju tokena – JWT oraz o tym jakiego algorytmu używamy
PAYLOAD – część odpowiedzialna jest za przechowywanie danych, które chcemy przesyłać w tokenie
VERIFY SIGNATURE – podpis cyfrowy potwierdzającym autentyczność danych zawartych w tokenie
Wszystkie dane w tokenie są przepuszczone przez algorytm Base64 i dopiero w takiej postaci przechowywane.
Jeżeli już odpaliliśmy naszą Web Serwis z repozytorium to możemy uruchomić Katalon Studio.
Po uruchomieniu Katalon Studio tworzymy nowy projekt:
Wybieramy API/WEB Service i dodajemy lokalizacje.
Klikamy prawym przyciskiem w ObjectRepository i wybieramy pozycje new, a następnie WebServiceRequest. Możemy nadać nazwę „SignUp” a w pozycji URL: http://localhost:8089/users/sign-up. Po wykonaniu tej akcji nasz interfejs powinien wyglądać tak:
Teraz stworzymy formularz który pozwoli nam dodać użytkownika. Wybieramy metodę POST.
Wybieramy zakładkę HTTP Header i klikamy add.
W name wpisujemy „Content-Type” a w Value „application/json” .
Następnie przechodzimy do zakładki http Body. Domyślnie powinien być zaznaczony rodzaj „text”
W polu wpisujemy w formacie JSON:
{
"username": "admin",
"password": "password"
}
Teraz stworzymy następny formularz dzięki któremu wykonamy Autentykacje i w Response otrzymamy token który będzie nam potrzebny do Autoryzacji. Autoryzacja będzie nam potrzebna do możliwości korzystania z zasobów naszego API.
Tworzymy nowy WebServiceRequest i dodajemy ten sam header - „Content-Type” „application/json”
Następnie przechodzimy do zakładki HTTP Body i wykonujemy to samo co wyżej.
W Endpoint wpisujemy - http://localhost:8089/login i wybieramy metodę POST. Powinno to wyglądać mniej więcej tak :
Teraz jeżeli przejdziemy do zapytania signUp i wybierzemy zielony trójkącik to powinniśmy otrzymać code status 200. Jeżeli taki otrzymaliśmy to dodaliśmy nowego użytkownika. Dla pewności możemy podejrzeć co się dzieje w konsoli naszej aplikacji. Tam powinno być zapytanie wysłane do bazy :
„Hibernate: insert into application_user (id, password, username) values (null, ?, ?)” Dzieje się tak ponieważ na potrzeby tego tutoriala jest ustawiona wartość nasłuchiwania a application.properties.
Jeżeli teraz wyślemy requesta …/login to w odpowiedzi powinniśmy otrzymać w head-erze token z przedrostkiem Bearer.
A więc utworzyliśmy już użytkownika na którego możemy się „zalogować” i pobraliśmy token dzięki któremu możemy pobierać zasoby z naszego Web Serwisu.
W aplikacji którą uruchomiliśmy mamy Encje Candy gdzie przetrzymujemy cukierki które otrzymamy po każdorazowym wykonaniu zapytania :)
Skopiujmy ten token wraz z przedrostkiem i dodajmy nowy Web Service Request. W endpoincie wpisujemy : http://localhost:8089/candy/all
Ok, teraz przejdziemy do Test Case. Klikamy po lewej stronie prawym przyciskiem na Test Case. Wybieramy New->Test Case. Nadajemy nazwę ja nadałem- Blog Test Case.
Otwieramy ten Test Case i w dolnym panelu wybieramy „Script”
To jest okno w którym możemy napisać skrypt do zautomatyzowania naszych testów.
Na tej części chciałbym się teraz skupić.
W Test Case za pomocy Groovy możemy operować na obiektach zapytań które dodaliśmy do Katalon. Daje to nam duże możliwości i ułatwia proces automatyzacji.
W pierwszej linijce kodu inicjalizujemy zmienną signUp za pomocą klasy WS. Metoda sendRequest (findTestObject('signUp')) zwraca nam obiekt klasy- ResponseObject. W klasie tej mamy szereg metod które pozwolą nam operować na Response.
W następnej linijce sprawdzamy czy otrzymaliśmy z serwera status code = 200. Jeżeli tak to tak jak wyżej wywołujemy metodę sendRequest i z ResponseObject za pomocą metody getHeaderFields i inicjalizujemy zmienną token. Token znajduję się w polu „Authorization”. Metoda replace usuwa nam niepotrzebne znaki.
Na chwilę teraz wróćmy do ObjectRepository gdzie mamy nasze zapytania. Dodamy do nich 3 kolejne które będą nam pobierać dane z serwera.
We wszystkich trzech zapytaniach zdefiniujemy jedynie endpointy i wybieramy metodę GET.
Endpointy:
- http://localhost:8089\candy\all
- http://localhost:8089\candy\{id}
-http://localhost:8089\candy\getName\{id}
Wracamy do skryptu.
Teraz aby móc dodać token który pobraliśmy do headera naszego zapytania potrzebujemy obiektu – RequestObject gdzie mamy metodę setHttpHeaderProperties w której przekażemy ArrayList z TestObjectProperty a w niej property z tokenem.
Następnie wywołujemy metodę sendRequest tak jak poprzednie tyle tylko że jako parametr przekazujemy request który przed chwilą spreparowaliśmy .
Teraz przydało by się sprawdzić czy dane które nam zwraca WebSerwis pokrywa się z danymi które mamy w bazie danych. Tak jak już pisałem wyżej będziemy korzystać z bazy danych H2 która jest uruchamiana w pamięci.
Konektor do bazy napisałem w sekcji Keywords gdzie możemy dodawać pomocnicze klasy. Aby dodać taki Keyword wystarczy na liście z lewej strony kliknąć prawym przyciskiem w „Keywords” i wybrać new ->package. Następnie klikamy prawym przyciskiem w nowo utworzony package, wybieramy new-> Keyword. W nazwie może wpisać Connector. Klasa powinna nam się utworzyć, u mnie ona wygląda tak:
Na początku zdefiniowałem dwie zmienne statyczne connection i log. Connection będzie nam potrzebne do utworzenia połączenia z bazą danych i jest to obiekt klasy Connection a log do logowania wykonywanych operacji(tak jak w TestCase).
Pierwsza metoda definiuje nam klasę Drivera z którego będziemy korzystać w tym przypadku H2 następnie przy użyciu DriverManagera będziemy mogli użyć metody getConnection w której zdefiniujemy parametry aby móc się połączyć z bazą. Te parametry można podejrzeć w zaciągniętym repozytorium w resources/application.properties. Pierwszy parametr to TCP URI ,następny username oraz password. Metoda zwraca nam obiekt Connection który wykorzystujemy w metodzie execute na podstawie którego stworzymy Statement a następnie wykonamy na nim kwerendę przy użyciu metody executeQuery.
Teraz możemy wykorzystać naszą klasę w skrypcie. Importujemy ją:
import db.Connector as Connector
Implementujemy obiekt ResultSet i wywołujemy metodę execute a w parametrze przekazujemy sql do wyciągnięcia danych z bazy. Tworzymy pętlę aby dodać wszystkie zwrócone encje do Listy i na końcu wykonujemy assercje.
Teraz z pozycji TestCase-a możemy uruchomić nasz skrypt.
Jak widać Katalon można również wykorzystać do testowania API i dzięki możliwości pisania skryptów w Groovy dowolnie konfigurować. Test Case który tutaj stworzyłem jest tylko przykładem tego jak można wykorzystać te narzędzie. Mam nadzieję że przybliżyłem temat testów API w Katalon i jeżeli czujecie że te narzędzie wam odpowiadam to odsyłam do dokumentacji: https://docs.katalon.com/katalon-studio/docs/index.html
gdzie można znaleźć wiele wartościowych treści i w pełni zobaczyć możliwości tego narzędzia. Dzięki możliwości wykonywania Test Case z kodu w terminalu jest możliwość utworzenia Job-ów w Jenkins.
Repozytorium do skryptów groovy: https://github.com/Kajetanos/KatalonRestApi