Bewährte Methoden zum Testen von Serverless-Anwendungen - AWS Präskriptive Leitlinien

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Bewährte Methoden zum Testen von Serverless-Anwendungen

In den folgenden Abschnitten werden bewährte Methoden für die Erzielung einer effektiven Abdeckung beim Testen von Serverless-Anwendungen beschrieben.

Priorisieren Sie Tests in der Cloud

Für gut konzipierte Anwendungen können Sie eine Vielzahl von Testtechniken einsetzen, um eine Reihe von Anforderungen und Bedingungen zu erfüllen. Auf der Grundlage der aktuellen Tools empfehlen wir Ihnen jedoch, sich so weit wie möglich auf das Testen in der Cloud zu konzentrieren. Obwohl Tests in der Cloud zu Latenz für Entwickler führen, die Kosten erhöhen und manchmal Investitionen in zusätzliche DevOps-Kontrollen erfordern können, bietet diese Technik die zuverlässigste, genaueste und vollständigste Testabdeckung.

Sie sollten Zugriff auf isolierte Umgebungen haben, in denen Sie Tests durchführen können. Idealerweise sollte jeder Entwickler über ein eigenes AWS-Konto, um Probleme mit der Benennung von Ressourcen zu vermeiden, die auftreten können, wenn mehrere Entwickler, die am selben Code arbeiten, versuchen, API-Aufrufe für Ressourcen mit identischen Namen bereitzustellen oder aufzurufen. Diese Umgebungen sollten mit den entsprechenden Warnungen und Kontrollen konfiguriert werden, um unnötige Ausgaben zu vermeiden. Sie können beispielsweise die Art, Stufe oder Größe der Ressourcen einschränken, die erstellt werden können, und E-Mail-Benachrichtigungen einrichten, wenn die geschätzten Kosten einen bestimmten Schwellenwert überschreiten.

Wenn Sie sich ein einzelnes AWS teilen müssen in Verbindung mit anderen Entwicklern sollten automatisierte Testprozesse Ressourcen so benennen, dass sie für jeden Entwickler eindeutig sind. So können beispielsweise Aktualisierungsskripte oder TOML-Konfigurationsdateien, die AWS SAM-CLI-Befehle für sam deploy oder sam sync auslösen, automatisch einen Stack-Namen angeben, der den Benutzernamen des lokalen Entwicklers enthält.

Das Testen in der Cloud ist für alle Testphasen von Nutzen, einschließlich Einheitentests, Integrationstests und End-to-End-Tests.

Bei Bedarf Mocks verwenden

Mock-Frameworks sind ein wertvolles Tool zum Schreiben schneller Einheitentests. Sie sind besonders wertvoll, wenn Tests komplexe interne Geschäftslogiken wie mathematische oder finanzielle Berechnungen oder Simulationen abdecken müssen. Suchen Sie nach Einheitentests, die eine große Anzahl von Testfällen oder Eingabevariationen enthalten, bei denen die Eingaben das Muster oder den Inhalt von Aufrufen an andere Cloud-Services nicht ändern. Die Erstellung von Mocktests für diese Szenarien kann die Iterationszeiten der Entwickler verbessern.

Code, der durch Komponententests mit Mocks-Tests abgedeckt wird, muss auch durch Tests in der Cloud abgedeckt werden. Dies ist notwendig, da die Mocks immer noch auf dem Laptop oder der Build-Maschine eines Entwicklers laufen und die Umgebung möglicherweise anders konfiguriert ist als in der Cloud. Ihr Code kann zum Beispiel Lambda-Funktionen enthalten, die bei der Ausführung mit bestimmten Eingabeparametern mehr Speicher verwenden oder mehr Zeit in Anspruch nehmen, als Lambda in der Konfiguration zuweist. Oder Ihr Code könnte Umgebungsvariablen enthalten, die nicht auf die gleiche Weise (oder überhaupt nicht) konfiguriert sind, und die Unterschiede könnten dazu führen, dass sich der Code anders verhält oder fehlschlägt.

