Back-Ends von inhaltsorientierten Webanwendungen testen

Das Testen des Back-Ends einer Webanwendung ist ein wichtiger Teil des Entwicklungsprozesses und jeder laufenden Überwachung. Weitere Informationen finden Sie unter Front-End testen.

Testgesteuerte Entwicklung

Im Rahmen der testgesteuerten Entwicklung (TDD) werden Anwendungsanforderungen in Testläufe umgewandelt, bevor eine Anwendung vollständig implementiert wird. Während der Entwicklung werden diese Tests zuerst geschrieben und dann nacheinander implementiert, wenn die Anwendung erstellt wird. Klare Anforderungen (z. B. Testläufe) sorgen dafür, dass der endgültige Code gut strukturiert ist, alle Anforderungen erfüllt und korrekt ist. Dies ist besonders in den frühen Phasen der Entwicklung wichtig.

Continuous Integration und automatisierte Tests

Bei Continuous-Integration-Tests (CI) werden automatisch Tests für Codeänderungen durchgeführt, z. B. während Codeüberprüfungen oder wenn Code in Ihr Code-Repository zusammengeführt wurde. Automatisierte Tests verbessern die Gesamtqualität und das Vertrauen in den gesendeten Code, indem das Risiko von Fehlern oder Regressionen während der Entwicklung verringert wird. Es wird empfohlen, ein automatisiertes Testsystem für Ihre Umgebung einzurichten, um die Integrität Ihrer Anwendung zu prüfen. Verwenden Sie ein von Ihrer Architektur, Plattform und Sprache unterstütztes System, das nahtlos in Ihre Entwicklungspipeline eingebunden ist. Verwenden Sie beispielsweise GitHub-Aktionen für einen CI-Workflow oder eine benutzerdefinierte, in die Cloud integrierte CI-Pipeline, die an Ihre Konfiguration angepasst ist.

Weitere Informationen zu den Prinzipien von automatisierten Tests und zur Verbesserung von Tests Weitere Informationen zu Continuous Integration-Tests und den Best Practices für die Implementierung, Einrichtung und Erfolgsmessung

Ziehen Sie als nächsten Schritt eine automatisierte CD-Pipeline (Continuous Continuous Delivery) in Betracht, um Änderungen und Aktualisierungen für Ihre Anwendung automatisch bereitzustellen.

Unittest

Einheitentests beziehen sich auf das isolierte Testen kleiner, in sich geschlossener Codeteile. Verwenden Sie ein Framework für Einheitentests, das für Ihre Back-End-Sprache bzw. Ihr Back-End-Framework empfohlen und beliebt ist. Verwenden Sie beispielsweise für eine monolithische Java-basierte Anwendung JUnit oder für eine JavaScript-basierte serverlose Anwendung (einschließlich Dart oder TypeScript) ein Framework, das für JavaScript-Tests erstellt wurde, wie Jest.

Die meisten modernen Back-End-Frameworks haben dedizierte Ressourcen zum Testen. Ziehen Sie in Betracht, diese Features in Ihre CI-Pipeline zu integrieren, um Tests zu automatisieren. Sorgen Sie dafür, dass die Einheitentests eine gute Codeabdeckung für Ihre Anwendung bieten. Die meisten Test-Frameworks bieten Funktionen, mit denen Sie Ihre Testabdeckung analysieren und Berichte dazu erstellen und in Ihre Build-Pipeline einbinden können.

Integrationstests

Integrationstests sind das gemeinsame Testen größerer Module oder Teile einer Anwendung. Im Vergleich zu Einheitentests (die sich auf einzelne Teile des Codes konzentrieren) konzentrieren sich Integrationstests auf die Integration einzelner Teile Ihrer Architektur. Dies kann auch End-to-End-Abläufe umfassen, die mehrere Schritte und Module innerhalb der Anwendung umfassen.

Integrationstests können verschiedene Module Ihrer Anwendung abdecken, die möglicherweise eine Interaktion mit externen Diensten wie Datenspeicherung, Dateisystemen oder Zahlungen erfordern. Erwägen Sie, Ihre Anwendung so zu strukturieren, dass Abstraktionen für diese Dienste durch Abhängigkeitsinjektion oder ähnliche Funktionen, die von Ihrem Back-End-Framework bereitgestellt werden, unterstützt werden.

Verhaltens- und Funktionstests

Wenn sich das Back-End (oder einzelne Module oder Komponenten) als undurchsichtiges Feld nähert, konzentrieren sich Funktionstests auf die Ein- und Ausgabe des Systems. Während Verhaltenstests für das Front-End möglicherweise häufiger vorkommen, spielen sie auch eine wichtige Rolle bei der Bestätigung der End-to-End-Integrität eines Back-End-Systems. Diese Arten von Tests bestätigen, dass das System auf verschiedene Eingaben wie erwartet reagiert und sich so verhält.

Regressionstests

Regressionstests sind Tests, die bestätigen, dass sich die Anwendung noch wie erwartet verhält. Zuvor erfolgreich abgeschlossene Tests werden für alle neuen Änderungen noch einmal ausgeführt, um sicherzustellen, dass durch die Änderungen keine früheren Probleme noch einmal verursacht wurden. Wenn Fehler in einer Anwendung behoben werden, sollten Einheiten- oder Integrationstests hinzugefügt werden, damit der Fehler nicht wiederholt. Regressionstests sollten in die üblichen Tests und die Build-Pipeline eingebunden werden.

Rauchtests

Smoke-Tests, auch Build-Überprüfungstests genannt, konzentrieren sich auf die Überprüfung der wichtigsten Funktionen Ihrer Back-End-Anwendung. Smoke Testing geht über Integrationstests hinaus, bei denen einige Funktionen und externe Abhängigkeiten abstrahiert werden. Sie decken die kritischen Anwendungsfälle für Ihre Anwendung ab. Smoke-Tests können als zusätzliche Verifizierungsebene dienen, bevor eine Anwendung in die Staging-Umgebung hochgestuft wird, um ein genaues Verhalten zu gewährleisten. Smoke-Tests können aus automatisierten Einheitentests oder manuellen Funktionstests bestehen, die von einem QA-Team durchgeführt werden.

Produktions- und Staging-Umgebungen

Eine Staging-Umgebung ist eine Kopie Ihrer Produktionsumgebung, die in einer Sandbox ausgeführt wird, um Tests zu erleichtern. Eine dedizierte Bereitstellung verringert das Risiko von Problemen mit der Produktionsumgebung und erleichtert die Durchführung von Qualitätssicherungen. In der Staging-Umgebung können Sie ein System in der Nähe der Live-Produktionsumgebung testen.

Eine 1-für-1-Kopie der Produktionsumgebung ist möglicherweise aufgrund von Faktoren wie Kosten oder der Komplexität der Back-End-Architektur nicht möglich. Überlegen Sie, welche Teile des Back-Ends am wichtigsten sind, und optimieren Sie diese für eine Staging-Umgebung.

Tests mit in der Produktion verwendeten Daten bieten einen großen Vorteil, um zu testen, wie sich die Anwendung mit realen Daten verhält. Berücksichtigen Sie die Auswirkungen auf den Datenschutz und die Datenspeicheranforderungen für eine solche Staging-Umgebung und gestalten Sie die von Ihrem Back-End-System verwendeten Daten sorgfältig. Der Zugriff auf eine solche Umgebung sollte streng kontrolliert werden, insbesondere wenn Produktionsdaten verwendet werden.

Überlegen Sie, wie groß Ihr System ist und ob eine Standumgebung für Ihre Anwendung geeignet ist. Rollierende Staging-Umgebungen, die automatisch über ein Continuous Delivery-System bereitgestellt werden können, bieten zusätzliche Möglichkeiten, tägliche oder wöchentliche Builds zu testen und vor der Veröffentlichung genauer zu prüfen.

Ein anderer Ansatz besteht darin, sich stärker auf Continuous-Integration-Tests und automatisierte Systeme als auf eine vollständig bereitgestellte Staging-Umgebung zu stützen. Berücksichtigen Sie den Workflow, den Systemzustand, die Codeabdeckung und die technischen Anforderungen Ihres Teams.