Ich habe eine andere Lösung gefunden, basierend darauf, wie der unittest.skipDekorateur 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' testsoder run everything except 'memoryhog' testsIhre grundlegende Whitelist- / Blacklist-Einrichtung aus
Implementierung
Ich habe dies in 2 Teilen implementiert:
- Fügen Sie zuerst Etiketten zu Tests hinzu (über einen benutzerdefinierten
@testlabelKlassendekorateur).
- 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 MyTests1Klassentests werden übersprungen, da sie das fooEtikett haben.
--whitelist funktioniert auch