Dodanie kolejnego testu

Dodajmy następny test, w którym sprawdzimy czy podstrona https://demobank.jaktestowac.pl/konta.html zawiera interesujący nas tytuł. Skopiujmy posiadaną metodę testową test_demo_login i nanieśmy w niej kilka zmian:

  • zmieńmy jej nazwę na test_demo_accounts
  • adres strony ma https://demobank.jaktestowac.pl/konta.html
  • oczekiwany tytuł na Demobank – Bankowość Internetowa – Konta

Zrób to manualnie i porównaj czy otrzymasz kod taki jaki przedstawiamy poniżej.
Po zmianach powinniśmy otrzymać metodę identyczną jak poniższy kod:

def test_demo_accounts(self):
   driver = webdriver.Chrome(executable_path=r"C:\TestFiles\chromedriver.exe")
   driver.get('https://demobank.jaktestowac.pl/konta.html')
   title = driver.title
   print(title)
   assert 'Demobank - Bankowość Internetowa - Konta' == title
   driver.quit()

Uruchomienie grupy testów

W poprzedniej lekcj uruchomiliśmy pojedynczy test test_demo_login i korzystaliśmy ze skrótu w prawym górnym rogu lub kombinacji SHIFT+F10 aby go uruchomić. Mając teraz więcej testów chcielibyśmy je uruchomić wszystkie na raz – musimy dodać nową konfigurację uruchomieniową. Klikamy prawym klawiszem myszki na plik auto_test_2.py i wybieramy Run jak na poniższym screenie.

Uwaga: Jeśli napotkałeś problemy przejdź do następnej lekcji gdzie dokładnie wyjaśniamy dlaczego taka a nie inna konfiguracja uruchomieniowa została zaproponowana na poniższym screenie.

Jaki jest wynik?

Wyniki otrzymaliśmy w nowym oknie z ciekawymi funkcjami – więcej o nim w następnej lekcji. Kliknij ikonę /help/img/idea/2017.2/testPassed.png znajdującą się po prawej stronie ikony /help/img/idea/2017.2/run.png aby zobaczyć wykonane testy.

Zadanie do przećwiczenia

Twoim zadaniem będzie samodzielnie dodać jeszcze jeden test dla strony https://demobank.jaktestowac.pl/pulpit.html na której spodziewamy się tytułu Demobank – Bankowość Internetowa – Pulpit. Poniżej znajdziesz pełne rozwiązanie aby sprawdzić swój kod 🙂

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()

   def test_demo_accounts(self):
       driver = webdriver.Chrome(executable_path=r"C:\TestFiles\chromedriver.exe")
       driver.get('https://demobank.jaktestowac.pl/konta.html')
       title = driver.title
       print(title)
       assert 'Demobank - Bankowość Internetowa - Konta' == title
       driver.quit()

   def test_demo_pulpit(self):
       driver = webdriver.Chrome(executable_path=r"C:\TestFiles\chromedriver.exe")
       driver.get('https://demobank.jaktestowac.pl/pulpit.html')
       title = driver.title
       print(title)
       assert 'Demobank - Bankowość Internetowa - Pulpit' == title
       driver.quit()

11 komentarzy

  1. Pytania:
    1) Dlaczego w konsolii widzać, że pierwszym testem był drugi test, przecież kod powinien iść z gory na dół?
    2) U mnie test przechodzi lecz dostaje także taki komunikat, o co chodzi: C:\Users\Python\P3.7.0\lib\threading.py:222: ResourceWarning: unclosed
    self.release = lock.release

    Karol Piątek
    1. Ad 1
      Tak faktycznie jest, ale w obrębie metod, funkcji i prostych skryptów. Jeśli chodzi o testy, to sprawa ma się odrobinę inaczej – testami zarządza TestRunner, który zbiera wszystkie metody testowe ze wszystkich plików, sortuje te metody a następnie uruchamia je w kolejności w jakiej zostały posortowane. Można przeprowadzić prosty eksperyment, żeby zobaczyć, że sortowanie odbywa się po nazwach testów w obrębie danej klasy testowej:

      import unittest
      
      
      class TmpTests(unittest.TestCase):
         def test_2(self):
             print('2')
      
         def test_1(self):
             print('1')
      
         def test_b(self):
             print('b')
      
         def test_a(self):
             print('a')
      

      Po uruchomieniu powyższych testów wynik będzie następujący:

      Ran 4 tests in 0.000s
      
      OK
      Launching unittests with arguments python -m unittest tmp_tests.TmpTests in C:\Projects\git-repos\jaktestowacDemoTests
      1
      2
      a
      b
      
      Process finished with exit code 0
      

      Ad 2
      Patrz odpowiedź poniżej

      Krzysiek Kijas Krzysiek Kijas
    2. AD1. Wywołując wszystkie testy z klasy wykonywane są one w szyku alfabetycznym względem nazw. Masz rację co do wykonania kodu z góry na dół jeśli ten kod jest umieszczony w zwykłym skrypcie. Przy klasach testowych unittest najpierw zaczytuje wszystkie deklaracje metod a następnie rozpoczyna się ich wykonanie.
      AD2. Informacja, która się pojawia wynika z braku metod przygotowujących i oczyszczających klasę testową. Dlatego pojawia się to ostrzeżenie – w naszej opinii niezbyt wymowne 😉 Na szczęście w lekcji https://jaktestowac.pl/lesson/pt1-mk2-05-refaktoryzacja-oczyszczanie-kodu/ opisujemy i dodajemy wspomniane metody (co za tym idzie ostrzeżenie znika)

      Przemek Barański Przemek Barański
        1. Świetne spostrzeżenie. Tak długo jak inicjalizacja drivera będzie w metodzie testowej zostanie on automatycznie uprzątnięty – czyli przeglądarka zostanie zamknięta automatycznie. Jeśli jednak zarządzanie przeglądarką (inicjacja drivera) rozpocznie się poza metodą testową wtedy trzeba zadbać o zamknięcie przeglądarki.
          Możesz to sprawdzić przekładając linię z
          driver = webdriver.Chrome(executable_path=r"C:\TestFiles\chromedriver.exe")
          ponad deklarację klasy czyli przed linię z :
          class MainTests(unittest.TestCase):
          Wtedy przeglądarka się nie zamknie automatycznie.
          W kolejnych lekcjach inicjacja drivera zostanie wyciągnięta poza metody testowe aby uniknąć powielenia identycznego kodu 😀 i będziemy musieli ten temat ogarnąć.

          Przemek Barański Przemek Barański
  2. Witam,

    mam mały problem. Jak chce uruchomić test auto_test_2.py, to po paru sekundach test się kończy i nie uruchamia się przeglądarka Chrome . W konsoli ni ma błędów, a jak uruchamiam test auto_test_1.py, to uruchamia się przeglądarka Chrome i test jest zakończony pozytywnie. Dlaczego nie mogę uruchomić test auto_test_2.py ?

    Tu jest screen :
    https://zapodaj.net/9e8008337fe55.jpg.html

    Małą pomoc

    Łukasz Błaszkowski
    1. Hej
      Wygląda na to, że uruchomiłeś plik z klasą i w takim przypadku rzeczywiście nic nie powinno się stać. Jeśli zobaczysz screena u nas z uruchomienia testów (pierwszy w tej lekcji) to PyCharm zaproponował nam konfigurację “Run Unittest …” i to jest domyślne zachowanie.
      Właśnie analizujemy problem związany z brakiem rozpoznawania testów w pewnych przypadkach przez PyCharm (i uruchomieniem pliku zamiast testów). Sugerujemy przejście do następnej lekcji o konfiguracjach uruchomieniowych – a jeśli tam nie znajdziesz odpowiedzi zawsze można uruchomić testy innym sposobem który opisany jest w pierwszej lekcji kolejnej części kursu – spróbuj i daj znać jak poszło.
      Oczywiście jeśli odnajdziemy rozwiązanie takiego problemu jaki wystąpił u Ciebie natychmiast uaktualnimy lekcję i dodamy stosowny komentarz 🙂

      Przemek Barański Przemek Barański
      1. Hej,

        ja nie mam “Run Unittest …” – ta jak jest pokazane na pierwszej lekcji . Screen na potwierdzenie: https://zapodaj.net/222d81cb65995.jpg.html

        Nie wiem dla czego nie mam “Run Unittest …”

        Sprawdzenie kodu działa przez scratches, ale tam jest możliwości sprawdzenia tylko jednej metody, a nie ma . możliwości sprawdzenia np. 2 metod
        https://zapodaj.net/5b034c04b204e.jpg.html

        Ja mam za komentowane metody def test_demo_accounts(self ) i def test_demo_pulpit(self):

        Łukasz Błaszkowski

Dodaj komentarz

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