CodeGym /Kurse /Python SELF DE /Testing und Debugging eines Scripts für Stabilität

Testing und Debugging eines Scripts für Stabilität

Python SELF DE
Level 38 , Lektion 4
Verfügbar

1. Methoden zum Testen von Scripts

Willkommen zu unserer Vorlesung über den Lieblingsprozess aller Programmierer – Debugging und Testen! Falls du bereits ein cooles Botchen mit Selenium erstellt hast, ist es jetzt an der Zeit zu lernen, wie du ihn von einem chaotischen Roboter in einen gehorsamen Helfer verwandelst, der nicht nur funktioniert, sondern das auch stabil tut. Schließlich möchtest du nicht, dass dein Bot im entscheidenden Moment plötzlich "eine Pause" einlegt.

Beginnen wir mit der Diskussion über verschiedene Methoden zum Testen deiner Scripts. Testen ist wie ein Pflichtbesuch beim Arzt: Niemand will es, aber ohne geht es nicht. Selbst das brillanteste Script braucht einen Belastungstest und Zuverlässigkeitscheck. Die gute Nachricht: Python bietet viele Tools, die dir dabei helfen können.

Unit-Tests

Alles beginnt mit Unit-Tests. Sie sind wie kleine Schweizer Uhrwerke, die jedes Zahnrad deines Mechanismus prüfen. In Python ist die unittest-Bibliothek der De-facto-Standard für das Schreiben von Unit-Tests. Die Hauptidee besteht darin, einzelne "Units" oder Teile deines Codes isoliert zu testen.


import unittest
from my_selenium_script import my_function

class TestMyFunction(unittest.TestCase):

    def test_success_case(self):
        result = my_function("erwartete Eingabe")
        self.assertEqual(result, "erwartete Ausgabe")

unittest.main()

Dieses einfache Beispiel zeigt, wie du einzelne Funktionen deines Codes prüfen kannst. Natürlich wirst du in der Praxis nicht nur Erfolge überprüfen, sondern auch Grenzfälle und fehlerhafte Eingabedaten.

Integrationstests

Wenn du bereits Vertrauen in jede "Unit" aufgebaut hast, ist es an der Zeit zu prüfen, wie sie miteinander interagieren. Integrationstests sind wie ein perfektes Date, das zeigt, wie einzelne Komponenten zusammenarbeiten. Hier kannst du dieselben Bibliotheken verwenden, musst aber mit einem anderen Ansatz an das Testen herangehen.


class TestIntegration(unittest.TestCase):

    def test_full_workflow(self):
        # Stell dir vor, jeder Schritt ist ein Funktionsaufruf deines Algorithmus
        open_page()
        fill_form()
        submit_form()
        self.assertTrue(check_results())

Integrationstests können komplexer und zeitaufwändiger sein, geben dir aber die Gewissheit, dass das gesamte System als Ganzes funktioniert.

2. Debugging und Fehlerbehebung

Nun, da wir über das Testen gesprochen haben, tauchen wir in den spannenderen Teil ein – das Debugging. Debugging ist, wenn dein Bot beschließt, improvisieren zu wollen, und du versuchst, ihn wieder zum ursprünglichen Plan zurückzubringen.

Debugging-Tools

Ein großartiges Tool für das Debugging in Python ist pdb. Damit kannst du die Ausführung des Scripts pausieren und seinen Zustand Schritt für Schritt untersuchen. Hier ist ein Beispiel:


import pdb

def some_function(value):
    pdb.set_trace()  # Hier wird die Ausführung angehalten
    result = value + 1
    return result

some_function(3)

            

Wenn du diesen Code ausführst, landest du in einer interaktiven Umgebung, in der du den Code Schritt für Schritt durchgehen, Variablenwerte anzeigen, sie ändern und die Programmausführung fortsetzen kannst. Das macht das Leben um einiges einfacher, wenn dein Script scheinbar etwas Merkwürdiges tut.

Visualisierung des Seitenzustands

Für die visuelle Fehlersuche ist es hilfreich, Screenshots der Seite in jedem Ausführungsschritt des Scripts zu speichern. Das hilft dir dabei zu sehen, welche Elemente auf dem Bildschirm angezeigt werden und wie die Seite zur Fehlerzeit aussieht.


driver.save_screenshot("page_state.png")

Strategien zur Fehlerfindung und -behebung

Kein Debugger wird dir leider zeigen, wo der fundamentale logische Fehler in deinem Code liegt. Hier kommen Strategien ins Spiel:

  • Logging: Füge Logging überall hinzu. Wie ein kluger Mensch sagte: "Wenn du nicht weißt, was mit deinem Code passiert, hast du nicht genug Logs." Die Verwendung der logging-Bibliothek hilft, deinen Code nicht mit print()-Funktionen zu überladen und gibt dir mehr Kontrolle.
  • Code laut lesen: Manchmal löst das Gehirn Probleme besser, wenn man beschreibt, was der Code tut. Klingt lustig, aber es funktioniert!
  • Aufteilung in Module: Teile den Code klar in Module oder Funktionen auf. Das macht es einfacher, den Ort des Fehlers zu finden.

3. Analyse deiner Selenium-Scripts

Um ein zuverlässiges Script zu erstellen, ist es wichtig, seine Funktion in verschiedenen Szenarien zu testen. Hier einige Beispiele solcher Szenarien:

Fehlende Elemente auf der Seite

Beim Debugging solltest du sicherstellen, dass alle notwendigen Elemente auf der Seite vorhanden und für Interaktionen zugänglich sind. Verwende die Methode find_elements() und überprüfe die Länge der zurückgegebenen Liste, um NoSuchElementException-Fehler zu vermeiden.


elements = driver.find_elements_by_class_name("class_name")
if len(elements) == 0:
    logging.warning("Elemente wurden nicht gefunden")
else:
    logging.info("Elemente erfolgreich gefunden")

Unvorhergesehene Seitenzustände

Zum Beispiel Seiten mit verschiedenen Ladeformaten oder unterschiedlichen Elementen, die je nach Bedingungen angezeigt werden. Das Script sollte bereit sein, solche Situationen zu handhaben.


try:
    special_offer = driver.find_element(By.ID, "special_offer")
    logging.info("Sonderangebot gefunden und Aktionen durchgeführt")
except NoSuchElementException:
    logging.info("Sonderangebot nicht gefunden, weiter ohne es")

Variable Elemente auf der Seite

Beim Testen muss berücksichtigt werden, dass sich Elemente auf derselben Seite ändern können (z. B. unterschiedliche Banner, Werbeblöcke usw.). Teste das Script unter Berücksichtigung verschiedener Zustände der Seite.

Überprüfung in verschiedenen Browsern

Verschiedene Browser können Seiten unterschiedlich verarbeiten. Um Stabilität zu gewährleisten, ist es sinnvoll, das Script in mehreren Browsern zu testen (z. B. Chrome, Firefox, Edge). Selenium ermöglicht das Starten von Tests in verschiedenen Browsern über verschiedene Webdriver.


from selenium import webdriver

# Starten auf Chrome
driver = webdriver.Chrome()

# Starten auf Firefox
driver = webdriver.Firefox()

# Starten auf Edge
driver = webdriver.Edge()

4. Automatisierung des Script-Testens

Schreiben von Tests mit unittest

Verwende die unittest-Bibliothek, um Tests für verschiedene Teile deines Scripts automatisch auszuführen. Dadurch kannst du regelmäßig die Funktionalität jedes Elements überprüfen.


import unittest
from selenium import webdriver

class SeleniumTest(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.get("https://example.com")

    def test_element_presence(self):
        driver = self.driver
        element = driver.find_element_by_id("submit_button")
        self.assertIsNotNone(element, "Element wurde nicht auf der Seite gefunden")

    def tearDown(self):
        self.driver.quit()

unittest.main()

Erstellung einer Testsuite mit Parametern

Erstelle Testsuiten, um verschiedene Kombinationen von Elementen und Szenarien zu testen. Du könntest z. B. Seiten mit unterschiedlichen Parametern wie verschiedene Formulareingaben überprüfen.

Überprüfung auf Stabilität und Leistung

  • Überprüfe die Stabilität des Scripts bei großen Datenmengen: Stelle sicher, dass das Script in der Lage ist, große Datenmengen zu verarbeiten und über einen längeren Zeitraum zu laufen.
  • Führe regelmäßige Tests durch: Führe Tests regelmäßig durch, um die Stabilität des Scripts zu überwachen, besonders wenn die Website, mit der du arbeitest, häufig aktualisiert wird.
  • Bewerte die Leistung: Vermeide lange Wartezeiten und langsame Elemente. Verwende Timer, um die Ausführungszeit jedes Schritts zu bewerten, und optimiere sie bei Bedarf.
1
Umfrage/Quiz
Fehlerbehebung in Selenium-Skripten, Level 38, Lektion 4
Nicht verfügbar
Fehlerbehebung in Selenium-Skripten
Fehlerbehebung in Selenium-Skripten
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION