Geschichte eines Fehlers / Sudo Null IT News

Alles begann mit einem Fehlerbericht von einem der Benutzer unseres Frameworks JDI-LichtNullPointerException auf WebPage.open(), genauer gesagt WindowsManager.getWindows()

Der seltsamste Rückgang auf 30% der Tests auf einmal mit einem Fehler. Außerdem fällt entweder viel auf einmal oder gar nicht.

Wir bei JDI sind sehr sensibel für Fehlerberichte von Benutzern, insbesondere von solch fantastischer Qualität – mit einer detaillierten Beschreibung und das war’s.

Die Untersuchung wurde sofort von einem unserer qualifiziertesten Mitwirkenden aufgenommen – Wladimir Klonin (übrigens einer der Gewinner des letztjährigen Automatisierungs-Hackathons in St. Petersburg).

Dies ist kein echtes Bild von Wolodja.  Das Foto zeigt Benedick, unseren, Cumberbatch als Sherlock HolmesDies ist kein echtes Bild von Wolodja. Das Foto zeigt Benedick, unseren, Cumberbatch als Sherlock Holmes

Nicht beim ersten Versuch, aber Volodya hat es geschafft, das Problem stabil auf unserem CI / CD zu reproduzieren
Unsere ursprüngliche Idee war, dass eine solche Regression durch die Erhöhung der Version von Selen verursacht wurde – naja, irgendwo im Projekt wurden Abhängigkeiten von der alten Version beibehalten und dies führt zu einem solchen Effekt. Immerhin ist etwas gefallen – etwas im Fahrer selbst (nein). Was charakteristisch ist – solche Abhängigkeiten – waren wirklich. Aber ihre Korrektur – absolut nichts hat sich geändert.

Dies stürzte uns in eine gewisse Verzweiflung. Fehlerdiagnose ist sehr schlecht.

Anordnung zusätzlicher Diagnostik – führte zu einem erstaunlichen Ergebnis!

Ich möchte Sie daran erinnern, wie JDI Light funktioniert – wenn der Treiber nicht auf dem Computer gefunden wird, verwenden Sie ihn webdrivermanagervom Entwickler entwickelt Boni Garcíaversuchen, es herunterzuladen:

wdm.setup(); logger.info(“Treiber herunterladen: ‘” + Treibername + “‘ erfolgreich”); Treiberheruntergeladen = wahr; downloadedDriverInfo = format(“%s:%s:%s”, Treibertyp, Plattform, Version); TreiberPfad = wdm.getDownloadedDriverPath();

Danach fordert und erhält es das Verzeichnis, in dem es liegt.

Das Erstaunliche ist, dass, obwohl der Setup-Befehl erfolgreich und ohne Fehler ausgeführt wird, sich herausstellt, dass driverPath NULL ist!

Eine oberflächliche Analyse (na ja, als oberflächliche – sie öffneten und lasen die Quellen) zeigte, dass driverPath – verfügbar wird, wenn es heruntergeladen wird. Aber gleichzeitig – das Entpacken in das Zielverzeichnis – wird asynchron durchgeführt. Und wenn das Plattensystem unterlastet oder einfach nur langsam ist, dann kann die Abfrage des Pfades und der Start der Verwendung des Treibers durch Tests schneller passieren, als der Treiber im Zielverzeichnis entpackt wird. Die Situation wird nur noch schlimmer, wenn die Tests in mehreren (vielen) Threads beginnen und der Webtreiber-Manager beginnt, ein Dutzend Kopien desselben Treibers auf einmal herunterzuladen, was die Festplatte noch stärker belastet und noch mehr Zeit in Anspruch nimmt.

Natürlich sind wir hier für die Berichte dieses Problem. Darauf erhielten sie eine ebenso überraschende Antwort. Der Autor hat uns nicht geglaubt:

Auf seiner Maschine - alles funktioniert.Auf seiner Maschine – alles funktioniert.

Außerdem wird diese Funktionalität durch einen Test abgedeckt (natürlich einer, und natürlich in einem Thread betrieben, ha!) – und der Test besteht. Er bat uns, ein funktionierendes Beispiel zu liefern [который будучи запущенным на рандомной машине – гарантировано продемонстрирует проблему, а как вы хотели?]

Hier sind wir natürlich etwas traurig.

In diesem Stadium schloss sich einer unserer aktiven kolumbianischen Mitwirkenden, die Muse unserer Entwicklung, der Frage an – Natascha

Foto der Muse im Internet gefundenFoto der Muse im Internet gefunden

Natascha kam auf eine einfache, aber nicht offensichtliche Sache – sie tat es Pr wodurch ein Single-Threaded-Lauf dieses Tests in einen Multi-Threaded-Lauf umgewandelt wird, der glücklicherweise abstürzt.

Das Ergebnis war völlig unerwartet.

Bonnie hat uns nicht geglaubt. Jetzt ist es endgültig.

Nun, wissen Sie – diese Browser kommen unter die Räder und versuchen, die Tests einzufrieren, um sie zum Absturz zu bringenNun, wissen Sie – diese Browser kommen unter die Räder und versuchen, die Tests einzufrieren, um sie zum Absturz zu bringen

Den Fehler haben wir natürlich behoben, indem wir zusätzliche Überprüfungen in unser Framework aufgenommen haben. Aber nachdem wir diese zahlreichen Stürze korrigiert hatten, entdeckten wir andere, die sehr selten sind.

Aber gegen sie zu kämpfen ist eine andere Geschichte…

Similar Posts

Leave a Reply

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