Ich habe eine andere Lösung gefunden, basierend darauf, wie der unittest.skip
Dekorateur arbeitet. Durch Einstellen von __unittest_skip__
und __unittest_skip_why__
.
Etikettenbasiert
Ich wollte ein Kennzeichnungssystem anzuwenden, um einige Tests zu beschriften quick
, slow
, glacier
, memoryhog
, cpuhog
, core
, und so weiter.
Führen Sie dann all 'quick' tests
oder run everything except 'memoryhog' tests
Ihre grundlegende Whitelist- / Blacklist-Einrichtung aus
Implementierung
Ich habe dies in 2 Teilen implementiert:
- Fügen Sie zuerst Etiketten zu Tests hinzu (über einen benutzerdefinierten
@testlabel
Klassendekorateur).
- Benutzerdefiniert
unittest.TestRunner
, um zu identifizieren, welche Tests übersprungen werden sollen, und um den Inhalt der Testliste vor der Ausführung zu ändern.
Die Arbeitsimplementierung befindet sich in diesem Kern:
https://gist.github.com/fragmuffin/a245f59bdcd457936c3b51aa2ebb3f6c
(Ein voll funktionsfähiges Beispiel war zu lang, um es hier zu platzieren)
Das Ergebnis ist ...
$ ./runtests.py --blacklist foo
test_foo (test_things.MyTest2) ... ok
test_bar (test_things.MyTest3) ... ok
test_one (test_things.MyTests1) ... skipped 'label exclusion'
test_two (test_things.MyTests1) ... skipped 'label exclusion'
----------------------------------------------------------------------
Ran 4 tests in 0.000s
OK (skipped=2)
Alle MyTests1
Klassentests werden übersprungen, da sie das foo
Etikett haben.
--whitelist
funktioniert auch