ECU-TEST Technologie-Update auf Python 3

Sehr geehrte ECU-TEST-Nutzer,
Um das Produkt ECU-TEST auf dem neuesten Stand zu halten, ist es notwendig, wichtige zugrunde liegende Software-Technologien zu aktualisieren. Mit ECU-TEST 8.0 wechseln wir von Python 2 auf Python 3. Leider ist diese neue Version der Sprache teilweise inkompatibel mit früheren Python-Versionen. Daher sind auch ECU-TEST-Nutzer betroffen, die ihre Workspaces auf ECU-TEST 8.0 umstellen. Um Ihnen die Umstellung zu erleichtern, haben wir einen Migrations-Leitfaden erstellt, in dem wir die wichtigsten Gründe für den Wechsel auf Python 3 und die wichtigsten Auswirkungen auf die Nutzer zusammenfassen.

Ihr ECU-TEST-Team

Die wichtigsten Gründe für den Wechsel auf Python 3

Python 2.7 EOL ist der 1. Januar 2020
  • Ab dann wird es keine weiteren Sicherheits-Updates für Python 2 geben und
  • Keine neuen Features für Python 2
Python-Bibliotheken werden ihre Python-2-Unterstützung früher oder später einstellen

Die wichtigsten Auswirkungen für alle Nutzer

  • Jeglicher Nutzer-Code muss entsprechend angepasst werden, um in Python 3 zu funktionieren, z.B. ein einfacher Berechnungsschritt in ECU-TEST

  • Screen shot (Calculation)

  • Machen Sie Python 3 jetzt zu einem Teil Ihrer Testprojekt-Roadmap!
  • Bitte planen Sie vorab genügend Zeit ein, um die betroffenen Skripte in Ihrem Workspace anzupassen. Wie viel Zeit genau Sie brauchen, hängt von der Anzahl der Python-Erweiterungen ab, die Sie haben

So könnte Ihr Migrations-Workflow aussehen


Jedes Projekt ist anders. Aus diesem Grund können wir leider kein Patentrezept für die Umstellung von Python 2 auf Python 3 liefern.
Trotzdem haben wir hier eine Abfolge von Schritten zusammengesellt, die in mehreren ECU-TEST-Engineering-Projekten sehr gut funktioniert hat.

Schritt #1

Holen Sie sich Hintergrundwissen zur Umstellung von Python 2 auf 3. Die genauen Unterschiede zu kennen, wir in jedem Falle sehr hilfreich sein:

Schritt #2

Erstellen Sie einen Migrationszweig oder eine Kopie Ihres Workspaces für das Python-Update. Achten Sie unbedingt darauf, ein Backup Ihres Workspaces zu erstellen.

Schritt #3

Öffnen Sie den Workspace mit ECU-TEST 8.0.

Schritt #4

Öffnen Sie die Migrationshilfe.


Screen shot (Migration help)

Schritt #5

Klicken Sie auf Start.


Screen shot (Start screen)

Schritt #6

Holen Sie sich einen Kaffee.

Schritt #7

Die Migrationshilfe zeigt Ihnen die Stellen in Ihrem Workspace, an denen wahrscheinlich Änderungen erforderlich sind.


Screen shot (Overview)

ECU-TEST arbeitet im Hintergrund mit lib2to3 und konvertiert alle Ausdrücke, die sie in Ihrem Workspace benutzen können. Wenn lib2to3 eine Anpassung empfiehlt, zeigt Ihnen die Migrationshilfe die entsprechende Stelle an.

Bitte beachten Sie, dass lib2to3 nicht perfekt ist und keine vollständige Migration garantieren kann! Es wird sehr wahrscheinlich viele Stellen konvertieren können, aber es wird nicht jede einzelne Stelle finden und könnte im Zweifelsfall sogar richtigen Code ändern.

Schritt #8

Konvertieren Sie Ihre Testschritte.

Leider ist es nicht möglich, alle Ausdrücke Ihrer Testschritte automatisch zu konvertieren. Wir empfehlen diesen manuellen Schritt für jedes Package:


  • Öffnen Sie das Package (via Doppelklick oder Rechtsklick)

    Screen shot (Open package)

  • Schieben Sie das Package an die rechte Bildschirmkante, um sowohl Migrationshilfe als auch Package sehen zu können
  • Doppelklicken Sie auf die entsprechenden Stellen in der Migrationshilfe und beheben Sie die Fehler

Schritt #9

Konvertieren Sie alle weiteren Stellen.

Alle restlichen fehlerhaften Stellen können mit lib2to3 automatisiert konvertiert werden:


  • Überprüfen Sie die anderen Registerkarten. Wenn die gefundenen Stellen für Sie in Ordnung aussehen, drücken Sie „Play“, um alle Stellen aus einer Registerkarte zu konvertieren.

    Screen shot (Change)

  • Es wird eine Liste aller Files angezeigt, an denen Änderungen vorgenommen wurden

    Screen shot (Change done)

  • Vergleichen Sie die neue Datei mit der Backup-Version mithilfe eines Diff-Tools (z.B. mit WinMerge)

    Screen shot (Win merge)

  • Korrigieren Sie im Zweifel falsch konvertierte Zeilen.

Schritt #10

Führen Sie Ihren Workspace aus und überprüfen Sie die Ergebnisse. Sollten Sie unerwartete Ergebnisse erhalten, überprüfen Sie die typischen Fallstricke, um das Problem zu beheben.

Typische Fallstricke

Die Konvertierung von Utilities funktioniert nicht

FEHLERMELDUNG:

..application.gui.dataViewer.DvUtilities.InitContent: a bytes-like object is required, not 'str’

Lib2to3 konvertiert die Utilities, aber es muss BytesIO anstelle von StringIO verwendet werden.


Fehlerhaftes Beispiel:
Typical pitfall #1

Korrigiertes Beispiel:
Typical pitfall #2

ProjectAPI geändert

FEHLERMELDUNG:

..lib.project.projectStep.ProjectGeneratorCycleSet.Run: CreateCycleData() got an unexpected keyword argument 'useObjectApi'

Dies ist kein 2to3 Problem. In ECU-TEST 8.0 haben wir die API für Projektgeneratoren und Package-Generatoren geändert.
Der alte Generator wurde in ECU-TEST 8.0 entfernt. Standard ist jetzt die ObjectAPI. Der Parameter zur Nutzung der ObjectAPI wird nicht länger benötigt, Sie können diesen getrost entfernen.


useObjectAPI ist jetzt Standard:
Typical pitfall #3

Funktionierendes Beispiel:
Typical pitfall #4

Exec arbeitet anders als gewohnt

Wenn Sie exec()nutzen, schauen Sie bitte hier nach: Stack Overflow

Importe

Python3-Importe sind entweder relativ oder absolut:

Typical pitfall #5

Bus-Leseschritte

Lib2to3 empfiehlt Änderungen für Bus-Leseschritte

  • mit Erwartung ~Present~ unter Nutzung der „Wait until true“-Option
  • mit erwarteten Werten innerhalb einer Liste möglicher interpretierter Zeichenketten

Diese können normalerweise trotzdem noch von ECU-TEST 8.0 interpretiert werden und müssen nicht händisch geändert werden.