Testen von Serverless-Anwendungen in AWS - 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.

Testen von Serverless-Anwendungen in AWS

Dan Fox, Rohan Mehta und Rob Hill, Amazon Web Services (AWS)

Dezember 2022 (Dokumentverlauf)

In diesem Leitfaden werden Methoden für das Testen von Serverless-Anwendungen erörtert, die Herausforderungen beschrieben, denen Sie beim Testen begegnen können, und bewährte Methoden vorgestellt. Diese Testtechniken sollen Ihnen helfen, schneller zu iterieren und Ihren Code sicherer zu veröffentlichen.

Dieses Handbuch richtet sich an Entwickler, die Teststrategien für ihre Serverless-Anwendungen entwickeln möchten. Sie können den Leitfaden als Ausgangspunkt verwenden, um mehr über Teststrategien zu erfahren. Besuchen Sie anschließend das Repository für Serverless-Testbeispiele, um Beispiele von Tests zu sehen, die den in diesem Leitfaden beschriebenen Mustern und bewährten Methoden folgen.

Übersicht

Automatisierte Tests sind wichtige Investitionen, die dazu beitragen, die Anwendungsqualität und die Geschwindigkeit der Entwicklung sicherzustellen. Das Testen beschleunigt auch das Feedback für Entwickler. Als Entwickler möchten Sie in der Lage sein, schnell an Ihrer Anwendung zu iterieren und Feedback zur Qualität Ihres Codes zu erhalten. Viele Entwickler sind es gewohnt, Anwendungen zu schreiben, die sie in einer Umgebung auf ihrem Desktop bereitstellen, entweder direkt auf ihrem Betriebssystem oder in einer containerbasierten Umgebung. Wenn Sie in Desktop- oder Container-basierten Umgebungen arbeiten, schreiben Sie in der Regel Tests für Code, der vollständig auf Ihrem Desktop gehostet wird. In Serverless-Anwendungen können Architekturkomponenten jedoch möglicherweise nicht in einer Desktop-Umgebung bereitgestellt werden, sondern sind eventuell nur in der Cloud vorhanden. Eine cloudbasierte Architektur kann Persistenzschichten, Benachrichtigungssysteme, APIs und andere Komponenten umfassen. Wenn Sie Anwendungscode schreiben, der auf diesen Komponenten basiert, kann es schwierig sein, die beste Methode zum Entwerfen und Ausführen von Tests zu ermitteln.

Dieser Leitfaden hilft Ihnen dabei, sich auf eine Teststrategie einzustellen, die Reibungsverluste und Verwirrung reduziert und die Codequalität verbessert.

Voraussetzungen

In diesem Leitfaden wird davon ausgegangen, dass Sie mit den Grundlagen automatisierter Tests vertraut sind, einschließlich der Art und Weise, wie automatisierte Softwaretests zur Sicherstellung der Softwarequalität eingesetzt werden. Das Handbuch bietet eine allgemeine Einführung in die Teststrategie für Serverless-Anwendungen und erfordert keine praktische Erfahrung beim Schreiben von Tests.

Definitionen

In diesem Leitfaden werden die folgenden Begriffe verwendet:

  • Einheitentests sind Tests, die isoliert gegen Code für eine einzelne Architekturkomponente ausgeführt werden.

  • Integrationstests werden mit zwei oder mehr Architekturkomponenten ausgeführt, typischerweise in einer Cloud-Umgebung.

  • Durchgängige Tests – Tests, die das Verhalten einer gesamten Anwendung überprüfen.

  • Emulatoren sind Anwendungen (oft von Drittanbietern bereitgestellt), die darauf ausgelegt sind, einen Cloud-Service nachzuahmen, ohne Ressourcen bereitzustellen oder aufzurufen.

  • Mocks(auch Fälschungen genannt) sind Implementierungen in einer Testanwendung, die eine Abhängigkeit durch eine Simulation dieser Abhängigkeit ersetzen.

Gezielte Geschäftsergebnisse

Die bewährten Methoden in diesem Leitfaden sollen Ihnen helfen, zwei Hauptziele zu erreichen:

  • Steigerung der Qualität von Serverless-Anwendungen

  • Verkürzung des Zeitaufwands für die Implementierung oder Änderung von Features

Erhöhung der Softwarequalität

Die Qualität einer Anwendung hängt in hohem Maße von der Fähigkeit der Entwickler ab, eine Vielzahl von Szenarien zu testen, um die Funktionalität zu überprüfen. Wenn Sie keine automatisierten Tests implementieren oder, was noch typischer ist, wenn Ihre Tests die erforderlichen Szenarien nicht angemessen abdecken, kann die Qualität Ihrer Anwendung weder bestimmt noch garantiert werden.

In einer serverbasierten Architektur können Teams den Testumfang leicht definieren: Jeder Code, der auf dem Anwendungsserver läuft, muss getestet werden. Andere Komponenten, die den Server aufrufen, oder Abhängigkeiten, die der Server aufruft, werden von dem Team, das für die Anwendung auf dem Server verantwortlich ist, häufig als extern betrachtet und können daher nicht getestet werden.

Serverless-Anwendungen bestehen häufig aus kleineren Arbeitseinheiten, wie AWS Lambda-Funktionen, die in ihrer eigenen Umgebung laufen. Teams werden wahrscheinlich für mehrere dieser kleineren Einheiten innerhalb einer einzigen Anwendung zuständig sein. Einige Anwendungsfunktionalitäten können vollständig an verwaltete Services wie Amazon Simple Storage Service (Amazon S3) oder Amazon Simple Queue Service (Amazon SQS) delegiert werden, ohne dass intern entwickelter Code verwendet wird. Herkömmliche serverbasierte Modelle für Softwaretests schließen verwaltete Services möglicherweise aus, da sie als außerhalb der Anwendung betrachtet werden. Dies kann zu einer unzureichenden Abdeckung führen, sodass kritische Szenarien möglicherweise auf manuelle Sondierungstests oder auf einige wenige Integrationstestfälle beschränkt sind, bei denen das Ergebnis je nach Umgebung unterschiedlich ist. Daher kann die Softwarequalität durch die Einführung von Teststrategien, die das Verhalten von verwalteten Services und Cloud-Konfigurationen umfassen, verbessert werden.

Verkürzung des Zeitaufwands für die Implementierung oder Änderung von Features

Softwarefehler und Konfigurationsprobleme haben die geringsten Auswirkungen auf Kosten und Zeitplan, wenn Sie diese Probleme während eines iterativen Entwicklungszyklus abfangen können. Wenn diese Probleme von einem Entwickler nicht entdeckt werden, erfordert die Identifizierung von Problemen zusätzliche Anstrengungen von mehr Mitarbeitern.

Eine Serverless-Architektur kann verwaltete Services umfassen, die wichtige Anwendungsfunktionen über API-Aufrufe bereitstellen. Aus diesem Grund sollte Ihr Entwicklungszyklus Tests beinhalten, die korrekte Funktionalität bei Verwendung dieser Services genau nachweisen. Wenn diese Tests nicht verfügbar sind, können Probleme auftreten, die sich aus den Unterschieden zwischen Ihrer Umgebung und der bereitgestellten Umgebung ergeben. Infolgedessen verbringen Sie möglicherweise noch mehr Zeit damit, einen Fix zu reproduzieren und zu verifizieren, da für die Iteration die Änderungen nun mit einer Umgebung verglichen werden müssen, die sich von Ihrer bevorzugten Konfiguration unterscheidet.

Eine geeignete Serverless-Teststrategie verbessert Ihre Iterationszeit, indem sie genaue Ergebnisse für Tests liefert, die Aufrufe anderer Services beinhalten.