Jako (przyszły) inżynier automatyzacji testów celujący w pracę z Selenium w pewnym momencie dotrzesz do punktu, w którym trzeba będzie podjąć decyzję, w którą stronę iść oraz czego używać do testowania. Świat IT i QA szybko się zmienia, a niektóre z narzędzi i języków, które były kiedyś popularne, dziś już takie nie są. Jak w każdym przypadku, istnieje wiele czynników, które mogą odegrać rolę w podjęciu decyzji. W tym artykule postaram się ułatwić ci to zadanie, przedstawiając zalety i wady łączenia Selenium z dwoma obecnie najpopularniejszymi językami programowania: Javą i Pythonem.
Przejdź do:
- 1. Automatyzacja testów: jakie mamy opcje? Java i Python
- 2. Język programowania czy język skryptowy?
- 3. Czego łatwiej się nauczyć: Javy czy Pythona?
- 4. Automatyzacja testów – jakie są opcje?
- 5. Czym jest Selenium WebDriver?
- 6. Selenium i Python
- 7. Selenium i Java
- 8. Która opcja jest lepsza dla testów automatycznych (Selenium z Pythonem czy Selenium z Javą)?
- 9. Jak wykonać skrypt Selenium w Pythonie?
- 10. Jak zainstalować Selenium z PIP?
- 11. Automatyzacja testów – podsumowanie
- 12. FAQ
Automatyzacja testów: jakie mamy opcje? Java i Python
Każdy z tych języków ma ugruntowaną pozycję, jest niezależny od platformy, zorientowany obiektowo i posiada dużą, wspierającą społeczność użytkowników. Jeśli chodzi o wybór powiązań (ang. bindings) języka Selenium dla Javy i Pythona, powinieneś najpierw zrozumieć kilka kluczowych różnic pomiędzy nimi.
Selenium obsługuje szeroką gamę języków programowania do automatyzacji testów. W tym kontekście Java i Python są najlepszymi kandydatami (i konkurentami) do połączenia z Selenium.
Język programowania czy język skryptowy?
Jednym z głównych pytań, które mogą przyjść ci do głowy, porównując Javę i Pythona, może być: „Czy Python i Java to języki programowania, czy języki skryptowe?”.
Zasadniczo wszystkie języki skryptowe są uważane za języki programowania. Główną różnicą między nimi jest to, że języki programowania są kompilowane, podczas gdy języki skryptowe są interpretowane. Języki skryptowe są wolniejsze niż języki programowania i pozostają zazwyczaj za nimi w tyle.
Szybkie porównanie znajdziesz tutaj: Interpreter vs compiler
Python
Python można nazwać zarówno językiem skryptowym, jak i językiem programowania, ponieważ działa zarówno jako kompilator, jak i interpreter. Standardowy Python może skompilować kod Pythona do kodów bajtowych, a następnie zinterpretować go tak jak Java i C.
„Jednak biorąc pod uwagę historyczny związek między językiem programowania ogólnego przeznaczenia a językiem skryptowym, bardziej właściwe byłoby stwierdzenie, że Python jest językiem programowania, który dobrze działa również jako język skryptowy”.
Interpreter to warstwa oprogramowania, która działa jako pomost między programem a sprzętem systemowym, aby utrzymać działanie kodu. Interpreter Pythona to aplikacja odpowiedzialna za uruchamianie skryptów Pythona.
Java
Java jest na ogół szybsza i bardziej wydajna niż Python, ponieważ jest językiem skompilowanym. Jako język interpretowany, Python z kolei ma prostszą, bardziej zwięzłą składnię. Może pełnić tę samą funkcję co Java, przy użyciu mniejszej liczby linijek kodu. W Javie typy danych zmiennych powinny być zadeklarowane przed ich użyciem, w przeciwieństwie do Pythona. Zdecyduj, co bardziej ci odpowiada.
Czego łatwiej się nauczyć: Javy czy Pythona?
Kolejne pytanie, które może się zrodzić (zwłaszcza gdy dopiero zaczynasz przygodę z programowaniem) brzmi: jak szybko mogę nauczyć się Javy vs. Pythona?
Tu nie ma wątpliwości: Python jest zwycięzcą. Jak wspomniałem, jego składnia jest krótsza i prostsza. Prototypowanie w Javie jest bardziej złożone – przykładowo, obciąża kod dodatkowymi deklaracjami i ograniczeniami. Wybierz Pythona, jeśli nie masz wiele czasu na naukę.
Oto lista kluczowych czynników, które trzeba wziąć pod uwagę przed podjęciem decyzji:
- Oferty pracy: wciąż więcej ofert pracy jest w Javie
- Zmiana pracy / migracja: dzięki skryptowaniu, łatwiej jest w przypadku Pythona, jeśli np. myślisz o kulturze DevOps
- Programowanie zorientowane obiektowo: zarówno Python, jak i Java polegają na programowaniu obiektowym, więc znajomość jednego z tych języków stanowi dobry punkt wyjścia do nauki drugiego
- Niezależne od platformy: zarówno binaria Pythona, jak i Javy (kody bajtowe) po wygenerowaniu mogą być wykonywane na dowolnych obsługiwanych platformach dzięki własnym maszynom wirtualnym (odpowiednio PVM i JVM)
- Prostota: Python jest łatwiejszy w użyciu dzięki prostszej składni
- Wykonanie: jako reprezentacja języka skryptowego Python ma możliwość bezpośredniego uruchamiania kodu skryptu za pomocą interpretera zamiast bezpośredniego uruchamiania kompilatora (np. Javac dla Java)
- Wydajność / szybkość wykonania: Java ma tu przewagę, ponieważ jest szybsza (można skompilować ją JIT, aby była bardziej wydajna)
- Popularność / wsparcie: Java wygrywa w tym zestawieniu jako popularne rozwiązanie, które ma bardzo dużą i wspierającą społeczność programistów
- Python jest językiem statycznie typowanym (sprawdza typ w czasie wykonywania, co oznacza, że twój kod może w ostatniej chwili zawieść)
- Java jest językiem dynamicznie typowanym (sprawdza typ w czasie kompilacji, co oznacza, że wychwytujesz problemy w swoim kodzie wcześniej w procesie tworzenia oprogramowania)
- Rozszerzalność: ponieważ Java jest bardziej popularna, na rynku jest dostępne więcej wtyczek, interfejsów API, frameworków i bibliotek niż w przypadku Pythona
Automatyzacja testów – jakie są opcje?
Selenium zaspokaja określoną potrzebę w świecie automatyzacji testów. Jest tylko dla przeglądarek. Jeśli chcesz szybko rozpocząć automatyzację swoich przypadków testowych, zaprzyjaźnij się z Selenium IDE. Pozwala ono szybko i łatwo rozpocząć automatyzację testów dzięki opcji nagrywania.
Kroki testowe wykonywane w przeglądarce są bezpośrednio przekształcane w zestaw poleceń dzięki Selenese (to wbudowany język Selenium IDE). To bardzo ułatwia zadanie. Ponadto, po zapisaniu testów w zestawie poleceń Selenese, można je agregować w pakiety testowe i ostatecznie eksportować do preferowanych powiązań Selenium (np.: Java, Python itp.).
Selenese i Selenium IDE to dobry początek, ale im bardziej będziesz się zagłębiać w temat automatyzacji aplikacji internetowych, tym wyraźniej dostrzeżesz ich ograniczenia.
Aby solidnie przetestować nowoczesną aplikację internetową z jej dynamicznie zmieniającą się treścią (np. przy użyciu technologii AJAX czy JS), zaczniesz szukać bardziej zaawansowanych opcji. Tutaj z pomocą przychodzi Selenium WebDriver wraz z powiązaniami językowymi Selenium. Selenium WebDriver jest często używany jako baza do testowania aplikacji internetowych.
Zgodnie z sylabusem A4Q Selenium 4 Tester:
„Selenium, gdy jest używane do testowania aplikacji internetowych, potrzebuje pewnych frameworków testowych. Silnik Selenium, jako samodzielne narzędzie, wystawia TAE tylko swoje natywne API jako metody lub funkcje. Inżynier automatyzacji testów musi następnie zaprogramować środowisko testowe, aby użyć tych interfejsów API do przeprowadzenia wymaganych testów. Framework testowy można opracować od podstaw lub wykorzystać już istniejące. Selenium obsługuje wiele frameworków testowych w różnych językach, np.:
Niezależnie od tego, czy korzystasz z własnych frameworków, czy nie, musisz w jakiś sposób sterować wykonywaniem testów. Wielu inżynierów korzysta z bibliotek testów jednostkowych do prowadzenia swoich testów (test runnerów).
Niektóre z nich, takie jak TestNG lub Pytest, oprócz podstawowego zastosowania w testach jednostkowych pozwalają tworzyć testy funkcjonalne wyższego poziomu (funkcjonalne, komponentowe, integracyjne, end-to-end itp.).
Dla Pythona
Najprostszym przypadkiem jest użycie standardowej biblioteki testów jednostkowych Pythona. Alternatywnie możesz użyć bardzo popularnego Pytest.
Dla Javy
Możesz użyć bibliotek xUnit (np. JUnit 4/5) lub TestNG.
Po zaznajomieniu się z uruchamianiem testów lokalnie za pomocą wybranej przeglądarki możesz zrobić krok naprzód i skonfigurować siatkę przeglądarek do zdalnego uruchamiania testów.
W ten sposób testy można uruchamiać na różnych przeglądarkach i kilku systemach operacyjnych na wielu komputerach w trybie równoległym. Jeśli masz sporą konfigurację, możesz przeprowadzić testy regresji w krótkim czasie (w porównaniu z czasem bez Selenium Grid).
Następnie możesz iść o jeszcze jeden krok dalej i zintegrować swoje testy z CI/CD pipeline (np.: uruchomić Selenium Tests w GitLab CI/CD lub Jenkins).
Pamiętaj, że masz możliwość skorzystania z dobrodziejstw konteneryzacji, np. Dockera, aby utworzyć różne obrazy do automatycznych testów interfejsu użytkownika.
W ten sposób możesz przygotować oddzielną maszynę wirtualną dla dowolnej kombinacji środowiska systemu operacyjnego / przeglądarki dla SUT (System Under Test) / AUT (Application Under Test).
CI/CD odgrywa kluczową rolę w tworzeniu cykli życia oprogramowania, w których nowe funkcje są ciągle aktualizowane maksymalnie szybko i wydajnie. Dzięki temu użytkownicy końcowi mają dostęp do nowych funkcji bez konieczności pobierania aktualizacji oprogramowania, co zapewnia im bezproblemową obsługę.
Biorąc pod uwagę krótki czas trwania cyklu wydawania oprogramowania, testy muszą być skalowane, aby dostarczane oprogramowanie było wolne od błędów we wspomnianym przedziale czasowym. W tym miejscu Selenium odgrywa kluczową rolę, umożliwiając automatyzację testów w CI/CD pipeline.
Dzięki automatyzacji z Selenium można wykonywać testy równoległe w wymaganej skali, a Dockerem, z pomocą kontenerów, pomaga to utrzymać środowisko testowe w dobrym stanie.
Przeczytaj także: Testy akceptacyjne użytkownika (UAT) – dlaczego są ważne?
Czym jest Selenium WebDriver?
Najbardziej wyczerpującym źródłem wiedzy w tym temacie jest strona Selenium WebDriver:
„Selenium WebDriver odnosi się zarówno do powiązań językowych, jak i implementacji kodu sterującego danej przeglądarki. Powszechnie używa się po prostu określenia WebDriver”.
lub cytując sylabus A4Q:
„Selenium WebDriver, jak sama nazwa wskazuje, współdziała z przeglądarką w taki sam sposób, jak zrobiłby to prawdziwy użytkownik. WebDriver to kompleksowe narzędzie do kompilacji testów dla aplikacji internetowych, które jest również często określane jako Selenium WebDriver”.
Z architektonicznego punktu widzenia Selenium wszystkie komponenty są odpowiednio zwizualizowane na oficjalnej stronie dokumentacji.
Można powiedzieć, że WebDriver pomaga nam naśladować interakcje użytkownika / przeglądarki i dlatego jest tak pomocne w automatyzacji testów. WebDriver kontroluje przeglądarkę za pomocą właściwych dla niej sterowników, które są zwykle tworzone przez dostawców przeglądarek (np. Google dla Chrome lub Mozilla dla Firefox).
Cała komunikacja jest dwukierunkowa i zgodna z następującymi protokołami:
- dla Selenium 3: JSON Wire Protocol prez HTTP (komunikacja tłumaczona)
- dla Selenium 4: W3C WebDriver Protocol (komunikacja natywna). Zobacz więcej na stronie W3C
Dzięki protokołowi W3C wprowadzonemu w Selenium 4 mamy bezpośredni transfer informacji między klientem a serwerem. Tak więc, jeśli nadal używasz Selenium 3 (WebDriver) i wahasz się, czy zacząć korzystać z wyższej wersji, koniecznie sprawdź informacje na stronie: Upgrade to Selenium 4.
Minimalne wymagane wersje to Java w wersji 8 i Python w wersji 3.7
Selenium i Python
Jeśli wybrałeś tę drogę i jesteś początkujący, wypróbuj Selenium IDE i wygeneruj swój kod Pythona za pomocą funkcji eksportu.
Gdy będziesz już bardziej obeznany z Selenium IDE, przygotuj pełne środowisko programistyczne do automatyzacji testów Selenium / Python.
Przygotuj:
- IDE (PyCharm, Visual Studio Code lub Aqua)
- Python
- PIP (Package Installer for Python)
- Narzędzie do budowania Pipenv ( PIP + Venv/Virtualenv, Poetry lub Bazel)
- Powiązania Selenium z Pythonem
- Sterowniki przeglądarek dla Selenium (Chrome, Firefox, Safari, Opera, Edge or webdriver-manager/SeleniumManager*)
- Test Runner (Unittest lub Pytest)
*Selenium Manager jest dostępny od wersji 4.6 (Beta)
Selenium i Java
Jeśli wybrałeś tę opcję i jesteś początkujący, wypróbuj wtyczkę Selenium IDE dla Chrome lub Firefox i wygeneruj kod Java za pomocą funkcji eksportu:
Gdy już nabędziesz doświadczenia, przygotuj pełne środowisko programistyczne do automatyzacji testów Selenium / Java.
Przygotuj:
- IDE (IDEA, Visual Studio Code lub Aqua)
- Java (JDK)
- Narzędzie do budowania (Maven lub Gradle)
- Powiązania z Selenium w Javie
- Sterowniki przeglądarek dla Selenium (Chrome, Firefox, Safari, Opera, Edge or WebDriverManager/SeleniumManager*)
*Selenium Manager jest dostępny od wersji 4.6 (Beta)
Która opcja jest lepsza dla testów automatycznych (Selenium z Pythonem czy Selenium z Javą)?
Jeśli jesteś całkowicie „zielony” i chcesz sprawdzić możliwości programowania czy automatyzacji za pomocą Selenium z Javą lub Pythonem, proponuję, abyś zaczął od skorzystania z Selenium IDE.
Selenium IDE jest dostarczany w formie dodatku do Chrome, Firefox i Edge (wersja 3.x). Umożliwia wygenerowanie kodu Javy / Pythona za pomocą funkcji eksportu. To bardzo proste – zwyczajnie rejestrujesz swoje działania w przeglądarce. Kod jest następnie generowany za pomocą funkcji eksportu do ulubionego języka. W momencie pisania tego artykułu (czerwiec 2023) możliwe było nawet pobranie samodzielnej wersji (4 alpha) Selenium IDE na kilka platform (np.: Windows, MacOS).
Dowiedz się więcej o najnowszych wersjach Selenium.
Z punktu widzenia automatyzacji, a zwłaszcza integracji CI/CD, wygląda na to, że lepiej sprawdzi się tu duet Selenium i Java. Dobrze wpisuje się w powyższy proces – zazwyczaj natywnie i łatwo dzięki bardzo dobrej integracji z narzędziami takimi jak Jenkins / Maven / Gradle.
Nie oznacza to jednak, że nie można tego osiągnąć za pomocą Pythona. Będzie to co prawda bardziej męczące i wymaga użycia niektórych wtyczek. Ale przypomnijmy: Python oznacza łatwe programowanie i większą czytelność. Jeśli więc nie masz żadnego zaplecza programistycznego w obszarze Javy i Pythona, może kusić cię wykorzystanie drugiego z tych języków.
Jednym z ważnych punktów w procesie rozwoju automatyzacji testów w Selenium jest debugowanie testów. Wiele przeglądarek udostępnia „DevTools” – zestaw narzędzi zintegrowanych z przeglądarką, których programiści mogą używać do debugowania aplikacji internetowych i sprawdzania wydajności swoich stron.
Przejdź do:
- 1. Automatyzacja testów: jakie mamy opcje? Java i Python
- 2. Język programowania czy język skryptowy?
- 3. Czego łatwiej się nauczyć: Javy czy Pythona?
- 4. Automatyzacja testów – jakie są opcje?
- 5. Czym jest Selenium WebDriver?
- 6. Selenium i Python
- 7. Selenium i Java
- 8. Która opcja jest lepsza dla testów automatycznych (Selenium z Pythonem czy Selenium z Javą)?
- 9. Jak wykonać skrypt Selenium w Pythonie?
- 10. Jak zainstalować Selenium z PIP?
- 11. Automatyzacja testów – podsumowanie
- 12. FAQ