Hallo,
für einen Unittest muss ich 2 Textfiles vergleichen, am Ende des Test. Es handelt sich dabei um die Ausgabe einer Sysinfo.
Sobald es also einen Unterschied gibt zwischen File a und b soll eine Assertion entsprechend ein Fail schreiben für den Unittest.
Beispiel für einen Vergleich im File:
MAC-ADDRESS: 00A05736D0E3
VERSION: 3.32.0026 / 14.11.2018
Ich nutzte Python 3.7 und diverse Pakete:
Paramiko
Pyserial
Tftpy
Wie würdet ihr dies Umsetzen?
Ich habe mir schon einige Beispiele angeschaut, aber meiner Ansicht nach zu Komplex dafür.
Siehe hier:
https://stackoverflow.com/questions/323 ... m-txt-file
https://stackoverflow.com/questions/342 ... ifferences
Vergleich/ Diff zwischen zwei Textfiles in einem Unittest
- __blackjack__
- User
- Beiträge: 13099
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@frentmeister: Mir ist nicht so ganz klar was für Dich Unterschiede sind. Wenn die wirklich exakt gleich sein müssen, dann lies sie einfach ein und vergleiche sie mit ``==`` oder ``!=``. Ansonsten wird es halt etwas komplizierter und Du müsstest mehr ins Detail gehen.
Wenn Du dem Benutzer einen schöneren „diff“ zeigen möchtest, statt einfach nur ein “failed”, dann schau Dir mal `difflib` aus der Standardbibliothek an. Oder ob py.test schon automatisch was schöneres macht.
Wenn Du dem Benutzer einen schöneren „diff“ zeigen möchtest, statt einfach nur ein “failed”, dann schau Dir mal `difflib` aus der Standardbibliothek an. Oder ob py.test schon automatisch was schöneres macht.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Für den Anfang:
Code: Alles auswählen
assert open(filenameA).read() == open(filenameB).read(), "'%s'!='%s'" % (filenameA, filenameB)
-
- User
- Beiträge: 13
- Registriert: Freitag 3. August 2018, 12:46
Hallo und vielen Dank, dass hat mir geholfen!
- __blackjack__
- User
- Beiträge: 13099
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Das ganze mal auf Python 3.6+ angepasst:
Bei `pytest` würde ich die Zeichenkette weglassen denn das liefert in diesem Fall ja schon selbst detailliertere Ausgaben zu den beteiligten Werten wenn so ein Test fehl schlägt
Code: Alles auswählen
from pathlib import Path
def test_something():
...
assert (
Path(filename_a).read_bytes() == Path(filename_b).read_bytes()
), f"{filename_a!r} != {filename_b!r}"
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman