Hallo allerseits! Nächste Woche starten wir einen neuen Thread zum Kurs
"Automation Web Testing" . Dies wird das Thema des heutigen Materials sein.
In diesem Artikel werden verschiedene Methoden zum Testen von Software beschrieben, z. B. Komponententests, Integrationstests, Funktionstests, Abnahmetests usw.

Es gibt viele verschiedene Arten von Tests, die Sie anwenden können, um sicherzustellen, dass Änderungen an Ihrem Code per Skript ausgeführt werden. Nicht alle Testarten sind identisch, obwohl wir hier untersuchen, wie sich die Haupttestpraktiken voneinander unterscheiden.
Testen: manuell oder automatisiert?Zuerst müssen Sie die Unterschiede zwischen manuellen und automatisierten Tests verstehen. Manuelle Tests werden direkt von einer Person durchgeführt, die auf Schaltflächen in der Anwendung klickt oder mit Software oder API mit den erforderlichen Tools interagiert. Dies ist ziemlich teuer, da der Tester die Entwicklungsumgebung installieren und die Tests manuell ausführen muss. Es besteht die Wahrscheinlichkeit eines Fehlers aufgrund eines menschlichen Faktors, wie z. B. eines Tippfehlers oder des Überspringens von Schritten in einem Testfall.
Automatisierte Tests werden dagegen von einem Computer ausgeführt, der ein zuvor geschriebenes Testskript ausführt. Solche Tests können je nach Komplexität sehr unterschiedlich sein, vom Testen einer einzelnen Methode in einer Klasse bis zum Ausarbeiten einer Folge komplexer Aktionen in einer Benutzeroberfläche, um sicherzustellen, dass sie ordnungsgemäß funktioniert. Diese Methode wird als zuverlässiger angesehen, ihre Leistung hängt jedoch davon ab, wie gut das zu testende Skript geschrieben wurde.
Automatisierte Tests sind eine Schlüsselkomponente für die
kontinuierliche Integration und die kontinuierliche Bereitstellung sowie eine gute Möglichkeit, Ihren QS-Prozess zu skalieren und Ihrer Anwendung neue Funktionen hinzuzufügen. Manuelle Tests haben jedoch immer noch ihren eigenen Wert. Daher werden wir in dem Artikel definitiv über Erkundungstests sprechen.
Verschiedene Arten von TestsUnit-TestsUnit-Tests gelten als niedrig, nahe am Quellcode Ihrer Anwendung. Sie zielen darauf ab, einzelne Methoden und Funktionen innerhalb von Klassen zu testen und die von Ihrem Programm verwendeten Komponenten und Module zu testen. Unit-Tests erfordern im Allgemeinen keine besonderen Automatisierungskosten und können extrem schnell funktionieren, wenn Sie einen Continuous Integration Server verwenden.
IntegrationstestsIntegrationstests prüfen, ob die von Ihrer Anwendung verwendeten Dienste und Module gut zusammenarbeiten. Sie können beispielsweise die Integration in eine Datenbank testen oder sicherstellen, dass Microservices korrekt miteinander interagieren. Diese Tests sind kostenintensiver, da viele Teile der Anwendung gleichzeitig ausgeführt werden müssen.
FunktionstestsFunktionstests basieren auf den Geschäftsanforderungen für die Anwendung. Sie überprüfen die Ausgabe erst, nachdem die Aktion ausgeführt wurde, und überprüfen nicht die Zwischenzustände des Systems während der Wiedergabe der Aktion.
Manchmal gibt es Widersprüche zwischen Integrationstests und Funktionstests Beide fordern mehrere Komponenten an, die miteinander interagieren. Der Unterschied besteht darin, dass Integrationstests einfach sicherstellen können, dass auf die Datenbank zugegriffen werden kann, während ein Funktionstest einen bestimmten Wert aus der Datenbank abrufen möchte, um eine der Anforderungen für das Endprodukt zu überprüfen.
End-to-End-TestsEnd-to-End-Tests simulieren das Benutzerverhalten bei der Interaktion mit Software. Es wird überprüft, wie genau verschiedene Benutzer dem beabsichtigten Szenario der Anwendung folgen. Dies kann recht einfach sein, z. B. das Laden einer Webseite oder das Aufrufen einer Website oder in einem komplizierteren Fall das Bestätigen einer E-Mail-Adresse, Online-Zahlungen usw.
End-to-End-Tests sind äußerst nützlich, ihre Herstellung ist jedoch teuer und kann schwierig zu automatisieren sein. Es werden mehrere Querschnittstests empfohlen, die sich jedoch eher auf Tests auf niedriger Ebene (Einheits- und Integrationstests) stützen, um wichtige Änderungen schnell erkennen zu können.
AbnahmetestsAbnahmetests sind formale Tests, die durchgeführt werden, um sicherzustellen, dass das System die Geschäftsanforderungen erfüllt. Sie erfordern, dass die Anwendung ausgeführt wird und Benutzeraktionen nachahmt. Akzeptanztests können noch weiter gehen und die Systemleistung messen und kürzlich vorgenommene Änderungen ablehnen, wenn die endgültigen Entwicklungsziele nicht erreicht wurden.
LeistungstestsLeistungstests testen das Verhalten eines Systems unter erheblicher Belastung. Diese Tests sind nicht funktionsfähig und können viele Formen annehmen, um die Zuverlässigkeit, Stabilität und Verfügbarkeit der Plattform zu testen. Beispielsweise kann es die Antwortzeit überwachen, wenn eine große Anzahl von Anforderungen ausgeführt wird, oder beobachten, wie sich das System bei der Interaktion mit Big Data verhält.
Leistungstests sind von Natur aus teuer, können Ihnen jedoch helfen, zu verstehen, welche externen Faktoren Ihr System beeinträchtigen können.
RauchprüfungRauchtests sind grundlegende Tests, die die grundlegende Funktionalität einer Anwendung testen. Sie arbeiten schnell genug und ihr Ziel ist es, klar zu machen, dass die Hauptfunktionen des Systems so funktionieren, wie sie sollten, und nicht mehr. Solche Tests zielen darauf ab, offensichtliche Fehler zu identifizieren.
Rauchtests können unmittelbar nach dem Erstellen eines neuen Builds hilfreich sein, um zu überprüfen, ob Sie teurere Tests ausführen können, oder unmittelbar nach der Bereitstellung, um sicherzustellen, dass die Anwendung in der neuen Umgebung ordnungsgemäß funktioniert.
So automatisieren Sie TestsEin Tester kann alle oben genannten Tests manuell durchführen, dies ist jedoch äußerst kostspielig und unproduktiv. Weil Menschen nur begrenzt in der Lage sind, eine große Anzahl sich wiederholender Aktionen auszuführen, während sie dennoch zuverlässig testen. Das Gerät kann jedoch problemlos dieselben Aktionen reproduzieren und beispielsweise überprüfen, ob die Kombination aus Benutzername und Kennwort zum hundertsten Mal ohne Beschwerden funktioniert.
Um das Testen zu automatisieren, müssen Sie sie zunächst in einigen Programmiersprachen mit einem für Ihre Anwendung geeigneten Testframework schreiben.
PHPUnit ,
Mocha ,
RSpec sind Beispiele für Test-Frameworks, die Sie für PHP, Javascript bzw. Ruby verwenden können. Sie haben viele
Funktionen für jede Sprache, daher sollten Sie selbst ein wenig recherchieren und sich mit den Entwicklergemeinschaften beraten, um herauszufinden, welches Framework für Sie am besten geeignet ist.
Wenn Ihre Tests mithilfe von Skripten vom Terminal ausgeführt werden können, können Sie sie mithilfe eines kontinuierlichen Integrationsservers im Bamboo-Stil oder des Bitbucket Pipelines-Cloud-Servers automatisieren. Diese Tools überwachen Ihre Repositorys und führen Testsuiten aus, sobald neue Änderungen in das Haupt-Repository übernommen werden.

Wenn Sie mit dem Testen noch nicht vertraut sind, lesen Sie unseren Leitfaden zur kontinuierlichen
Integration , um Ihre erste Testsuite zu erstellen.
ForschungstestsJe mehr Funktionen und Verbesserungen zu Ihrem Code hinzugefügt werden, desto größer ist der Testbedarf, da Sie in jeder Phase sicherstellen müssen, dass das System ordnungsgemäß funktioniert. Außerdem wird es jedes Mal benötigt, wenn Sie einen Fehler beheben, da es nicht überflüssig wäre, sicherzustellen, dass es nach mehreren Releases nicht wieder zurückkehrt. Automatisierung ist der Schlüssel, um dies zu ermöglichen. Das Schreiben von Tests früher oder später wird Teil Ihrer Entwicklerpraxis.
Die Frage ist, ob in diesem Fall überhaupt manuelle Tests durchgeführt werden müssen. Die kurze Antwort lautet "Ja" und sollte sich auf sogenannte Erkundungstests konzentrieren, mit deren Hilfe nicht offensichtliche Fehler identifiziert werden können.
Eine Forschungstestsitzung sollte zwei Stunden nicht überschreiten und einen klar definierten Umfang haben, damit sich die Tester auf einen bestimmten Bereich der Software konzentrieren können. Nachdem alle Tester über die Grenzen des Tests informiert wurden, liegt es in ihrem Ermessen, welche Maßnahmen sie ergreifen werden, um das Verhalten des Systems zu überprüfen. Solche Tests sind von Natur aus teuer, aber sehr nützlich, um Probleme mit der Benutzeroberfläche zu identifizieren oder den Zustand komplexer Workflows für Benutzer zu überprüfen. Es ist wichtig, solche Tests immer dann durchzuführen, wenn der Anwendung eine radikal neue Funktion hinzugefügt wird, um zu verstehen, wie sie sich unter Grenzbedingungen verhält.
TesthinweisBevor ich diesen Artikel beende, möchte ich über den Zweck des Testens sprechen. Einerseits ist es sehr wichtig sicherzustellen, dass Benutzer Ihre Anwendung verwenden können ("Ich kann mich nicht anmelden", "Ich kann keine Daten speichern" usw.), andererseits ist es ebenso wichtig, Ihr System zu überprüfen Bricht nicht ab, wenn falsche Daten oder unerwartete Aktionen eingegeben werden. Sie müssen vorhersehen, was passieren wird, wenn ein Benutzer einen Tippfehler macht, versucht, ein unvollständiges Formular zu speichern oder die falsche API verwendet. Sie müssen überprüfen, ob einer der Benutzer die Daten leicht gefährden und Zugriff auf eine bestimmte Ressource erhalten kann, auf die er keinen Zugriff haben sollte. Eine gute Reihe von Tests sollte versuchen, Ihre Anwendung zu beschädigen und die Grenzen ihrer Funktionen zu verstehen.
Und schließlich sind Tests auch Code! Vergessen Sie sie daher nicht bei der Codeüberprüfung, da sie möglicherweise der letzte Schritt vor der Freigabe des Produkts für den Verbrauchermarkt sind.
Gemäß der etablierten Tradition warten wir auf Ihre Kommentare und laden alle zum
Tag der offenen Tür ein , der am 18. März von unserem Lehrer, dem führenden Testautomatisierungsingenieur der Gruppe IB,
Mikhail Samoilov , abgehalten wird.