Narzędzia - środowisko dla Java i Selenium na macOS

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:

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 Git jest 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 WebDriverManager do 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.

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 PATH lub przez parametr uruchomienia Selenium 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
2
3
$ geckodriver
1521659824074 geckodriver INFO geckodriver 0.19.1
1521659824111 geckodriver INFO Listening on 127.0.0.1:4444

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:

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ów Java to Gradle i Maven. 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 iTerm2

  • Sklonuj projekt:

    git clone https://gitlab.com/qalabs/blog/junit5-gradle-template.git

  • Przejdź 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
2
3
4
5
6
7
8
9
10
Starting a Gradle Daemon (subsequent builds will be faster)

> Task :test

pl.qalabs.blog.junit5.JUnit5Tests > helloJUnit5() PASSED


BUILD SUCCESSFUL in 9s
4 actionable tasks: 4 executed

Tip: Alternatywnie możesz wykonać polecenie ./gradlew clean test, ponieważ projekt zawiera tak zwany Gradle Wrapper, który lokalnie (w katalogu projektu) zainstaluje zależności Gradle wymagane 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 Gradle czy Maven,
  • 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 IntelliJ jest dla Ciebie? Możesz pracować z Eclipse lub Netbeans. Ja przez wiele lat pracowałem z Eclipse, ale dzisiaj nie wyborażam sobie innego IDE niż IntelliJ do tworzenia projektów opartych o JVM.

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ótu command+; lub w menu File | Project Structure oraz ustawień domyślnych dla wszystkich nowych projektów dostępnych w menu File | 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.

Maciej Chmielarz

Nazywam się Maciej Chmielarz. Pracuję w branży informatycznej od 2008 roku. Doświadczenie zdobywałem u pracodawców należących do polskiej i światowej czołówki firm technologicznych, producentów unikatowych rozwiązań inżynierskich. Chętnie dzielę się wiedzą, prowadzę wykłady z testowania oprogramowania, występuję na konferencjach i spotkaniach branżowych oraz aktywnie uczestniczę w ich organizacji. Jestem pasjonatem cyberbezpieczeństwa i budowania świadomości informatycznej w społeczeństwie.