Verwenden Sie keine Mocks von Cloud-Services, um die ordnungsgemäße Implementierung dieser Serviceintegrationen zu überprüfen. Auch wenn es akzeptabel sein kann, einen Cloud-Service zu simulieren, wenn Sie andere Funktionen testen, sollten Sie Cloud-Service-Aufrufe in der Cloud testen, um die korrekte Konfiguration und funktionale Implementierung zu überprüfen.

Mocks können bei Komponententests einen Mehrwert bieten, vor allem, wenn Sie häufig eine große Anzahl von Fällen testen. Dieser Nutzen verringert sich bei Integrationstests, da der Aufwand für die Implementierung der notwendigen Mocks mit der Anzahl der Verbindungspunkte steigt. Bei End-to-End-Tests dürfen keine Mocks verwendet werden, da sich diese Tests im Allgemeinen mit Zuständen und komplexer Logik befassen, die mit Mock-Frameworks nicht einfach simuliert werden können.

Verwendung von Emulatoren vermeiden

Emulatoren könnten für einige Anwendungsfälle praktisch sein. Beispielsweise kann ein Entwicklungsteam eingeschränkten, inkonsistenten oder langsamen Internetzugang haben. In diesem Fall ist das Testen auf einem Emulator möglicherweise die einzige Möglichkeit, den Code zuverlässig zu iterieren, bevor Sie in eine Cloud-Umgebung wechseln.

Verwenden Sie Emulatoren in den meisten anderen Fällen sparsam. Wenn Sie einen Emulator verwenden, kann es schwierig werden, neue AWS-Service-Feature in Ihre Tests einzubeziehen, bis der Emulationsanbieter ein Update herausgibt, das die gleichen Funktionen bietet. Emulatoren erfordern auch Vorab- und laufende Kosten für den Kauf und die Konfiguration auf mehreren Entwicklungssystemen und Build-Maschinen. Darüber hinaus sind bei vielen Cloud-Services keine Emulatoren verfügbar, und die Auswahl einer Emulationsteststrategie wird die Verwendung dieser Services entweder ausschließen (was zu potenziell teureren Problemumgehungen führen kann) oder zu Code und Konfigurationen führen, die nicht gut getestet wurden.

Wenn die Emulation zum Testen unumgänglich ist, sollten Sie dennoch in der Cloud testen, um sicherzustellen, dass die richtigen Cloud-Konfigurationen vorhanden sind, und Interaktionen mit anderen Cloud-Services zu testen, die in einer emulierten Umgebung nur simuliert oder nachgeahmt werden können.

Bei Bedarf können Emulationstests Feedback für Komponententests liefern. Abhängig von den Features und der Verhaltensparität der Emulationssoftware sind möglicherweise auch einige Arten von Integrationstests und durchgängigen Tests verfügbar.

Feedback-Schleifen beschleunigen

Wenn Sie in der Cloud testen, verwenden Sie Tools und Techniken, um die Feedback-Schleifen zur Entwicklung zu beschleunigen. Verwenden Sie zum Beispiel AWS SAM Accelerate und AWS CDK watch mode, um die Zeit zu verkürzen, die benötigt wird, um Codeänderungen in eine Cloud-Umgebung zu übertragen. In den Beispielen im GitHub Serverless Test Samples Repository werden einige dieser Techniken untersucht.

Wir empfehlen außerdem, Cloud-Ressourcen so früh wie möglich während der Entwicklung von Ihrem lokalen Rechner aus zu erstellen und zu testen – nicht erst nach dem Einchecken in die Versionskontrolle. Diese Praxis ermöglicht ein schnelleres Erkunden und Experimentieren bei der Entwicklung von Lösungen. Die Möglichkeit, die Bereitstellung von einem Entwicklungscomputer aus zu automatisieren, hilft Ihnen zudem, Probleme mit der Cloud-Konfiguration schneller zu erkennen und den Aufwand für die Aktualisierung und Genehmigung von Änderungen in der Versionsverwaltung zu reduzieren.