Gehen Sie einen schnelleren, intelligenteren Weg zur KI-gestützten C/C++-Testautomatisierung. Erfahren Sie mehr >>
Fixieren von Selen in Ihrer CI / CD-Pipeline
Wie rationalisieren Sie Selenium in Ihrer CI/CD-Pipeline? Hier zeigen wir, wie Sie die CI/CD-Pipeline ändern können, um durch CI/CD verursachte Selenium-Testprobleme automatisch zu lösen.
Wie rationalisieren Sie Selenium in Ihrer CI/CD-Pipeline? Hier zeigen wir, wie Sie die CI/CD-Pipeline ändern können, um durch CI/CD verursachte Selenium-Testprobleme automatisch zu lösen.
Das kontinuierliche Ausführen automatisierter Tests mag wie ein Kinderspiel erscheinen. Ein CI-System ist der Schlüssel, um agilen Entwicklungsteams einen sofortigen Einblick in den Zustand ihrer Anwendungen zu geben. Wenn automatisierte Tests bestanden werden, ist die Anwendung fehlerfrei. Wenn die Tests fehlschlagen, ist die Anwendung in irgendeiner Weise defekt. Oder ist es?
Die unglückliche Realität ist, dass automatisierte Tests uns nicht immer ein solches Vertrauen geben, insbesondere wenn wir Selenium-Tests durchführen. Selentests können aus vielen verschiedenen Gründen fehlschlagen, unabhängig davon, ob die Anwendung in irgendeiner Weise beschädigt ist oder sich geändert hat. Diese Probleme sind schön detailliert in ein vorheriger Blog-Beitrag. Hier werde ich erklären, wie die CI / CD-Pipeline geändert wird, um diese Probleme automatisch zu beheben und das Vertrauen in die Testergebnisse des CI-Systems zu verbessern.
CI / CD verstärkt Selen-Testprobleme. Schauen wir uns an, wie das passiert. Erstens führt die Entwicklung zu einigen Codeänderungen. Das CI-System erkennt die Änderung und löst die Build-Pipeline aus. Module werden kompiliert, Komponententests ausgeführt und bestanden (yay!), Und dann wird die Anwendung für die Bereitstellung gepackt. Die Bereitstellungspipeline wird als Nächstes ausgelöst, indem eine Testumgebung bereitgestellt, die zu testende Anwendung bereitgestellt und anschließend die Integrationstests gestartet werden, von denen viele mit Selenium geschrieben wurden. Nicht alle Selen-Tests bestehen. Zu diesem Zeitpunkt benachrichtigt das CI-System verschiedene Personen per E-Mail über die Testfehler. Diese Personen reagieren und verbrennen manchmal viel Zeit mit der Untersuchung und Fehlerbehebung. Produktbesitzer, Manager und andere interessierte Parteien sehen die Fehler auch auf ihren Dashboards, die ihre Aufmerksamkeit von anderen Dingen ablenken. Wenn man weiß, dass die Selentests selbst instabil sind, wie kann man dann darauf vertrauen, dass CI / CD eine echte Regression oder einen echten Defekt gemeldet hat? Wie viel Zeit wird für die Fehlerbehebung bei Fehlalarmen verschwendet?
Das einfache Verbessern von Selentests kann nicht trivial sein und manchmal Versuch und Irrtum beinhalten, insbesondere wenn Probleme zeitweise auftreten oder schwer zu reproduzieren sind. Von einem Build zum anderen gibt es Fehler, die sich verschieben können, wenn kein einziger Test schuld ist. Dies können systemische oder umweltbedingte Probleme sein, die kommen und gehen. Das CI-System kann VM- oder Cloud-basierte Executoren mit inkonsistenten Leistungsmerkmalen verwenden. Tests werden ausgeführt und geben Entwicklerarbeitsstationen weiter, schlagen jedoch in der CI-Automatisierung fehl. Klingt bekannt?
Parasoft Selenic wurde entwickelt, um solche Herausforderungen zu meistern. Selenic automatisiert die Analyse und Korrektur von Selenium-Testproblemen, bietet Lösungen oder Einblicke in diese Probleme und stellt diese Ergebnisse bereit, sobald Mitarbeiter vom CI-System benachrichtigt werden. Die Belastung wird auf das CI-System verlagert, weg von den Mitarbeitern, die auf Benachrichtigungen des CI-Systems reagieren. Mit nur zwei einfachen Schritten können Sie den Prozess der Behebung von Selenium-Tests als Teil der CI/CD-Pipeline automatisieren. Parasoft Selenics Essentials Edition.
Um Parasoft Selenic zu integrieren, nehmen Sie eine einzeilige Änderung an Ihrem vorhandenen Testausführungsskript vor. Angenommen, ich habe einen Maven-Ausführungsschritt in der Pipeline, der meine Java-basierten Selenium-Tests steuert. Normalerweise spezifiziere ich zwei Maven-Ziele: „clean“ und „test“, die als Befehlszeilenargumente an Maven übergeben werden. Hier fügen Sie lediglich ein zusätzliches Maven-Befehlszeilenargument hinzu:
-DargLine = -javaagent: $ {SELENIC_HOME} /selenic_agent.jar=selfHealing=true,sessionId = $ {BUILD_TAG}
In Jenkins CI könnte dies ungefähr so aussehen:

Der Selenic Agent wird nun in den Testausführungsprozess integriert, sofern Selenic an dem durch die Variable „SELENIC_HOME“ referenzierten Speicherort installiert und lizenziert ist. Der Selenic Agent kann verschiedene Aufgaben ausführen, aber zur Teststabilisierung aktiviere ich nur die Funktion „selfHealing“, die versucht, Selenium-Testprobleme im laufenden Betrieb zu identifizieren und zu beheben.
Überlegen Sie sorgfältig, ob Ihre Selenium-Tests alle in einem Modul oder in mehreren Modulen vorliegen. Tests werden häufig aus organisatorischen Gründen in mehrere Module aufgeteilt. Damit Selenium Informationen aus mehreren Testmodulen aggregieren kann, muss ein „sessionId“-Argument konfiguriert werden. Im obigen Beispiel verwende ich „BUILD_TAG“, eine vordefinierte Variable im Jenkins CI-System, die sich hierfür gut eignet. Unabhängig davon, welches CI-System Sie verwenden, empfehle ich, eine eindeutige Sitzungskennung mithilfe der von Ihrem CI-System bereitgestellten Variablen zu erstellen.
Nach dieser einzeiligen Änderung erkennt und korrigiert Selenic automatisch Teststabilitätsprobleme, wodurch jeder viel mehr Vertrauen in die vom CI-System veröffentlichten Testergebnisse hat. Es gibt jedoch noch eine weitere selenische Komponente, die ich zur Integration empfehle.
Woher wissen wir, welche Probleme Selenic gefunden oder behoben hat? Gibt es Änderungen, die ich an den Selen-Tests vornehmen sollte, um die Probleme zu vermeiden, die Selenic findet? Um diese Informationen zu erhalten, führen Sie den Selenic Analyzer als weiteren Ausführungsschritt in der Pipeline aus. Dies ist eine zweite einzeilige Änderung, die jedoch immer noch trivial ist:
java -jar $ SELENIC_HOME / selenic_analyzer.jar -report target / selenic-reports -sessionId $ {BUILD_TAG}
In Jenkins CI könnte dies ungefähr so aussehen:

Der Selenic Analyzer sammelt Informationen, die zuvor vom Selenic Agent protokolliert wurden, führt zusätzliche Analysen der Daten durch und erstellt anschließend Berichte, die vom CI-System archiviert werden können. Standardmäßig verarbeitet der Analyzer Informationen aus der letzten Sitzung. Aus Gründen der Robustheit empfehle ich jedoch, das Argument „-sessionId“ explizit mit demselben Wert zu konfigurieren, der zuvor bei der Konfiguration des Selenic Agent verwendet wurde.
Der Selenic Analyzer schreibt die Berichte standardmäßig in das aktuelle Arbeitsverzeichnis. Um die Archivierung der Berichte zu vereinfachen, sollten Sie jedoch das Argument „-report“ hinzufügen, um Selenic anzuweisen, Berichte in einen Ordner „selenic-reports“ im Build-Ausgabeverzeichnis Ihres Projekts zu schreiben. Anschließend fügen Sie einen weiteren Schritt in der Pipeline hinzu, um „target/selenic-reports/**“ zu archivieren:

Die Berichtsdateien sind jetzt für alle Benutzer des CI-Systems verfügbar. Im Fall von Jenkins CI sind Berichte bequem über stabile URLs zugänglich:
http://{ci_server}/job/{test_job}/lastSuccessfulBuild/artifact/target/selenic-reports/report.html
http://{ci_server}/job/{test_job}/lastSuccessfulBuild/artifact/target/selenic-reports/report.json
Die erste URL verweist auf den Selenic HTML-Bericht, der direkt in einem Webbrowser angezeigt werden kann. Die zweite URL bezieht sich auf den JSON-Bericht, den Entwickler dem Selenic IDE-Plugin zur Verfügung stellen können, um die Empfehlungen aus dem letzten automatisierten Testlauf zu importieren.
Selenic bietet viele andere Optionen, die Sie je nach Testumgebung und anderen spezifischen Anforderungen aktivieren können.
Selenic zeichnet Daten für jede Testsession auf. Die aufgezeichneten Daten dienen als Wissensbasis und ermöglichen es Selenic, im Laufe der Zeit zu lernen und bessere Entscheidungen und Empfehlungen zur Selbstheilung zu treffen. Standardmäßig werden diese Daten auf dem Rechner gespeichert, auf dem der Test ausgeführt wird. Wenn Sie über einen Pool von Ausführenden verfügen, sollten diese Daten daher in einem freigegebenen Ordner gespeichert werden, auf den alle Ausführenden zugreifen können. Der Datenspeicherort kann explizit konfiguriert werden, indem der Parameter „data={path}“ an den Selenic Agent und das Argument „-data {path}“ an den Selenic Analyzer übergeben werden. Dabei steht „{path}“ für den Dateisystempfad zu einem freigegebenen Ordner. Unter Windows könnte dies ein UNC-Pfad wie „\HostNameSharedFolder“ sein. Die aufgezeichneten Daten werden sich zudem unbegrenzt ansammeln, sofern sie nicht eingeschränkt werden. Dies kann zu einer hohen Festplattennutzung führen. Eine Begrenzung der Anzahl aufgezeichneter Testsitzungen kann durch Übergabe des Parameters „maxSessionDaysToKeep={num_days}“ an den Selenic Agent konfiguriert werden. Die Zahl „{num_days}“ gibt die Anzahl der Tage an, an denen Daten aufgezeichnet wurden, und nicht die Kalendertage. Anders ausgedrückt: Selenic zählt keine Tage, an denen keine Testsitzungsdaten aufgezeichnet wurden. Dies ist hilfreich, wenn Sie Ihre Tests selten oder in unregelmäßigen Abständen ausführen oder wenn es aufgrund von Serverausfällen mehrere Tage lang keine Tests gab.
Selenic kann außerdem so konfiguriert werden, dass zusätzliche Diagnoseinformationen auf verschiedenen Granularitätsebenen erfasst werden. Beispielsweise kann Selenic so konfiguriert werden, dass Screenshots für jede Selenium-Aktion oder nur für fehlgeschlagene Aktionen erstellt werden. Um Screenshots bei Testfehlern zu ermöglichen, können Sie dem Selenic-Agenten den Parameter „screenshot= failures“ übergeben. Screenshots zu Fehlern sind im HTML-Bericht des Selenic Analyzers verfügbar.
Parasoft Selenic wurde entwickelt, um die agile Entwicklung mit Selenium als Teil von CI/CD zu beschleunigen. Entwickler und Tester können produktiver arbeiten, da sie weniger Zeit mit der Suche nach Selenium-„Geistern“ verbringen und mehr Zeit für die Arbeit an realen Aufgaben haben. Steigern Sie mit Selenic das Vertrauen in Ihre Selenium-Testergebnisse.
Blog
5 min gelesen
Webinar
Webinar