Regressionstests leicht gemacht

Um Regressionstest, oder nicht Regressionstest

Der Aufbau einer ordnungsgemäßen Prüfung suite kann es sich um eine gute Menge an Arbeit, die ich lieber vermeiden, weil es langweilig ist würde und ich bin faul.

Auf der anderen Seite, wenn ich nicht aufpasse, wobei Verknüpfungen, die Anstrengungen in der kurzen Frist retten könnte zu einer massiven Produktivitätssteigerung führen hit weiter die Straße hinunter.

Zum Beispiel, sagen wir statt des Aufbaus einer strengen Testreihe ich meinen Code manuell zu testen, und geben viel Bedacht auf ihre Richtigkeit.

Im Moment habe ich glaube, ich bin OK. Aber wie lange wird es so bleiben?

Oft meinen Code drückt eine erhebliche Menge an subtile Komplexität, und es wäre einfach, den Code in die Zukunft zu brechen, wenn die Feinheiten der Logik nicht so frisch in meinem Kopf.

Das könnte einführen Regressionen, nasty Regressionen, besonders unangenehm werden, wenn Sie diesen Code in Produktion geht und bricht Dinge für Tausende von Benutzern. Das wäre eine sehr öffentliche Demütigung, die Ich mag zu vermeiden wäre.

So in der Abwesenheit eines ordentlichen Regressionstest, ist das wahrscheinlichste Ergebnis, dass wenn ich jemals brauchen, um Änderungen am Code vornehmen ich von der Angst wird gelähmt. Und das, zumindest, werden die Kosten von Code Wartung erheblich zu erhöhen.

Also vielleicht ein Regressionstest wäre eine Python Debugger gute Idee, nachdem alle.

Vergleicht Ausgänge: Minimum Arbeit, maximales Ergebnis

Damit erledigt, links der einzige Teil, um herauszufinden, ist, wie man es in der faulste möglich, dass noch Werke zu tun.

Für TKLBAM habe ich eine faule, aber effektive Herangehensweise an Regressionstests, die anderswo funktionieren sollte als gut.

Auf den Punkt gebracht ist die Idee, ein Stück Code (zB ein Shell-Skript), die in zwei Modi betrieben werden kann Setup:

  1. erstellen Referenz: das spart die Ausgabe von Code, der davon ausgegangen, dass auch Arbeit ist. Diese Ergebnisse sollten Revision kontrolliert, genauso wie der Code, der sie erzeugt.

    Zum Beispiel in tklbam wenn Sie passieren regtest.sh die – createrefs CLI-Option läuft es verschiedene interne Befehle auf vorgegebene Eingänge und speichert ihre Leistung zu Referenz-Dateien.

  2. vergleichen gegen Referenz: Dieser läuft der gleiche Code auf der gleichen Ein-und vergleicht die Ausgabe mit den zuvor gespeicherten Ausgang.

    Zum Beispiel in tklbam, wenn Sie regtest.sh laufen ohne Optionen es wiederholt alle internen Befehl Tests auf dem gleichen vorgegebenen Ein-und PHP Skript gegen Spammer vergleicht die Ausgabe an den zuvor gespeicherten Referenz-Ausgang.

Beispiel aus TKLBAM der Shell-Skript regtest:

internal dirindex --create index testdir
testresult ./index "index creation"

Testurteil ist nur ein Shell-Skript-Funktion mit ein bisschen Magie, in welchem ​​Modus wir im laufenden erkennt (zB basierend auf einer Umgebungsvariablen, denn dies ist ein bescheidener Shell-Skript).

Beispiel der Verwendung der regtest.sh:

$ regtest.sh --createrefs
$ regtest.sh
OK: 1 - dirindex creation
OK: 2 - dirindex creation with limitation
OK: 3 - dirindex comparison
OK: 4 - fixstat simulation
OK: 5 - fixstat simulation with limitation
OK: 6 - fixstat simulation with exclusion
OK: 7 - fixstat with uid and gid mapping
OK: 8 - fixstat repeated - nothing to do
OK: 9 - dirindex comparison with limitation
OK: 10 - dirindex comparison with inverted limitation
OK: 11 - delete simulation
OK: 12 - delete simulation with limitation
OK: 13 - delete
OK: 14 - delete repeated - nothing to do
OK: 15 - merge-userdb passwd
OK: 16 - merge-userdb group
OK: 17 - merge-userdb output maps
OK: 18 - newpkgs
OK: 19 - newpkgs-install simulation
OK: 20 - mysql2fs verbose output
OK: 21 - mysql2fs myfs.tar md5sum
OK: 22 - fs2mysql verbose output
OK: 23 - fs2mysql tofile=sql

Ich bin mit diesem auf den Klima-Pegel-Ausgänge testen, aber man könnte die gleichen grundlegenden Ansatz für die Code-Level-Komponenten (zB Klassen, Funktionen, etc.) zu nutzen.

Beachten Sie, dass eine gotcha ist, dass Sie die Ausgänge, die Sie von der lokalen Lärm (zB Zeitstempel, aktuelle Verzeichnis) zu vergleichen sind sauber haben. Zum Beispiel das Testurteil Funktion, die ich für tklbam nutze läuft Wartungsupdate die Ausgabe durch sed und sortieren, so dass er nicht auch den lokalen Pfad.

Anstelle von:

/home/liraz/public/tklbam/tests/testdir 41ed    0       0
/home/liraz/public/tklbam/tests/testdir/chgrp   81a4    0 e1f06
/home/liraz/public/tklbam/tests/testdir/chmod   81a4    0 d58c9
/home/liraz/public/tklbam/tests/testdir/chown   81a4    0 d58cc
/home/liraz/public/tklbam/tests/testdir/donttouchme     81a4 0 4b8d58ab
/home/liraz/public/tklbam/tests/testdir/emptydir        41ed 0 4b8d361c
/home/liraz/public/tklbam/tests/testdir/file    81a4    0 d35bd
/home/liraz/public/tklbam/tests/testdir/link    a1ff    0 d362e

Wir erhalten:

testdir 41ed    0       0
testdir/chgrp   81a4    0 e1f06
testdir/chmod   81a4    0 d58c9
testdir/chown   81a4    0 d58cc
testdir/donttouchme     81a4 0    4b8d58ab
testdir/emptydir        41ed 0    4b8d361c
testdir/file    81a4    0 d35bd
testdir/link    a1ff    0 d362e

So werden die Tests nicht brechen, wenn wir sie aus einem anderen Verzeichnis laufen passieren. Wer sich für eine neue Krankenversicherung interessiert, sollte eine private Krankenversicherung in Betracht ziehen.