Tworzenie testów automatycznych jest możliwe na różnych platformach. Do tej pory przedstawialiśmy konfigurację środowiska i uruchomienie testów na komputerze z systemem Windows, ale w zależności od osobistych preferencji lub dostępności odpowiednich maszyn z takim samym powodzeniem można pracować na urządzeniach pracujących pod kontrolą systemu Linux lub macOS. W tym artykule przedstawię skróconą instrukcję przygotowania środowiska do automatyzacji testów aplikacji internetowych w technologii Java i Selenium WebDriver na ostatnim z wymienionych systemów.
Celem tego artykułu jest pokrycie tego samego zakresu, który dla systemu Windows ze szczegółami został opisany w serii artykułów:
- Narzędzia - system kontroli wersji Git i emulator konsoli Cmder
- Narzędzia - Selenium i przeglądarki internetowe
- Narzędzia - Java, Gradle i IntelliJ
Przygotowanie środowiska na macOS jest pod pewnymi względami łatwiejsze niż w Windows i powinno zająć mniej czasu, stąd umieszczenie wszystkich elementów w jednym tekście wydaje się rozsądnym posunięciem.
Manager pakietów
Jeśli tylko to możliwe, warto instalować oprogramowanie przy pomocy tak zwanego managera pakietów. Jest to rozwiązanie powszechnie stosowane na przykład na platformie Linux, gdzie tego typu narzędzie jest wbudowane i gotowe do użycia zaraz po instalacji systemu. macOS niestety nie ma domyślnie zainstalowanego takiego oprogramowania, ale społeczność open-source świetnie nadrobiła ten brak, tworząc Homebrew, nazywany “brakującym managerem pakietów dla macOS”.
Instrukcja instalacji jest opisana na stronie projektu i sprowadza się do wykonania w terminalu skryptu Ruby:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Emulator terminala
Emulator terminala, który umożliwia wykonywanie poleceń przy użyciu interfejsu linii komend (ang. command line interface, CLI), jest nieodzownym elementem środowiska w systemach rodziny Unix. Funkcjonalności wbudowanej w macOS aplikacji Terminal pozostawiają trochę do życzenia, dlatego w celu usprawnienia pracy polecam zastąpienie jej narzędziem iTerm2. Można go pobrać ze strony projektu i zainstalować przenosząc do folderu Applications. Inną metodą instalacji jest wykorzystanie wspomnianego wyżej Homebrew przez wywołanie w domyślnym terminalu polecenia:
brew cask install iterm2
Git
Git to rozproszony system kontroli wersji, popularny między innymi dzięki dużej wydajności, prostej konstrukcji, czy też silnemu wsparciu dla modelu gałęziowego (ang. branching model). Git jest darmowy, a na jego upowszechnienie wpłynęła dostępność serwisów takich jak GitHub, BitBucket czy GitLab, które wspierają hosting projektów opartych o Git, w tym również za darmo.
Instalacja Git
Git dla systemu operacyjnego macOS możesz pobrać ze strony projektu w podstaci pliku dmg. Instalacja nie powinna sprawić problemów, możesz podczas niej skorzystać z domyślnych ustawień.
Pierwszą rzeczą, którą powinieneś zrobić po instalacji Git, jest skonfigurowanie nazwy użytkownika oraz adresu email przy pomocy komendy git config. Dzięki temu zostaniesz automatycznie oznaczony jako autor wszystkich fragmentów kodu, które dodasz do swoich projektów (czyli mówiąc językiem Git commitów dodanych do repozytoriów). Aby zmienić te ustawienia, uruchom iTerm, a następnie wykonaj najstępujące komendy:
git config --global user.name "Jan Nowak"
git config --global user.email [email protected]
Tip: Bardzo dobrym źródłem wiedzy na temat systemu
Gitjest książka “Pro Git”, dostępna za darmo na stronie projektu. Warto o niej pamiętać podczas nauki.
Selenium
Automatyzacja testów aplikacji internetowych odbywa się zazwyczaj z wykorzystaniem biblioteki Selenium WebDriver. To zbiór narzędzi i bibliotek wspierających automatyzację przeglądarek internetowych. Dostarcza podstawy do implementacji specyfikacji W3C WebDriver. Automatyzacja przeglądarek jest możliwa dzięki WebDriver API, który jest protokołem definiującym niezależny od technologii interfejs do ich kontrolowania. Każdy z tego typu programów jest wspierany przez odpowiednią implementację WebDriver API, nazywaną sterownikiem (driver), która do komunikacji z przeglądarką używa API dostarczonego przez jej producenta. Przykładami takich sterowników są geckodriver dla Mozilla Firefox oraz chromedriver dla Google Chrome.
Sterowniki przeglądarek
Tip: Jeżeli w swoim projekcie zamierzasz używać biblioteki
WebDriverManagerdo zarządzania sterownikami, manualna instalacja sterowników nie jest konieczna. Przykładowy szablon projektu wykorzystujący automatyczne zarządzanie sterownikami dostępny jest tutaj: https://gitlab.com/qalabs/blog/junit5-selenium-gradle-template
Większość sterowników wymaga niezależnej aplikacji do komunikacji z przeglądarką intenetową. Sterowniki możesz pobrać ze stron ich twórców.
- Chrome Driver dla Google Chrome - https://chromedriver.storage.googleapis.com/index.html
- Gecko Driver dla Firefox - https://github.com/mozilla/geckodriver/releases
Zwróć uwagę, aby pobrać pliki dla systemu macOS. Zapisz je w wybranym katalogu (np. selenium-dev/drivers). Oba sterowniki są umieszczone w skompresowanych archiwach, które można rozpakować poleceniem z terminala. W tym celu uruchom iTerm2 i wykonaj poniższe komendy. Przy czym chromedriver jest umieszczony w archiwum zip, natomiast geckodriver w archiwum tar.gz, więc polecenia będą się nieco różnić. Zwróć też uwagę na podanie aktualnego numeru wersji w nazwie pliku z geckodriverem:
unzip chromedriver_mac64.zip
tar xvfz geckodriver-v0.20.1-macos.tar.gz
Aby Selenium WebDriver mogło działać poprawnie, będziesz musiał podać mu lokalizację właściwego sterownika przeglądarki.
Tip: Lokalizację sterownika można wskazać przez umieszczenie go w katalogu dostępnym z poziomu zmiennej systemowej
PATHlub przez parametr uruchomieniaSelenium WebDriver.
Tip: W większości przypadków sterowniki tworzone są niezależnie od przeglądarek internetowych. Dlatego musisz zwrócić uwagę na informację o wersji przeglądarki, która jest wspierana przez dany sterownik, zamieszczoną na stronie internetowej sterownika.
Jeżeli już pobrałeś i rozpakowałeś wszystkie sterowniki, to upewnij się, że katalog, który je zawiera, jest dostępny z poziomu zmiennej systemowej PATH.
Jak dodać katalog do PATH w macOS?
Katalog można dodać do PATH przy pomocy polecenia:
export PATH=$PATH:/sciezka/do/katalogu
Jeśli wykonasz taką komendę z linii poleceń, to dopisany katalog będzie dostępny w zmiennej PATH tylko w trakcie trwania aktualnej sesji terminala. Po ponownym otwarciu zostanie przywrócona wcześniejsza wartość. Żeby katalog dodać do PATH na stałe, trzeba przy pomocy swojego ulubionego edytora zmodyfikować plik .bash_profile znajdujący się w katalogu domowym użytkownika i dodać wyżej wymienione polecenie na końcu tego pliku. Następnie, po zapisaniu pliku, należy ponownie otworzyć terminal lub wykonać komendę:
source ~/.bash_profile
Jeśli konfiguracja zmiennej PATH jest poprawna, to geckodriver pownien się uruchomić, niezależnie od tego, w którym katalogu wpisałeś komendę. Jeśli na ekranie pojawią się komunikaty podobne do tych poniżej, oznacza to, że geckodriver uruchomił się prawidłowo i nasłuchuje na komendy na porcie 4444. W analogiczny sposób sprawdź, czy pozostałe sterowniki również uruchamiają się bez przeszkód.
1 | $ geckodriver |
Java Development Kit (JDK)
Java jest jednym z najpopularniejszych języków programowania, cechującym się obiektowością, silnym typowaniem, przenośnością oraz prostotą. Programy napisane w języku Java kompilowane są do tzw. bytecode’u, a następnie uruchamiane są w tak zwanej wirtualnej maszynie, w dowolnym systemie operacyjnym.
Java SE Development Kit zawiera środowisko uruchomieniowe Java Runtime Environment (JRE) oraz narzędzia do tworzenia, debuggowania i monitorowania aplikacji stworzonych w języku Java.
Wraz z wydaniem wersji Java 11, Oracle zmieniło zasady licencjonowania dostarczanego przez siebie JDK:
(Oracle) OpenJDK- używa istniejącej licencji GPLv2+CE i jest darmowa również do użytku komercyjnego. Pobierz binaria ze strony: https://jdk.java.net/12Oracle JDK- używa płatnej komerycyjnej licencji, darmowa podczas developmentu. Instalator dostępny jest na stronie: https://www.oracle.com/technetwork/java/javase/downloads/index.html
Każda z licencji posiada różne binaria, ale różnice są kosmetyczne i nieodczuwalne w trakcie pracy.
Instalacja OpenJDK
Najprostszym i najefektywniejszym sposobem instalacji OpenJDK jest wykorzystanie narzędzia brew. Otwórz terminal i wykonaj polecenie:
$ brew cask install java
Zweryfikuj poprawność instalacji używając polecenia:
$ javac -version
javac 12.0.1
Instalator nie ustawia zmiennej środowiskowej JAVA_HOME, zatem należy to wykonać ręcznie (jest to krok zalecany, jednak nie wymagany).
Sprawdź miejsce instalacji OpenJDK:
$ brew cask info java
==> Name
OpenJDK Java Development Kit
==> Artifacts
jdk-12.0.1.jdk -> /Library/Java/JavaVirtualMachines/openjdk-12.0.1.jdk (Generic Artifact)
Do ~/.bash_profile dodaj komendę:
export JAVA_HOME=/sciezka/do/katalogu/openjdk/Contents/Home
Uruchom ponownie terminal i wykonaj polecenie:
$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/openjdk-12.0.1.jdk/Contents/Home
Instalacja Oracle JDK
Oracle JDK możesz pobrać ze strony Oracle: http://www.oracle.com/technetwork/java/javase/downloads/index.html. Pobierz i zainstaluj najnowszą wersję platformy.
Aby sprawdzić, czy instalacja przebiegła prawidłowo, uruchom wiersz poleceń i wpisz:
$ javac -version
javac 12.0.1
Dodatkowo, możesz upewnić się, że zmienna środowiskowa JAVA_HOME została poprawnie ustawiona podczas instalacji:
$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk-12.0.1.jdk/Contents/Home/
Gradle
Gradle to otwartoźródłowe (ang. open-source) narzędzie do automatyzacji procesu budowania aplikacji, w tym do zarządzania zależnościami, który używa języka domenowego Groovy lub Kotlin do tworzenia konfiguracji projektu.
Gradle jest wspierany przez większość środowisk programistycznych, może być również z łatwością uruchamiany z wiersza poleceń lub poprzez serwer ciągłej integracji (ang. continuous integration, CI).
Gradle zdobył popularność między innymi dzięki łatwej i rozszerzalnej konfiguracji, szybkości działania (przyrostowe budowanie aplikacji, możliwość równoległego wykonywania zadań) oraz wsparciu wielu języków i technologii (np.: Java, C++, Groovy).
Tip: Tworząc dowolny, nawet najbardziej podstawowy projekt w technologii
Java, zawsze używaj narzędzia do automatyzacji procesu budowania aplikacji. Najpopularniejsze narzędzia dla projektówJavatoGradleiMaven. Przeczytaj o różnicach tutaj: https://gradle.org/maven-vs-gradle
Instalacja Gradle z wykorzystaniem Homebrew sprowadza się do wykonania w terminalu polecenia:
$ brew install gradle
W celu przetestowania poprawności instalacji Gradle, w wierszu poleceń wykonaj komendę:
gradle --version
Aby sprawdzić lokalizację binariów Gradle po instalacji, wykonaj polecenie:
$ brew info gradle
Konfiguracja projektu opartego o Java, JUnit 5 i Gradle
W celu weryfikacji poprawności konfiguracji środowiska, wykorzystaj szablon projektu junit5-gradle-template.
Uruchom
iTerm2Sklonuj projekt:
git clone https://gitlab.com/qalabs/blog/junit5-gradle-template.gitPrzejdź do katalogu projektu (
junit5-gradle-template) i wykonaj polecenie:gradle clean test
Komenda uruchomi testy z użyciem Gradle, pobierając wcześniej niezbędne zależności oraz kompilując kod projektu. Jeśli wszystko zostało poprawnie skonfigurowane, wykona się prosty test:
1 | Starting a Gradle Daemon (subsequent builds will be faster) |
Tip: Alternatywnie możesz wykonać polecenie
./gradlew clean test, ponieważ projekt zawiera tak zwanyGradle Wrapper, który lokalnie (w katalogu projektu) zainstaluje zależnościGradlewymagane do jego uruchomienia.
Instalacja IntelliJ Community
IntelliJ IDEA to profesjonalne środowisko programistyczne oferujące między innymi:
- rozbudowany edytor z kolorowaniem składni, analizą kodu i wykrywaniem błędów, podpowiadaniem składni,
- ergonomiczny interfejs użytkownika, z zaawansowanymi funkcjami wyszukiwania, wsparciem skrótów klawiszowych,
- zaawansowany debugger,
- wsparcie dla systemów kontroli wersji, w tym oczywiście wsparcie dla
Git, - wsparcie narzędzi do budowania projektów takich jak
GradleczyMaven, - wsparcie dla najnowszych frameworków i biblitek, w tym wsparcie dla
JUnit 5.
IntelliJ występuje w dwóch wersjach: Ultimate (komercyjna) i Community (open-source). Wersja Community jest całkowicie wystarczająca do projektów nie używających frameworków i technologii dla aplikacji klasy enterprise. Doskonale zatem sprawdzi się w projektach opartych o standardową Javę i Selenium WebDriver.
Konfiguracja Java SDK
Po instalacji i pierwszym uruchomieniu IntelliJ masz możliwość skonfigurowania domyślnego Java SE Development Kit dla nowych projektów. W tym celu w oknie powitalnym wybierz opcję Configure | Project Defaults | Project Structure. Przejdź do menu Platform Settings | SDKs i dodaj nowe SDK (+) wskazując na katalog zainstalowanego wcześniej Java SE Development Kit (ten ze zmiennej JAVA_HOME):
Tip: SDK = Software Development Kit, JDK = Java SE Development Kit. JDK jest podzbiorem SDK odpowiedzialnym za tworzenie i uruchamianie aplikacji.
Mając skonfigurowane co najmniej jedno SDK, możesz je wskazać jako domyślne dla projektów. Zrobisz to w menu Project Settings | Project. Nie zapominij o zmianie poziomu wspieranego języka. JUnit 5 wymaga conajmniej Java 8, zatem w opcji wyboru Project language level wskaż SDK default.
Tip: Nie jesteś pewien, czy
IntelliJjest dla Ciebie? Możesz pracować zEclipselubNetbeans. Ja przez wiele lat pracowałem zEclipse, ale dzisiaj nie wyborażam sobie innegoIDEniżIntelliJdo tworzenia projektów opartych oJVM.
Import projektu do IntelliJ
Aby zaimportować projekt w IntelliJ, wybierz opcję File | Open i wskaż plik gradle.build. Otwórz plik jako projekt i poczekaj chwilę, aż zaimportuje się wraz ze wszystkimi zależnościami.
W IntelliJ otwórz plik pl.qalabs.blog.junit5.JUnit5Tests i uruchom test helloJUnit5, klikając lub używając skrótu control+option+R:
Tip: W
IntelliJ, pracując w kontekście projektu, masz możliwość konfiguracji ustawień projektu dostępnych za pomocą skrótucommand+;lub w menuFile | Project Structureoraz ustawień domyślnych dla wszystkich nowych projektów dostępnych w menuFile | Other Settings.
Dalsze kroki z IntelliJ
Najlepszym źródłem wiedzy do nauki IntelliJ jest… oficjalna dokumentacja. Znajdziesz w niej wiele przydatnych informacji, które pomogą Ci rozpocząć efektywną pracę z tym środowiskiem.
- Rozpocznij od tego rozdziału: https://www.jetbrains.com/help/idea/discover-IntelliJ-idea.html. Znajdziesz tutaj najistotniejsze funkcje
IntelliJw pigułce. Jedyną sekcją, którą możesz pominąć, to Application Servers. - Podstawy uzywania
IntelliJw projektachJava: https://www.jetbrains.com/help/idea/creating-and-running-your-first-java-application.html. Możesz pominąć rozdziały: Packaging the application in a JAR i Running the packaged application - Podstawy debuggowania aplikacji w
IntelliJ: https://www.jetbrains.com/help/idea/debugging-your-first-java-application.html - Naucz się używać podstawowych skrótów klawiszowych. Pomogą one w efektywnej pracy: https://www.jetbrains.com/help/idea/mastering-keyboard-shortcuts.html.