Umgang mit Selenium-Tests, die während der automatischen Bereitstellung gelegentlich fehlschlagen

8

Wir haben eine C # / ASP .Net-Webanwendung, die vom Build-Server (Jenkins) erstellt und bereitgestellt wird. Einer der Build-Schritte vor der automatisierten Bereitstellung stellt sicher, dass alle automatisierten Tests bestanden werden - einschließlich der Funktionstests, die wir mit Selenium 2 WebDriver und NUnit durchführen.

Das Problem: Manchmal scheitern diese Tests zufällig. Sie werden für 100 Builds erfolgreich sein und dann fällt einer einfach aus. Sie scheitern aus verschiedenen Gründen - ein .Click () Event wird einfach ignoriert, Element kann nicht gefunden werden, IE hat einen schlechten Tag, etc. Wir haben eine AJAX Heavy Web App und so hängen wir stark von WebDriverWaits ab, aber wir nehmen immer dies berücksichtigt beim Schreiben von Tests, und wie ich schon sagte die Tests die meiste Zeit.

Was sind einige Möglichkeiten, dieses Problem zu vermeiden oder zu beheben? Ein Paar, das mir in den Sinn kam:

  • Akzeptiere eine bestimmte Anzahl von Fehlern (scheint eine schlechte Idee zu sein)
  • Erneute Testfehler?
Kryptic 30.11.2011, 21:42
quelle

2 Antworten

9

Ich mag keinen der Vorschläge, die Sie erwähnen, aber ich gebe zu, sie gelegentlich benutzt zu haben. Das beste, was zu tun ist, ist sicherzustellen, dass, wenn es einen scheinbar "zufälligen" Fehler gibt, alles zu tun, um alle Daten darüber zu bekommen, warum es wirklich gescheitert ist. War es ein Umweltproblem? Hat ein anderer Prozess an der Maschine die Tests beeinträchtigt? War es ein Timing-Problem, das nur dann auftritt, wenn die Website quälend langsam oder blitzschnell geladen wird?

Eine Sache, die Sie versuchen könnten, ist das Testen Ihrer automatisierten Tests. Führen Sie jeden 100 Mal auf demselben Build und derselben Umgebung aus (damit Sie diese als potenzielle Fehlerpunkte ausschließen können) und finden Sie diejenigen, die gelegentlich fehlschlagen. Sehen Sie, ob sie am gleichen Ort oder an verschiedenen Orten ausfallen. Im Allgemeinen, wenn Sie diese Übung durchlaufen, werden Sie einige Tests finden, die wirklich ein bisschen flockig sind, und Sie können sie vom täglichen Lauf entfernen, bis sie behoben sind. Sie können sogar ein Einweichen als Check-In-Kriterium für jeden automatisierten Testfall hinzufügen.

Eine weitere nützliche Sache, die ich gefunden habe, die mir geholfen hat, einige der scheinbar zufälligen Fehler auf den Grund zu gehen, war das Erstellen von Screenshots nach einem Fehlschlag. Oft kann man sehen, dass andere Fenster oder Dialoge aufgetaucht sind, was dazu geführt hat, dass die Browser nicht im Vordergrund stehen können, usw.

    
Sam Woods 30.11.2011, 23:32
quelle
5

Von den beiden würde ich es vorziehen, Testfehler erneut auszuführen, oder vielmehr, bei Testversagen, die Tests erneut zu versuchen.

Wenn Sie eine bestimmte Anzahl von Testfehlern akzeptieren, treten Probleme auf, bei denen Tests fehlschlagen können. Sie müssten zwei Testsätze haben, von denen einige ausfallen können, andere nicht.

Beim erneuten Ausführen bin ich kein Experte für das Testen mit NUnit, aber Sie könnten die Tests selbst verwalten lassen. In JUnit können Sie eine Regel einführen, sodass bei einem fehlgeschlagenen Test maximal drei Wiederholungen durchgeführt werden. Dies würde wahrscheinlich die meisten Probleme vermeiden, die Sie haben. Ich weiß nicht, wie man das in NUnit macht, aber siehe meine Antwort zu Wie werden fehlgeschlagene JUnit-Tests sofort erneut ausgeführt? . Dies wird Ihnen die allgemeine Idee geben.

    
Matthew Farwell 01.12.2011 07:38
quelle