
Cześć nie może u mnie zabraknąć wpisu o tym wspaniałym narzędziu do pisania testów automatycznych. Jest to swoista hybryda, ciekawych narzędzi w schludnym IDE. Jednak nie jest to zbyt przyjazne IDE jak chociażby Inteljii, jednak dla początkujących wystarczy.
Np. czasami nie ogarnia importów, a po ponownym uruchomieniu już tak ? Więc WTF ? Chyba że już to naprawili 😀
O czym mowa ? O Katalon Studio
Niestety część rzeczy darmowych musi przynosić realne zyski autorom, w chwili kiedy produkt jest mocno się wykorzystywany w zespołach i może przynosić realne zyski. Od pojawienia się wtyczek per konto, autorzy idą w stronę planów, płatnych planów – oczywiście darmowy okrojony pozostaje do dyspozycji użytkowników domowych lub maluch organizacji.
Rewolucja ma nadejść od wersji 7.0 która już jest wypuszczona, jak całość się rozwinie ? Wiele firm powierzyło testy pokusą darmowego prostego narzędzia nawet dla tych co nie mają podstaw programowania.
Mimo tych zmian, nie warto skreślać narzędzia, gdyż moim zdaniem próg wejścia, w celu nauczenia ‘kolejnej’ osoby jest na pewno dużo łatwiejszy (jeśli nie zna za bardzo programowania) niżeli np. java czy javascript.
Ograniczenia np. do małych projektów.
Jednak myślę, że community ostro zareaguje i zostaną opakowane tylko płatne pluginy raporty itp. Choć ja tak sobie myślę, że skoro narzędzie wymaga dużo mniej programistycznych umiejętności – a więc większy pułap wejścia, to firma powinna wyłożyć kasę na płatny plan i tyle, bez gadania, bo coś takiego szybko się zwróci 🙂
A np. połączenie Katalona z Jenkinsem to jeden plik sh (jeśli mowa o linuxie) i takie testy mogą działać codziennie np. nocymi porami.
O tym skrypcie jak, ogólnie skryptach .sh .bat będzie kiedyś wpis 🙂
Dobra nie ma co się rozpisywać … do dzieła !!!
Przechodzimy na stronę – > https://www.katalon.com/
Tam klikamy Download Katalon Studio

Konieczne jest założenie konta, jeśli je założycie logujecie się.
Pobieranie i wypakowanie
https://www.katalon.com/download/
Po zalogowaniu wracam na stronę wyżej i pobieramy katalon studio na windowsa, w przypadku linuxa pobieramy archiwum wypakowujemy nadajemy uprawnienia i uruchamiamy lub też opcjonalnie tworzymy skrót.
Maca nie mam więc nie wiem jak się instaluj tam aplikacje 😀
IDE w wersji grudzien 2019 wazy 367mb 🙂
Wypakowujemy program i uruchamiamy katalon.exe (opcjonalnie tworzymy skrót do programu).

Po uruchomieniu się, program prosi nas o aktywacje wcześniej stworzonym kontem.
Tworzenie pierwszego testu

Tworzymy sobie nasz projekt, zrobimy projekt WEB na potrzeby demonstracji jak i późniejszych wpisów rozbudowujących wiedzę na temat tego narzędzia 🙂
Są tez dostępne testy REST API i inne być może postawnie oddzielny flow dotyczący rest api w katalonie 🙂
Wracamy do projektu web

Program proponuje nam stworzenie projektu analizy testów w chmurze możemy to później wyłączyć w opcjach o tym też wspomnę 🙂
Klikamy new projekt nazwa i create, następnie ok.
Nasz projekt jest gotowy do użytku.


Skupmy się po pierwsze na sekcjach dotyczących struktury naszego projektu.
Zacznijmy od profili czym one są.
Profile
Profile to inaczej po mojemu zmienne globalne.
Czyli takie zmienne, których możliwe jest użycie w każdym TestCases czy keywordsie o nich później. Domyślnie otrzymujemy jeden profil o nazwie default czyli po prostu domyślny, nie da się mu zmienić nazwy 😉
Co możemy robić z takim jednym profilem ?
Dodawać oczywiście zmienne globalne, o nich za chwilę.
Stworzyć więcej niż ten domyślny klikając prawym, nowy.


Z profilami możemy robić następujące rzeczy, otwierać lub dwuklik, zmiana nazwy – rename, copy można robić kopia paste i mieć duplikat.
Samo id można kopiować odświeżać usuwać i ostatnia opcja otwiera folder w exploratorze. To tyle z tego menu.
Wbijamy na jakiś profil dwuklik i stworzymy jakieś zmienne. Przyciskiem add.


Szkoda że jako kolumna nie ma typu zmiennej ;/

Test Cases czyli przypadki testowe po prostu 🙂

Analogicznie jak profile nowy i tam wybieramy test case, są tez dostępne nowy folder aby potem ładnie to grupować te testacasy np. test jakiegoś modułu w jednym folderze, zaś innego w kolejnym folderze 🙂

Test cases poniżej środka mniej więcej, posiada kilka kart domyślna opcja manual tak jak w pyrzpadku profili, tak samo też script w profilach też jest 🙂
Variables – tutaj za chwile opisze o co chodzi to samo variables script mode 🙂
Integracja na chwilę obecną nas nie interesuje.
Oraz properties czyli właściwości takiego test case

Oka wracamy do variables – jako pierwsze opisywałem zmienne globalne czyli profiles i w skrócie powiedziałem, że są to zmienne globalne – czyli takie, których można używać w każdych test cases 🙂 np. user baza danych itp. zaś variables w konkretnym testa cases zdefiniowany.
Działa tylko i wyłącznie w tym test case za chwilę pokażę porównanie obu 🙂
A dopiero po tym powiem coś więcej podstawowych akcji na test cases.

Zdefiniujmy sobie zmienną w obrębie tylko tego testcasesa 😀
Jak widzicie pominięcie bug ? W profilach narzekałem, że brak kolumny typu zmiennej a tutaj już jest 😛 tylko tutaj rzadziej jest to potrzebne, a globalnych, przynajmniej ja jednak używam częściej.
Tutaj np. fajne są zmienne do pętli czy czegoś takiego.
Osoby korzystające z IDE które autozapisuje będą zasmucone ctrl s trzeba robić 🙁 😀 Okej przechodzimy do script mode test cases

Domyślnie nie ma tu żadnych klas itp. są same importy i tyle.
Ctrl spacja podpowiada po kropce jak cos.

Zastanawiałem się dlaczego w pierwszym przypadku miałem nulla tzn. dla tekstu “To jest zmienna globalna : null” nie wiedziałem o co chodzi 😀
Okazało się że zmienne dałem do innego profilu, a inny mam wybrany.
Kompilator raczej olewa to, że takiej zmiennej jak a, b nie miałem w profilu i wolał napisać null niż brak zmiennej ? :D:D no ale cóż ;p.
Tak jak widzicie zmienimy Test2 bez zmiennej i przekopiujemy te 3 linijki.

Dostaliśmy 997 bo to zmienna globalna.
Zaś w przypadku lokalnej zmiennej dał nam jasne info, że nie ma takiej zmienne dla klasy, więc taka jest zaleta zmiennych globalnych, zadziałają na każdym test case 🙂

Wracamy do manual mode.
Co my tu mamy mamy tutaj w zależności od testów mobilki lub webui lub windowsowe np.
W tym wpisie na razie web plus te rozwinięte pokaże na szybko przykłady lecz będę korzystał z script mode i pokaże jak to wygląda w manual 🙂
W jeśli chodzi o add – > webui keyword można to kliknąć i potem pisać i szybko wyszukiwać pożądane akcje 🙂
Np. navigate, klikamy dwa razy w input i mamy 🙂

Dobra w tym wpisie pokaże jedynie co napisałem i jak się wykonało. Oraz jak to wygląda w manual.
Następny wpis będzie szczegółowo poświęcony testcases potem pokażę keywords na pewno 🙂 !
Dużo wyjaśniania ale nie wszystko na raz ! 🙂

Tak wygląda nasz test składa się z testowania tych zmiennych to je można olać.
Składa się z metod wbudowanych czyli WebUI. coś tam
oraz kminy zamiast obiektów statycznych (nagrane / przechwycone) są u mnie obiekty dynamiczne. Ale bez obaw pokażę też te łatwiejsze 🙂



I wlazło tam gdzie chciałem 🙂 zakomentowałem close browser żeby zdążyć screenshota zrobić 🙂
Konsola wygląda tak :


Manual mode wygląda następująco.
Mam obowiązek co nieco z kodu poopisywać.
open browser wiadomo otwiera przeglądarkę, ta która jest domyślna, u mnie i w Katalonie jest to raczej Firefox 🙂
Można też w innych :P, trzeba mieć je zainstalowane na maszynie, na której uruchamiacie testy.
Druga linijka navigateTourl to po prostu otwórz daną stronę.
Trzecie do deklaracja zmiennych typu string nazwy muszą być unikalne dowolne, ale najlepiej coś mówiąc po znaku zapytania przypisujemy Stringa w ciapkach adekwatnego w tym wypadku do idka elementu, drugiego tez idka oraz urla (sory nie zmieniłem nazwy to nie text tylko url.
Kolejna sekcja to TestObject czyli też definicja obiektów tylko, że jest to nie zmienna, a obiekt danego typu.
Obiekty dynamiczny a zwykły
Obiekt jest bardziej rozbudowany niż zmienna.
Jak widać tutaj za pomocą słowa kluczowego new tworzymy nowy obiekt, a aby utworzyć nowy obiekt danej klasy, używamy konstruktora domyślnego najczęściej nazwa klasy() z nawiasami i pustka w środku lub też konstruktor jakiś inny 😛
O konstruktorach, nie wiem może napiszę jakaś java / python dla testerów , w skrótach jakieś ważniejsze rzeczy.
Dobra przedostatnia sekcja addProperty czyli co ?
wpisujemy nasz obiekt z poprzedniego punktu kropka i tam wywołują nam się dostępne metody dla tego obiektu tu różne rzeczy podpowie :
metody z klasy oraz takie ogólne co pasują do wszystkiego zawsze, ale nie zawsze działają 😀

Nas interesuje metoda addProperty w środku ma 3 parametry.
W skrócie metoda to taki twór z klasy który ma coś robić, ma zapobiec powtarzalności kodu, aby jej reużywać, może zwracać coś lub nie, jak zwraca to dany typ podany przed definicją metody oraz może posiadać zero lub więcej parametrów wejśćiowych, które mogą ale nie muszą być wykorzystane w środku metody.
Dodatkowo metody możemy przeciążyć tj. metoda posiada taką samą nazwę ale różną liczbę argumetów np. metoda dodajliczby(int liczba 1)
i mamy w srodku 10 + liczba1 i robimy sobie metode taką samą
dodajliczby(int liczba1, int liczba2)
I 10+liczba1+liczba2 można różne kminy robić 😀
No ale dobra tutaj mamy metode addProperty.

Podpowiada nam po najechaniu że w nawiasach metoda wymaga
nazwy, conditionType czyli typu porównania wartości oraz value – wartość.
u nas stronatwojapogoda.addProperty(“href”, ConditionType.CONTAINS, twojapogodaText)
Oznacza ze moja zmienna korzysta z properta typu href czyli link, o conditionie ‘zawiera’ i wartosci twojapogodaText czyli zmiennej z początku)
co to znaczy to zawiera ? tzn mamy hrefa www.google.pl/asfdasfds
to jesli mamy EQUALS wpisujemy cały url ‘www.google.pl/asfdasfds’
zaś używając CONTAINS wpisujemy w value ‘google’ lub ‘asfdasfds’ wszystko to co jest mało zmienne i unikalne zarazem 🙂
lupaszukaj.addProperty(“id”, ConditionType.EQUALS, lupaId) – oznacza ze dokładnie id ma się nazywać jak ze zmiennej lupaId czyli sb_form_go
Jesli mamy np. sb_form_gov2 to wtedy CONTAINS nie będzie wiedział co kliknąć a taki equals klika dokładnie takie id jak podaliśmy, oczywiście są przypadki gdzie id jest takie same w obu elementach i musimy posiłkować się czymś innym 🙂
Ostatni fragment to interakcje z obiektami :
WebUI.click(poleszukaj)
WebUI.setText(poleszukaj, ‘pogoda lublin’)
WebUI.click(lupaszukaj)
WebUI.click(stronatwojapogoda)
Tutaj mam tylko dwa typu set text oraz click.
Click jest prosty metoda cliknij a w nawiasie parametr to obiekt 🙂 nasz dynamiczny.
Zaś setText

Wymaga dwóch parametrów obiektu oraz stringowego tektu lub zmiennej typu string 🙂
I na końcu wywołujemy metodę WebUI.closeBrowser() zamykamy przeglądarkę aby driver nie zamulał w pamięci 😛
I to tyle w następnym wpisie o Katalonie rozwiniemy te TestCases pokombinujemy z TestSuites i Keywordsami oraz przykłady np. data files.
Będą jeszcze m.in. bardziej rozbudowane keywordsowe metody, których będziemy używać w TestCases, będzie coś z bazą danych, będzie uruchomienie w Jenkinsie ze skryptu i na bank jakieś pluginy 🙂
Dzięki za uwagę, dobranoc i miłego !!!
Aaaa no i kod tego testu
import static com.kms.katalon.core.checkpoint.CheckpointFactory.findCheckpoint
import static com.kms.katalon.core.testcase.TestCaseFactory.findTestCase
import static com.kms.katalon.core.testdata.TestDataFactory.findTestData
import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject
import static com.kms.katalon.core.testobject.ObjectRepository.findWindowsObject
import com.kms.katalon.core.checkpoint.Checkpoint as Checkpoint
import com.kms.katalon.core.cucumber.keyword.CucumberBuiltinKeywords as CucumberKW
import com.kms.katalon.core.mobile.keyword.MobileBuiltInKeywords as Mobile
import com.kms.katalon.core.model.FailureHandling as FailureHandling
import com.kms.katalon.core.testcase.TestCase as TestCase
import com.kms.katalon.core.testdata.TestData as TestData
import com.kms.katalon.core.testobject.TestObject as TestObject
import com.kms.katalon.core.webservice.keyword.WSBuiltInKeywords as WS
import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI
import com.kms.katalon.core.windows.keyword.WindowsBuiltinKeywords as Windows
import internal.GlobalVariable as GlobalVariable
import com.kms.katalon.core.testobject.ConditionType
import com.kms.katalon.core.testobject.TestObject
import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI
println('To jest zmienna globalna : ' + GlobalVariable.a)
println(GlobalVariable.b)
//println('To jest zmienna test cases (lokalna) : ' + zmiennatestcases)
WebUI.openBrowser('')
WebUI.navigateToUrl('www.bing.com')
// obiekty dynamiczne :
//string idkow czyli przypisanie do zmiennej typu string wartosci id danego pola f12 zbadaj element - o tym inny wpis :D !
String poleId = 'sb_form_q'
String lupaId = 'sb_form_go'
String twojapogodaText = 'twojapogoda.pl'
// tworzymy obiekty typu TestObject czyli te uzywane w katalonie tutaj
// własnie pokazuje trudniejsze dynamiczne oraz statyczne czyli takie ktore przechwycimy jak je nagramy
// o nagrywaniu i spy tez kolejny wpis bo duzo tego i tak :D
TestObject poleszukaj = new TestObject("objectName")
TestObject lupaszukaj = new TestObject("objectName")
TestObject stronatwojapogoda = new TestObject("ObjectName")
//dodajemy do kazdego z obiektu property, property czyli wlasciowosc o jakims typie nazwie warunku i wartosci
poleszukaj.addProperty("id", ConditionType.EQUALS, poleId)
lupaszukaj.addProperty("id", ConditionType.EQUALS, lupaId)
stronatwojapogoda.addProperty("href", ConditionType.CONTAINS, twojapogodaText)
// na samym koncu wykonujemy interakcje z tymi obiektami
WebUI.click(poleszukaj)
WebUI.setText(poleszukaj, 'pogoda lublin')
WebUI.click(lupaszukaj)
WebUI.click(stronatwojapogoda)
//WebUI.closeBrowser()
<?xml version="1.0" encoding="UTF-8"?>
<GlobalVariableEntities>
<description></description>
<name>default</name>
<tag></tag>
<defaultProfile>true</defaultProfile>
<GlobalVariableEntity>
<description></description>
<initValue>997</initValue>
<name>a</name>
</GlobalVariableEntity>
</GlobalVariableEntities>