Я знайшов інше рішення, засноване на тому, як unittest.skip
працює декоратор. Встановивши __unittest_skip__
і __unittest_skip_why__
.
На основі етикетки
Я хотів застосувати систему маркування, щоб позначити деякі тести , як quick
, slow
, glacier
, memoryhog
, cpuhog
, core
, і так далі.
Потім запустіть all 'quick' tests
, або run everything except 'memoryhog' tests
, основне налаштування білого / чорного списку
Впровадження
Я реалізував це у 2 частинах:
- Спочатку додайте мітки до тестів (за допомогою
@testlabel
декоратора класів)
- Спеціально,
unittest.TestRunner
щоб визначити, які тести пропустити, та змінити вміст списку тестів перед виконанням.
Робоча реалізація - у цьому суть:
https://gist.github.com/fragmuffin/a245f59bdcd457936c3b51aa2ebb3f6c
(повністю працюючий приклад було занадто довгим, щоб його навести
Результатом є ...
$ ./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)
Усі MyTests1
тести класу пропускаються, оскільки на ньому є foo
ярлик.
--whitelist
також працює