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

17 komentarzy

  1. Hmmm ciekawe.
    Odpalam test, przechodzi na zielono ale mam dziwny warning:

    Testing started at 16:19 …
    /usr/bin/python3.5 /snap/pycharm-community/132/helpers/pycharm/_jb_unittest_runner.py –target auto_test_2.MainTests
    Launching unittests with arguments python -m unittest auto_test_2.MainTests in /home/krzysiek/PycharmProjects/demo_tests

    Ran 3 tests in 12.704s

    OK

    Process finished with exit code 0
    Demobank – Bankowość Internetowa – Konta
    /usr/lib/python3.5/socket.py:603: ResourceWarning: unclosed
    if self.closed:
    Demobank – Bankowość Internetowa – Logowanie
    Demobank – Bankowość Internetowa – Pulpit

    Avatar Krzysztof Glinka
    1. Hej,
      Zakładam, że Twoje testy w tym momencie wyglądają tak jak w tej lekcji, prawda? 🙂
      Sam błąd ResourceWarning: unclosed może wynikać z różnych rzeczy… Parę komentarzy niżej Przemek sugeruje dodanie metod: “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)”.

      Mam nadzieje, że powyższy sposób pomoże 🙂

      Krzysiek Kijas Krzysiek Kijas
  2. Zauważyłam, że po skopiowaniu tekstu do asercji i wklejeniu go w PyCharmie, test nie przechodził, chociaż na pierwszy rzut oka wyglądało tak samo. Wpisałam treść sama i wtedy dostrzegłam, że problemem są myślniki. Te skopiowane są dłuższe, a w PyCharmie używane są te krótkie:
    skopiowane ze strony: Demobank – Bankowość Internetowa – Pulpit
    wpisane samodzielnie: Demobank – Bankowość Internetowa – Pulpit

    Czy można się ustrzec jakoś przed takim formatowaniem tekstu?

    Avatar Katarzyna Przybysz-Amanowicz
    1. Hej,
      To prawda, znak “-” znakowi “–” nie równy 😀 W sumie występują aż trzy typy:
      https://www.thepunctuationguide.com/hyphen.html
      https://www.thepunctuationguide.com/en-dash.html
      https://www.thepunctuationguide.com/em-dash.html

      Różnice pomiędzy nimi, w pewnych warunkach, bywają nie do wychwycenia. Niestety nie znam sposobu zabezpieczenia się przed kłopotami wynikającymi z różnic. Osobiście z problemem “-” vs. “–” w testach, które nie przechodzą, zetknąłem się może ze 3-4 razy, a każdy kolejny raz był znacznie szybciej “ogarniany” 😉 Dlatego myślę, że warto wiedzieć, ze taki problem występuje (szczególnie przy kopiowaniu w dzisiejszych czasach tekstu miedzy rożnymi edytorami, które lubią wprowadzać zmiany i automatycznie poprawiać “-” na “–”), natomiast jeśli chodzi o szukanie rozwiązania – ciężko powiedzieć czy istnieje jakieś proste i mało wysublimowane…

      PS. Prawdziwe różnice pojawiają się w znaczeniu i użytkowaniu https://www.grammarly.com/blog/hyphens-and-dashes/ 😀

      Krzysiek Kijas Krzysiek Kijas
  3. Hej, mam pytanie. Robię dokładnie tak samo jak w szkoleniu, lecz napotykam jeden problem. Za każdym razem kiedy próbuję zrobić test majac napisane 3 tak jak powyżej odpala mi się tylko jeden… Ma ktoś może pomysł o co chodzi ?

    Avatar Dominik Mazur
    1. Hej
      To jest prawdopodobnie związane z problemem z konfiguracją uruchomieniową. W następnej lekcji jest to opisane. Aby uruchomić wszystkie testy to koniecznie trzeba użyć opcji, która odpali wszystkie testy dla całej klasy. Jeśli nie możesz skożystac z takiej konfiguracji to prawdopodobnie trzeba posprzątać (generalnie wszystkie je usunąć i zacząć od nowa uruchamianie testów) w tych automatycznych konfiguracjach (następna lekcja),
      Daj znać czy już się udało 😀

      Przemek Barański Przemek Barański
  4. 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

    Avatar 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
  5. 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

    Avatar Ł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):

        Avatar Łukasz Błaszkowski

Dodaj komentarz

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