Podsumowanie sekcji 4a oraz kod
Zrobiliśmy w tej sekcji prawdziwy debug frameworka. Poznaliśmy przykłady z prawdziwego życia testera oraz odkryliśmy wiele nieoczywistych praw debugowania
Podsumujmy tematy w których powinieneś nabyć podstawową wiedzę:
- ✅ Uruchomienie debugowania pojedynczego testu.
- ✅ Obserwacja wyników w konsoli.
- ✅ Podgląd obiektu
self
jako miejsca przechowywania informacji o dziedziczonych własnościach. - ✅ Analiza widoku Frames i składowych testu (np. dekoratora).
- ✅ Przeprowadzenie debug testu w konsoli (funkcja
brakpoint()
. - ✅ Przeprowadzenie debug funkcji opakowującej drivera.
- ✅ Debug za pomocą
print()
, gdy nie jesteśmy w stanie debugować tradycyjnie. - ✅ Mutowanie testów w celu sprawdzenia poprawności ich działania.
- ✅ Uruchomienie zestawu testów w trybie Debug w celu debugowania pojedynczego testu.
- ✅ Podgląd breakpointów w zakładce Favorites i zarządzanie nimi.
- ✅ Mutacja testu poprzez usunięcie czekania i pozytywne zakończenie w Debug.
Dodatkowe operacje:
- 💡 Nie zawsze wierzymy debuggerowi z IDE. Czasem potrzeba innych rozwiązań.
- 💡 Wiedza o debugowaniu z konsoli oraz za pomocą
print()
nie jest kluczowa ale może nam pomóc w niestandardowych sytuacjach. - 💡 Mutowanie testów (intencjonalne psucie) wraz z debugowaniem pozwala na poprawę jakości naszych testów.
- 💡 Praca nad testami w trybie Debug nie odzwierciedla bezpośrednio standardowego uruchomienia testów dlatego ważne jest aby weryfikować testy poprzez tradycyjne uruchomienie.
- 💡 Zarządzanie breakpointami i ich poprawne umieszczenie (np. w klasie bazowej) pozwala nam na zrozumienie naszego kodu i sprawne po nim się przemieszczanie podczas trybu Debug.
- 💡 Czasem aby wykazać błąd potrzeba debugować cały zestaw testów i powinniśmy wiedzieć jak to zrobić.
Przerobiłeś tematy które możemy nazwać zaawansowanymi podstawami💪
Powinieneś nie bać się debugowania nawet bardziej kompleksowych rozwiązań i zachęcamy Ciebie abyś robił to jak najczęściej. Dzięki temu nabierzesz wprawy oraz dużo sprawniej zadbasz o jakość swoich testów.
Dobra robota! Do zobaczenia w kolejnej sekcji 😎
Kod zmodyfikowany w tej sekcji
Jedyne co zmodyfikowaliśmy to kod klasy ScreenshotListener()
z pliku helpers/operational_helpers.py:
class ScreenshotListener(AbstractEventListener): def on_exception(self, exception, driver): # PyCharm debugger cause exception so we need to ignore it pycharm_debugger_exceptions = [ "'WebElement' object has no attribute '__len__'", "'WebDriver' object has no attribute '__len__'", "'WebDriver' object has no attribute 'shape'", "'WebElement' object has no attribute 'shape'" ] if str(exception) not in pycharm_debugger_exceptions: make_screenshot(driver, 'driver')