Vergleich/ Diff zwischen zwei Textfiles in einem Unittest

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
frentmeister
User
Beiträge: 13
Registriert: Freitag 3. August 2018, 12:46

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
Benutzeravatar
__blackjack__
User
Beiträge: 13079
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. :-)
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

frentmeister hat geschrieben: Dienstag 27. November 2018, 11:22Wie würdet ihr dies Umsetzen?
Für den Anfang:

Code: Alles auswählen

assert open(filenameA).read() == open(filenameB).read(), "'%s'!='%s'" % (filenameA, filenameB)
a fool with a tool is still a fool, www.magben.de, YouTube
frentmeister
User
Beiträge: 13
Registriert: Freitag 3. August 2018, 12:46

Hallo und vielen Dank, dass hat mir geholfen!
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das ganze mal auf Python 3.6+ angepasst:

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}"
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
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten