Warum „manuelles Herumklicken“ nicht mehr funktioniert?
\n\nStellen Sie sich vor: Sie haben eine Funktion fertiggestellt, auf „Ausführen“ im Editor geklickt, im Browser sieht alles perfekt aus. Sie veröffentlichen es in der Produktion. Und eine Stunde später – Panik: Das Registrierungsformular ist kaputt, weil jemand versehentlich eine CSS-Klasse geändert hat und Ihr Kollege es nicht bemerkt hat. Kommt Ihnen das bekannt vor? Wenn Sie in JavaScript schreiben und Python im Backend verwenden, sind Sie sicherlich schon in die Situation geraten, in der E2E-Tests für JavaScript-Anwendungen Ihren Abend hätten retten können.
\n\nEnd-to-End (E2E)-Tests sind kein Luxus, sondern grundlegende Hygiene für jedes ernsthafte Projekt. Sie imitieren die Aktionen eines echten Benutzers: Klicks, Dateneingabe, Scrollen, Überprüfung von Serverantworten. Und ja, sie funktionieren mit Ihrem Stack – sei es React, Vue, Angular oder einfaches Vanilla-JS.
\n\nIn diesem Artikel werden wir untersuchen, wie Sie End-to-End-Tests für Webanwendungen schmerzfrei mit modernen Tools einführen können. Sie sehen echte Codebeispiele in JavaScript, erfahren, wie Sie E2E mit einem Python-Backend kombinieren, und erhalten eine Checkliste für die Einführung. Los geht's!
\n\nWas ist E2E-Testing und warum brauchen Sie es?
\n\nE2E-Testing (End-to-End) ist der Prozess der Überprüfung des gesamten Benutzerpfads von Anfang bis Ende. Zum Beispiel: Website öffnen → Produkt suchen → in den Warenkorb legen → Bestellung aufgeben → prüfen, ob eine E-Mail eingegangen ist.
\n\nIm Gegensatz zu Unit-Tests (die eine einzelne Funktion prüfen) oder Integrationstests (die die Verbindung zweier Module prüfen), testen End-to-End-JavaScript-Tests das gesamte System – Frontend, Backend, Datenbank, externe APIs.
\n\nWann E2E-Tests besonders wichtig sind
\n- \n
- Sie schreiben alten Code in ein neues Framework um. \n
- Sie haben eine Microservice-Architektur + Python im Backend. \n
- Sie veröffentlichen häufig Releases und haben Angst vor Regressionen. \n
- Kunden beschweren sich über „Bugs“, die sich lokal nicht reproduzieren lassen. \n
Ohne E2E riskieren Sie, von einem Bug durch den Benutzer zu erfahren. Mit E2E erfahren Sie davon eine Minute vor dem Deployment.
\n\nTool-Auswahl: Playwright vs Cypress
\n\nAuf dem Markt gibt es zwei Hauptakteure für die Testautomatisierung mit JavaScript: Playwright (von Microsoft) und Cypress (vom gleichnamigen Unternehmen). Beide sind leistungsstark, aber es gibt Nuancen.
\n\nPlaywright
\n- \n
- Unterstützt alle Browser: Chromium, Firefox, WebKit (Safari). \n
- Funktioniert mit iframes, Tabs, mehreren Seiten. \n
- Wird in JS/TS, Python, C#, Java geschrieben. \n
- Hervorragend geeignet für komplexe Szenarien: Datei-Uploads, Abfangen von Netzwerkanfragen, Emulation mobiler Geräte. \n
Cypress
\n- \n
- Einfachere Syntax, integriertes Dashboard. \n
- Funktioniert nur in Chromium (und Firefox experimentell). \n
- Kann keine mehreren Tabs öffnen. \n
- Ideal für kleinere Projekte und schnellen Start. \n
Unsere Wahl für diesen Artikel ist Playwright, da es Python-Entwicklern näher steht (es gibt eine offizielle Python-API) und 99% der Szenarien abdeckt. Aber wir zeigen auch Cypress anhand eines Beispiels.
\n\nUnseren ersten E2E-Test mit Playwright (JavaScript) schreiben
\n\nDie Installation ist einfach:
\nnpm init -y\nnpm install @playwright/test\nnpx playwright install\n\nJetzt erstellen wir eine Datei tests/example.spec.js. Angenommen, wir testen die Login-Seite auf der Website pythonlib.ru (ja, das ist ein fiktives Beispiel, aber die Logik ist real).
const { test, expect } = require('@playwright/test');\n\ntest('Benutzer kann sich anmelden', async ({ page }) => {\n // 1. Login-Seite öffnen\n await page.goto('https://pythonlib.ru/login');\n\n // 2. Felder ausfüllen\n await page.fill('#email', 'test@example.com');\n await page.fill('#password', 'securePassword123');\n\n // 3. Auf "Anmelden"-Button klicken\n await page.click('button[type="submit"]');\n\n // 4. Auf Weiterleitung zum Dashboard warten\n await page.waitForURL('**/dashboard');\n\n // 5. Prüfen, ob