Kodzimy – dodajemy improty

Kontynuujemy testowanie poznanej w części pierwszej kursu strony https://demobank.jaktestowac.pl/ oraz jej podstrony.

Na początek stworzymy nowy plik z testami auto_test_2.py w folderze demo_tests (w tym samym miejscu gdzie znajduje się plik z pierwszej części kursu).

Od razu dodamy do niego nowy import modułu unittest, który oferuje wiele przydatnych metod do testowania i jest domyślnym modułem Pythona (więc nie trzeba go pobierać jak to było w przypadku Selenium).

import unittest

Następnie dodamy do niego znany nam import selenium:

import unittest
from selenium import webdriver

Zauważ, że nie musimy znowu pobierać pakietu Selenium i od razu jest on rozpoznawany. W poprzednim kursie zaimportowaliśmy ten pakiet i stał on się częścią obecnej instalacji języka Python, dzięki czemu możemy z niego teraz korzystać tak jak z wbudowanych pakietów.

Klasa oraz pierwszy test

Zapoznamy się tu z nowym pojęciem klasy w języku Python poprzez skorzystanie z instrukcji class.

TIP: Czym jest klasa? W dużym uproszczeniu – jest to zbiór metod i wartości, który służy do tworzenia różnychobiektów. Na początku w przypadku testów będziemy tworzyć klasę, która zawierać będzie w sobie wszystkie metody testowe (czyli po prostu testy). W dalszej części kursu opiszemy dokładniej zagadnienia związane z klasami i obiektami.

 

class MainTests:

Oto bardzo prosta deklaracja klasy. Używamy słowa kluczowego class i nadajemy nazwę naszej klasie. W języku Python nazwę klasy konstruujemy ze standardowych znaków alfabetu łącząc poszczególne słowa zaczynając je od dużych liter. Czyli analogicznie chcąc zrobić klasę dla prostych testów nazwiemy ją SimpleTests.
Jak zauważyłeś po nazwie klasy dajemy znak dwukropka : co oznacza, że w następnych liniach musi znaleźć się kod potrzebny aby ta klasa się uruchomiła.

My od razu zabierzemy się za tworzenie specjalnej klasy z testami czyli rozwiniemy naszą deklarację klasy o dodanie nawiasów i wypełnieniem ich kodem z użyciem wcześniej zaimportowanego modułu:

class MainTests(unittest.TestCase):

Nasza klasa teraz korzysta (profesjonalnie: dziedziczy) z gotowych rozwiązań zaimplementowanych w module unittest a dokładnie z innej klasy TestCase, dlatego po nazwie naszej klasy w nawiasach dodaliśmy kod unittest.TestCase.

Następnie dodajemy do naszej klasy kod: własną metodę, która jest właśnie naszym testem.

import unittest
from selenium import webdriver

class MainTests(unittest.TestCase):
    def test_demo_login(self):
        pass

Obowiązuje tu kilka zasad

  1. Korzystamy z instrukcji def tworząc metodę
  2. W nawiasach po nazwie metody umieszczamy parametr self jest zawsze dodawany przy metodach, więcej o nim napiszemy w kolejnych lekcjach tego kursu – niemniej musi tam się znaleźć:)
  3. Po deklaracji instrukcji umieszczamy znak dwukropka :, tak jak w przypadku klasy oznacza to, że będziemy dodawali w naszej metodzie kod 🙂
  4. Dodatkowo nazwę metody musimy zacząć od słowa test (np: test_strona_glowna) – dzięki czemu zostanie ona rozpoznana jako metoda testowa i tak też wykonana.
TIP: Tu pojawiło się słowo kluczowe pass – oznacza ono po prostu pustą linię, która nie robi niczego. Po co taka konstrukcja? Służy głównie do tworzenia “zaślepek metod” – czasem chcemy zdefiniować jedynie nazwy metod w klasie, ale nie chcemy ich jeszcze uzupełniać. Konstrukcja pass jest przydatna przy błędzie IndentationError.

Warto zaznaczyć, że w Pythonie o przynależności danego wiersza do danej funkcji decyduje wielkość wcięcia. Dla przykładu powyższa deklaracja metody powinna posiadać jeden tabulator gdyż należy do klasy zadeklarowanej powyżej. To samo z ciałem metody, które wklejamy z naszego poprzedniego testu – powinno ono zawierać jedno wcięcie pod nazwą metody.

Kopiujemy kod który został stworzony w pierwszym kursie serii Podstawy Testów Automatycznych w Selenium i Python cz. I – Twój pierwszy test automatyczny. Upewniamy się, że adres testowanej strony to https://demobank.jaktestowac.pl/logowanie_etap_1.html, a oczekiwany tytuł to Demobank – Bankowość Internetowa – Logowanie i efekt końcowy to:

import unittest
from selenium import webdriver

class MainTests(unittest.TestCase):
   def test_demo_login(self):
       driver = webdriver.Chrome(executable_path=r"C:\TestFiles\chromedriver.exe")
       driver.get('https://demobank.jaktestowac.pl/logowanie_etap_1.html')
       title = driver.title
       print(title)
       assert 'Demobank - Bankowość Internetowa - Logowanie' == title 
       driver.quit()
TIP: W Pythonie każda konstrukcja (klasa, metoda, pętla itp) musi mieć pod sobą przynajmniej jedną linię kodu z wcięciem gdyż w przeciwnym wypadku dostaniemy błąd IndentationError.

Uruchamianie klasy testowej

Można już uruchomić nowy test. W tym celu należy dodać nową konfigurację uruchomieniową dla klasy testowej co jest czymś odrobinę innym od konfiguracji uruchomieniowej dla pliku, z której korzystaliśmy w poprzednim kursie (różnice i szczegóły omówimy szerzej w kolejnych lekcjach tego kursu).
Jeśli użyjesz skrótu w prawym górnym rogu do uruchomienia testu lub skrótu klawiszowego SHIFT + F10 to wykorzystana zostanie ostatnia używana konfiguracja – czyli w naszym przypadku z poprzedniego kursu. Aby dodać nową konfigurację dla naszej klasy testowej przejdź do Run->Run..->Unittest MainTests a następnie z okienka, które się wyświetliło na środku ekranu wybierz interesującyą nas konfigurację zaczynającą się od Unittestest for auto_test_2…. Na screenach poniżej znajdują się poszczególne kroki:

 

 

Uwaga: Jeśli napotkałeś problemy przejdź do lekcji https://jaktestowac.pl/lesson/pt1-mk2-03-konfiguracje-uruchomieniowe-w-pycharm/ gdzie dokładnie wyjaśniamy dlaczego taka a nie inna konfiguracja uruchomieniowa została zaproponowana na powyższym screenie.

 

Teraz możesz już używać skrótu SHIFT + F10 czyli uruchomisz ostatnio używaną konfigurację testową.
Dodatkowo możesz przełączać się pomiędzy konfiguracjami uruchomieniowymi klikając strzałkę z prawej strony nazwy pliku w oknie konfiguracji w prawym górnym rogu IDE (zaznaczamy to na poniższym obrazku) aby powrócić do szybkiego uruchamiania auto_test_1.py.

Na dole obrazka oznaczyliśmy jak powinien przedstawiać się wynik puszczenia testów:

6 komentarzy

  1. Jestem osobą, która dopiero zaczyna swoją przygodę z Pythonem. Zainstalowałam Pythona 2.7. Jeśli używam kodu zamieszczonego w tej lekcji ale bez:
    “class MainTests(unittest.TestCase):
    def test_demo_login(self):”
    to wszystko działa poprawnie. Kiedy chcę wykorzystać kod z lekcji przeglądarka otwiera się ale nie dzieje się już nic więcej.
    Co może być przyczyną?
    Z góry dziękuję za podpowiedź

    Alex
  2. Fajnie by było, jakby fragment kodu podany jako przykład z def i self, tj.
    ‘def test_main_page(self):
    pass’,

    był tej samej treści co cały kod w przykładzie niżej (tam jest już wpisane:
    ‘def test_demo_login(self):
    pass’.

    Jest to trochę mylące 🙂

    Urszula Surmacewicz

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *