Fließende Behauptungen – Automatisiertes Testtool / Sudo Null IT News

Wadim Gagarinsky

Prüfspezialist bei der Yuztech Group of Companies

Überprüfungen in Autotests sind ein obligatorischer Bestandteil, da die Hauptaufgabe eines jeden Tests darin besteht, das erwartete Ergebnis mit dem tatsächlichen zu vergleichen. Mein Name ist Vadim, ich bin Testspezialist, und in diesem Artikel möchte ich einem der Teile eines jeden Autotests Aufmerksamkeit schenken – Assert. Es scheint, welche Schwierigkeiten können mit dieser auf den ersten Blick einfachen Komponente eines Autotests auftreten? Bei einem meiner Projekte bin ich auf eine Vielzahl von Autotests gestoßen, deren Problem genau die falsch geschriebenen Checks waren. Ich möchte über die Ursachen dieser Schwierigkeiten sprechen und den Weg zur Lösung des Problems teilen, den ich mit dem Team gegangen bin.

Autotest-Probleme

Ich trat dem Projekt bei, als bereits 12.000 Autotests geschrieben worden waren und mehrere tausend weitere darauf warteten, geschrieben zu werden. Das Auto-QA-Team ist in CI/CD-Test-Absturzprotokollen verstrickt. Das Hauptproblem, warum es viel Zeit gekostet hat, war der Mangel an Informationen über die Fehler. Die Asserts-Standardbibliothek wurde verwendet, und ein damit geschriebener Test erzeugte einen Fehler, der es sehr schwierig machte, irgendetwas zu diagnostizieren, ohne in den Code zu schauen.

Testbeispiel:

Fehlerbeispiel:

Erstens wurde die falsche Entscheidung getroffen, die zur Lösung dieses Problems beitrug, aber zu einem anderen führte. Wir haben begonnen, Nachrichten zu Asserts hinzuzufügen.

Codebeispiel:

Fehlerbeispiel:

Das Problem, das sich bei diesem Ansatz ergab, ist die enorme Dauer und Mühe, neue Tests zu schreiben und alte zu pflegen. Die Besonderheit des Projekts besteht darin, dass das Team auf der ganzen Welt verteilt ist, die Menschen daher unterschiedliche Englischkenntnisse hatten und viele Nachrichten ohne Verwendung allgemein anerkannter Normen geschrieben wurden. Das Problem des Mangels an Informationen ist wiedergeboren und in anderer Form erhalten geblieben.

Vorteile der Fluent Assertions Library

Die Fluent Assertions-Bibliothek hat uns geholfen, diese Probleme zu lösen. Der Hauptvorteil der Bibliothek ist ihre Benutzerfreundlichkeit: Das Format zum Schreiben der Prüfung Betreff -> Aktion -> Objekt ist den Menschen vertrauter. Ein weiteres Plus ist der standardmäßig eingebaute Informationsgehalt der Meldungen.

Unser altes Beispiel, aber mit Fluent Assertions, Zeile 26:

Fehlerbeispiel:

Wie Sie sehen können, ist es bei einem gut gewählten Variablennamen nicht schwer, aus Versehen zu verstehen, was genau passiert ist. Der offensichtliche Vorteil ist die enorme Funktionalität dieser Bibliothek, die ich für viele nützliche Anwendungen gefunden habe.

Bibliotheksfunktion

Die Grundfunktionalität, die Standardfunktionen ausführt, umfasst die folgenden Asserts:

Es ist erwähnenswert, dass die meisten Schecks in der Bibliothek ihr Gegenteil mit dem Wort Nicht am Anfang haben.

In den frühen Phasen der Umstellung des Projekts auf Fluent Assertions haben ich und das Team Asserts aus der Standardbibliothek durch diese grundlegenden Prüfungen ersetzt.

Besonderes Augenmerk möchte ich auf die Konstruktion von AssertionScope legen. Mit diesem Design können Sie mehrere Prüfungen zu einem Block zusammenfassen, der ihre gleichzeitige Ausführung durchführt. Warum wird dieser Konstruktion in diesem Artikel besondere Aufmerksamkeit geschenkt?

Die Ausführungszeit von 1 Autotest für das Projekt variierte zwischen 5 und 15 Minuten. Bei der Überprüfung eines fehlgeschlagenen Autotests möchten Sie sicherstellen, dass nicht nur die Ursache des Absturzes behoben wurde, sondern nachfolgende Überprüfungen im selben Test ohne Probleme verlaufen. Ohne diese Konstruktion sieht der Algorithmus zum Arbeiten mit einem fehlgeschlagenen Test wie folgt aus:

  1. Behebung eines Problems, das zum Absturz des Tests führt;

  2. Testlauf mit der Möglichkeit, bei späteren Überprüfungen ein weiteres Problem zu finden;

  3. Wenn das Problem weiterhin gefunden wird, kehren Sie zu Punkt 1 zurück.

Somit kann eine Situation mit N Prüfungen die Autotest-Korrektur auf N * t ausdehnen, wobei t die Zeit ist, zu der dieser Test ausgeführt wurde. Hier kommt AssertionScope ins Spiel.

Ein Beispiel für die Verwendung von AssertionScope:

Fehlerbeispiel:

Wie wir sehen können, überprüfte der Test, nachdem der Test beim ersten Test abgestürzt war, auch die zweite Konstruktion und stellte fest, dass es auch dort ein Problem gab.

Ich werde besonders darauf achten, die Zeit zu messen, die Ihnen diese Bibliothek ermöglicht, aufzutreten.

Beispiel:

Diese Funktionalität wurde in unserem Projekt in Bezug auf endlose Warnungen verwendet, mit denen unsere Anwendung gefüllt war. Mit dieser Funktion haben wir Zeitmessungen zwischen verschiedenen Ereignissen einfach integriert. Übrigens können Sie mit Fluent Assertions die Uhrzeit und das Datum in einer besser lesbaren und verständlicheren Sprache schreiben.

Ein Beispiel für den Vergleich eines Datums, das mithilfe des Konstruktors (Zeile 34) in eine DateTime-Variable geschrieben wurde, und eines Datums, das mithilfe von Fluent Assertions (Zeile 37) geschrieben wurde:

Natürlich können Sie in der Bibliothek nicht nur Daten vergleichen, sondern auch den Unterschied zwischen ihnen feststellen:

Der Einstieg in diese Bibliothek ist sehr einfach. Dazu müssen Sie es nur über den NuGet Package Manager installieren und dann in die gewünschte Klasse schreiben fließende Behauptungen verwenden;

Ein bisschen über Zahlen

Wir, ein Team von 4 Personen, haben 2 Wochen gebraucht, um diese Lösung in das Projekt zu integrieren und in problematischen Tests die alte Funktionalität durch Fluent Assertions zu ersetzen. In den nächsten anderthalb Monaten berührte die Implementierung der Bibliothek die verbleibenden Tests. In weniger als einem Vierteljahr sind wir dazu übergegangen, neue Tests zu schreiben und unser Testprojekt zu erweitern. Jetzt, da ich zu einem neuen Projekt mit viel weniger Tests gekommen war, schlug ich sofort vor, Fluent Assertions zu verwenden, und aktualisierte sehr schnell alle Tests.

Fazit

1) Fließende Behauptungen ermöglichen es Ihnen, Code wie ein Buch auf Englisch zu lesen. In den meisten Fällen werden umständliche, schwierig zu wartende Nachrichten nicht benötigt.

2) Fließende Behauptungen erleichtern die Diagnose eines Problems direkt beim Lesen der Ergebnisse in CI. Dies ist sehr nützlich für groß angelegte Tests, deren Start wiederum viel Zeit des Testers verschwendet.

3) Beim Kompilieren neuer Autotests machen es Fluent Assertions einfach, bereits geschriebene Codeteile zu verwenden, da es nicht schwierig ist, das Geschriebene noch einmal zu verstehen.

Vielen Dank, dass Sie sich die Zeit genommen haben, den Artikel zu lesen. Fühlen Sie sich frei, Ihre Erfahrungen mit Fluent Assertions in den Kommentaren zu teilen.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *