Powrót do: Podstawy Testów Automatycznych w Selenium i Python cz. 2 – Twój pierwszy zestaw testów
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ę znajdującą się po prawej stronie ikony 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()
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
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 🙂
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?
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/ 😀
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 ?
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 😀
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
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:
Po uruchomieniu powyższych testów wynik będzie następujący:
Ad 2
Patrz odpowiedź poniżej
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)
Dzięki za odpowiedź, to jeszcze jedno pytanie. Z mojego kodu usunąłem driver.quit() / driver.close() etc. a przeglądarka jest zamykana! Dlaczego?
Ś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ąć.
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
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 🙂
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):
ps. Dzięki za pomoc 🙂
Hej
Dzięki za sprawdzenie tego problemu.
Dodaliśmy specjalną informację na początku lekcji https://jaktestowac.pl/lesson/pt1-mk2-03-konfiguracje-uruchomieniowe-w-pycharm/
Zobacz czy to dla Ciebie zadziałało – jeśli nie koniecznie pisz bo jest to intrygujący problem.
Powodzenia.
Przeniosłem dyskusję na forum aby było to łatwiejsze do ogarniania – można głosować tam na tematy i zakładać nowe 🙂 https://jaktestowac.pl/question/brak-konfiguracji-do-uruchomienia-testow-tylko-do-pliku/