Rozbudowa testu automatycznego BDD w Selenium z wykorzystaniem Python i Behave

1 Sierpień 2018
0 Komentarze

W dzisiejszym wpisie zajmiemy się rozbudową testu logowania do poczty Onet i rozszerzymy go o kilka elementów. Wcześniejszy artykuł pod tytułem “Test automatyczny BDD w Selenium z wykorzystaniem Python i Behave – instrukcja krok po kroku” dostępny jest pod tym linkiem


W tym artykule między innymi:

  • Jak dodawać testy sterowane danymi
  • Podstawy obsługi wyjątków
  • Jak generować ciekawe raporty z testów

Zacznijmy od jednej zmiany, którą musimy wprowadzić ze względu na RODO, czyli kliknięcie okna pop-up, które pojawia się w momencie logowania do poczty.

Wybieramy sposób dostania się do elementu “przejdź do serwisu” po CSS:

Dla przypomnienia, aby zlokalizować element użyjemy Narzędzi deweloperskich przeglądarki. W przypadku Google Chrome można użyć skrót klawiszowy Ctrl + Shift + I

Nasz kod będzie teraz wyglądać tak:

 

Selenium najpierw próbuje znaleźć element RODO, a gdy go znajdzie klika w zdefiniowany element. Dzięki temu zabiegowi mamy ponownie dostęp do panelu logowania i możliwość wpisania loginu i hasła.

Następnie powinniśmy wpisać dane logowania, ale w tym momencie dokonamy bardzo istotnej zmiany, która przyda się w testach BDD.

Wcześniej nasze dane do logowania czyli login i hasło były wpisane w pliku login_steps.py i ograniczone były do wpisania danych do logowania jednego użytkownika, a chcielibyśmy żeby nasz test sprawdzał kilka zestawu danych. Dlatego do naszego testu dodamy Data-Driven-Testing z różnymi parametrami wejściowymi.

Czas dokonać kilku modyfikacji w naszym kodzie.

Zacznijmy od naszego pliku login.feature. Dodamy do naszego testu niezbędne modyfikacje. Na początku trzeba dodać do nazwy Scenario słowo Outline, który będzie sugerować behav,e że będzie to test sterowany danymi.

Jako, że username i password będą zmienne należy je umieścić w <>

Do naszego pliku dodajemy na końcu sekcję Examples: w której będziemy umieszczać nasze dane wejściowe. Najpierw podajemy nazwę zmiennej, a pod nazwami zamieszczamy przykładowe dane.

 

Następnie trzeba dokonać modyfikacji w kodzie Pythona w pliku login_steps.py

Nasz login i hasło nie musi być już przechowany jako zmiana w kodzie, więc te linijki możemy usunąć.

Usuwamy:

password = ‚zmienna z hasłem’

context.driver.find_element_by_id(‚f_login’).send_keys(‚[email protected]’)

 

Kod powinien wyglądać tak:

 

Dane wyjściowe, które znajdują się w pliku login.feature umieszczamy w nawiasie klamrowym {}
Testy powinny być niezależne, dlatego dokonamy niezbędne zmiany w pliku enviroment.py

 

 

Zmiana powoduje, że po wykonaniu każdego scenariuszu przeglądarka zostanie zamknięta. Gdybyśmy zostawili kod taki, jaki był w pierwszym artykule, po wykonaniu przypadku testowego i zalogowaniu się do poczty Selenium wykonałoby próbę wykonania kolejnego przypadku testowego.

Teraz po wpisaniu polecenia behave zostanie wykonane zostanie sprawdzenie przypadku testowego z pierwszym zestawem (login i hasło), a następnie automatycznie zostaną sprawdzone kolejne dane logowania, więc w łatwy sposób możemy sprawdzić duży zestaw danych łatwy do zarządzania i modyfikacji.

 

Nasz przypadek testowy obejmował sprawdzenie logowania po wpisaniu poprawnych danych logowania. Teraz dodamy kolejny przypadek testowy sprawdzający zachowanie, gdy użytkownik wpisze błędny dane logowania – przypadek negatywny.

Czyli analogicznie tworzymy kolejny Scenario Outline w pliku login.feature:

 

Dodatkowo, w tym przypadku możemy korzystać z już zdefiniowanych kroków. W kodzie python-a w pliku login_steps.py nie ma już potrzeby kodowania kroków poprzez Selenium (na przykład otwarcia przeglądarki i wejścia na adres poczty oraz sprawdzenia asercji).

W tym momencie zastosujemy kolejną nowość (yeeeahh! ;), a mianowicie obsługę wyjątków. Będziemy chcieli sprawdzić, czy w przypadku wpisania niepoprawnych danych wyświetli się komunikat.

 

Więcej o obsłudze wyjątków w dokumentacji Pythona:

Zacznijmy od dodania biblioteki do obsługi wyjątków:

 

Schemat obsługi wyjątków składa się z elementu try, które Selenium najpierw próbuje wykonać oraz except czyli czynności jakie Selenium dokona w przypadku niepowodzenia kodu z try.

Nasz test zaczyna od znalezienia elementu z alertem błędu, np. gdy użytkownik wpisze nieprawidłowy format e-mail lub błędne dane logowania. Test sprawdza, czy odpowiedni tekst znajduje się w treści alertu. W przypadku braku odpowiedniej wiadomości test zwróci wyjątek i komunikat “Alert not found” w naszym przypadku.

Jak już poznaliśmy podstawy obsługi wyjątków, można ją dodać do naszego sprawdzenia komunikatu o RODO.

 

Do naszego testu w sekcji logowania z nieprawidłowymi danymi dodamy jeden zestaw danych z prawidłowymi danymi logowania, aby spowodować brak wyświetlenia alertu i sprawdzić czy obsługa wyjątków działa.

Więc podmienimy:

na :

 

Teraz używamy dobrze znane polecenie behave w cmd i naszym oczom ukaże się komunikat:

Na końcu pierwszego artykułu o testowaniu automatycznynm BDD w Selenium można było zobaczyć raport z testu w przeglądarce internetowej. Obecnie wynik z naszego testu nie jest przyjemny dla oka i na pewno nie jest user-friendly. BDD ma na celu zobaczenie działania testu także osobom nietechnicznym, dlatego wynik powinien być prezentowany w sposób bardziej przyjazny użytkownikowi. W tym momencie zajmiemy się tym aspektem.

Pisząc na studiach podyplomowych – Tester Oprogramowania, razem ze wspaniałą grupą (pozdrowienia dla Karoliny, Kasi, Ani i Michała) pracę dyplomową pt.: Projekt i wykonanie automatycznych testów funkcjonalnych wg filozofii BDD za pomocą behave (Python) i Selenium jedną z moich ról było zajęcie się raportami z testu. W moich poszukiwaniach natknąłem się na framework allure służący do graficznej prezentacji wyników testów.

Strona projektu:

http://allure.qatools.ru/

https://github.com/allure-framework

 

Instalacja Allure:

Krok 1: Uruchomienie powershell

Krok 2: Z poziomu powershell instalacja scoop

Polecenie: iex (new-object net.webclient).downloadstring(‚https://get.scoop.sh’)

Krok 3: Instalacja allure w Powershell: scoop install allure

Krok 4: Instalacja biblioteki Allure: pip install allure-behave

 

W naszym kodzie spostrzegawcze osoby mogły zauważyć taką oto linijkę:

Ten fragment kodu jest odpowiedzialny za dołączenie screenshotu z testu bezpośrednio do naszego raportu wygenerowanego za pomocą allure. Bardzo fajna rzecz.

Jak już podstawy mamy omówione, można uruchomić polecenie i zobaczyć nasz nowy zdecydowanie bardziej user-friendly raport z testów.

Uruchamiamy powershell i wpisujemy polecenie:

behave -f allure_behave.formatter:AllureFormatter -o raport ./features

Behave to standardowe polecenie, które w cmd wykona test z wykorzystaniem frameworka behave. My w tym momencie chcemy skorzystać z dodatkowego formatowania dlatego dodajemy parametr -f oraz dalszą część odpowiedzialną za zapisania raportu w formacie allure.

 

Teraz gdy cały test się wykona – czas na ujrzenie naszego nowego raportu:

W powershell wpisujemy polecenie:

allure serve raport

Raport to zdefiniowany katalog do zapisania raportu z testów.

 

Jak wygląda allure w praktyce:

 

Podsumowanie wyniku testów:

Lista przypadków testowych wraz z wynikiem i danymi użytymi w danym przypadku:

W allure istnieje możliwość dodania screenshotu wprost do raportu

W allure łatwo można zobaczyć przypadki testowe, w których odnotowany został błąd oraz można przejrzeć wcześniejsze testy:

Allure oferuje także wykresy i statystyki:

 

Cały kod z testu dostępny na GitHub pod adresem:

https://github.com/anditpl/onet-bdd

W następnej części postaram się 😉 na stworzonym przez nas projekcie zastosować Page Object Pattern.

 

Łukasz Krause
Młodszy Inżynier ds. testów i analiz w Sii Polska, certyfikowany tester oprogramowania (ISTQB Foundation Level) oraz autor bloga www.and-it.pl. Od zawsze miłujący nowinki technologiczne i "zabawki mobilne". Dotychczas świat technologii traktowałem jako hobby, od niedawna ścieżka kariery zmierza w kierunku testowania oprogramowania. Prywatnie ojciec psa i kota ;)

Dodaj komentarz

avatar
  Subscribe  
Powiadom o