Blog

Wie Experten Abhängigkeiten in der Testautomatisierung mit minimalem Aufwand verwalten

SEP 5, 2022

Eine bekannte Herausforderung für die meisten Experten für Testautomatisierung ist die Verwaltung ihrer Robot-Framework-Abhängigkeiten. Sie ständig zu aktualisieren, ist bestenfalls eine mühsame Aufgabe – schlimmstenfalls kann ein einziges Update eure gesamte CI-Pipeline lahmlegen.

Tatu Kairi

Principal Consultant

Tatu enjoys piña coladas, getting caught in the rain, is not into yoga and has half a brain.

Wenn ihr eure Abhängigkeiten jedoch nicht regelmäßig aktualisiert, verpasst ihr nützliche Funktionen und setzt eure Pipeline Sicherheitsrisiken aus. In diesem Beitrag zeigen wir euch eine moderne Methode zur Verwaltung eurer Robot-Framework-Abhängigkeiten: Automatisierung.

Grundlegendes Abhängigkeitsmanagement

Am besten verwaltet ihr eure Robot-Framework-Abhängigkeiten, indem ihr sie alle in einer einzigen Datei requirements.txt zusammenfasst.

robotframework==3.0.4

junitparser==1.2.2

requests==2.27.1

PyYAML==3.13

Beispiel für vier Abhängigkeiten mit festgelegten Versionsnummern (Major, Minor und Patch)

Bei der semantischen Versionierung beziehen sich die ersten beiden Zahlen einer Versionsnummer auf die Major- und Minor-Version.

In eurem Entwicklungs- oder Main-Branch sollten diese Versionen keine Wildcards (*) enthalten, da Änderungen daran eure CI-Pipeline beeinträchtigen können. Mit anderen Worten: Die Versionen sollten festgelegt sein.

Ein Wildcard für Patch-Versionen ist in der Regel unbedenklich, doch Entwickler interpretieren die semantische Versionierung häufig unterschiedlich. Ein Update, das ein Entwickler für ein folgenloses Patch-Release hielt, kann eure Pipeline trotzdem beeinträchtigen.

Andererseits kann es noch riskanter sein, für Patch-Versionen kein Wildcard zu verwenden. Ohne Wildcard müsst ihr die Patch-Releases im Blick behalten und sie manuell aktualisieren. Wenn ihr das irgendwann vergesst – oder besser gesagt: wenn ihr es vergesst –, setzt ihr eure Pipeline erneut Sicherheitslücken aus.

Unsere zwei Ansätze zur Versionierung von Abhängigkeiten

Bei Eficode nutzen wir zwei unterschiedliche Ansätze: einen eher manuellen und einen stärker automatisierten.

Major- und Minor-Versionen festlegen und manuell aktualisieren

Beim ersten Ansatz legt ihr die Major- und Minor-Versionen der Abhängigkeiten in einer Datei requirements.txt fest und aktualisiert sie regelmäßig manuell – in der Regel alle paar Monate.

Als Faustregel gilt: Bei Projekten mit komplexen Abhängigkeiten funktioniert das sehr gut, denn Updates von Major- oder Minor-Versionen erfordern meist ohnehin manuelle Anpassungen am Test-Harness.

Die vollständige Version festlegen und die Pipeline automatisieren

Bei relativ unkomplizierten Abhängigkeiten – insbesondere bei sicherheitskritischen – empfehlen wir, die vollständige Version (Major, Minor und Patch) festzulegen und eine automatisierte Pipeline zu verwenden.

Konfiguriert diese Pipeline so, dass sie eure Abhängigkeiten wöchentlich aktualisiert und meldet, ob sich neue Versionen einfach aktualisieren lassen oder ob das Update etwas beeinträchtigt. Die Pipeline kann beispielsweise direkt in euren Slack berichten, damit ihr die Meldung nicht verpasst.

Es gibt zwar unzählige Möglichkeiten, eine solche Pipeline zu erstellen, aber hier ist ein Beispiel für eine einfache Implementierung:

Im Skript post_to_slack.py findet ihr den Rest des Beispiels.

Nachdem der Job beispielsweise für eine wöchentliche Ausführung geplant wurde, erhält das Team bei erfolgreicher Ausführung folgende Nachricht:

maintaining-dependencies-blog-pipeline

Das Team kann die Abhängigkeiten anschließend manuell aktualisieren.

Natürlich könnt ihr die Pipeline noch umfangreicher gestalten, indem sie automatisch einen Merge Request mit neuen Versionen für festgelegte Abhängigkeiten erstellt. Mit unserem Beispiel möchten wir lediglich zeigen, dass selbst eine relativ einfache Lösung die Aktualisierung von Abhängigkeiten deutlich erleichtern kann.

Zusammengefasst: „Lagom“ ist am besten

Damit eure Testautomatisierung langfristig effektiv bleibt, müsst ihr auch die verwendeten Abhängigkeiten pflegen. Lasst nicht zu, dass ständige Dependency-Updates eure eigentliche, wertvolle Arbeit unterbrechen und eure Pipeline beeinträchtigen. Dennoch solltet ihr sie regelmäßig aktualisieren, damit eure Pipeline zumindest sicher bleibt.

Wie bei vielen Dingen im Leben erweist sich das schwedische Konzept Lagom als hilfreich (danke an unsere schwedischen Kollegen). Es gibt keine direkte deutsche Entsprechung, doch frei übersetzt bedeutet es: „Das richtige Maß ist am besten.“

  • DevOps
  • CI/CD

Subscribe to our newsletter