Geschichte des Themas:
Die Automatisierung des Testens von E-Mail-Benachrichtigungen wurde mit der Entwicklung von Benachrichtigungssystemen (z. B. bei Registrierung, Passwortänderung, Erinnerungen) relevant. Zunächst wurden solche Tests manuell durchgeführt und über reale E-Mails überprüft (was in CI/CD äußerst ineffizient und unsicher ist). Dann kamen spezialisierte Tools (MailHog, Mailtrap, Fake-SMTP-Server) auf, die eine automatisierte und sichere Lösung ermöglichten.
Problem:
Die Hauptschwierigkeiten liegen darin, dass die E-Mail aus dem System "nach außen" gesendet wird. Daher muss man: a) den Versand abfangen, b) den Inhalt der E-Mail überprüfen, c) die Richtigkeit des Versands prüfen (Format der Header, Vorhandensein von Anhängen, Links, i18n, Korrektheit des Ablaufs mit den Ereignissen im System). Hinzu kommen Herausforderungen mit der Liefergeschwindigkeit, der Reinigung der Postfächer zwischen den Tests, dem Umgang mit SMTP-Fehlern.
Lösung:
Verwenden Sie spezielle Dienste zum Abfangen von E-Mails: Mailtrap, MailHog oder integrierte Fake-SMTP-Server, die E-Mails nicht an reale Postfächer senden, sondern sie in einem Test "Posteingang" aufbewahren.
Integrieren Sie die Arbeit mit diesen Tools über API-Frameworks oder REST-Wrapper und implementieren Sie die Erwartung von E-Mails, die Überprüfung der Schlüsselfaktoren der E-Mail, die Validierung von Anhängen und die Überprüfung von korrekten Links.
Generieren Sie eindeutige E-Mail-Adressen für Tests, isolieren Sie Testdaten (z. B. durch Verwendung einer Testdomain) und reinigen Sie die Postfächer vor jedem Ausführen des Autotests.
Überprüfen Sie nicht nur den Text der E-Mail, sondern auch die Funktionsfähigkeit der Links darin, den Versand von verschiedenen SMTP-Servern und die korrekte Anzeige für verschiedene Lokalisierungen und Formate.
Schlüsseleigenschaften:
Ist es möglich, E-Mail-Benachrichtigungen zu testen, indem man E-Mails an gewöhnliche Postfächer bei Gmail/Yandex sendet und sie über IMAP überprüft?
Nein, so machen es viele, aber dieser Ansatz ist unzuverlässig (abhängig vom Betrieb des externen E-Mail-Dienstes, Spam-Filter, keine Isolation zwischen Tests, Schwierigkeiten bei der Reinigung des Postfachs, keine Garantie für die Zustellung).
Reicht es aus, nur zu überprüfen, ob die E-Mail angekommen ist?
Nein, es ist notwendig, den Inhalt, die Anhänge, das Vorhandensein der benötigten Links, das korrekte Sprachmuster und die Übereinstimmung der Header (Von/An/Betreff), sowie die Korrektheit der MIME-Struktur zu validieren.
Kann man den Fake-Posteingang zwischen den Szenarien im Test nicht reinigen, es wird nichts Schlimmes passieren?
Nein! Wenn man den Posteingang zwischen den Tests nicht reinigt, wird es schnell zu Verwirrung kommen und es wird unmöglich sein, Fehler zu erfassen. Die Szenarien werden "fremde" E-Mails "sehen", und die Tests werden ungültig werden.
Tests für E-Mail führten wir über ein Test-Gmail durch, meldeten uns über IMAP an und überprüften nur, dass "etwas angekommen" ist. E-Mails landeten häufig im Spam, einige E-Mails kamen nicht an, und nach dem Start mehrerer paralleler Tests wurde es unmöglich, die E-Mails in einem Posteingang zu analysieren.
Vorteile:
Nachteile:
Wir haben Mailtrap implementiert, eindeutige Posteingänge für jeden Testfall zugewiesen, automatische Reinigung, Inhalt und Anhänge validiert, Wartezeiten und Prüfungen nach Sprachen implementiert.
Vorteile:
Nachteile: