2016-12-02 7 views
0

Я хочу создать несколько наборов тестов на основе имен моих модульных тестов, возможно ли это?Как добавить все тесты, чье имя соответствует шаблону в единичном наборе тестов?

Контекст заключается в том, что у меня есть большое количество единичных тестовых файлов с двумя типами тестов: некоторые проверяют, что возвращаемые значения являются правильными, а остальные проверяют, что значение вычисляется в разумные сроки.

Теперь я хочу запустить тесты о сроках на моей машине, но не на моей постоянной интеграционной сборке, на которой должны запускаться только первые тесты.

Надеюсь, все мои тесты синхронизации имеют такое же имя (но в разных файлах): test_problem_one_minute

Мои тесты в unittest.TestCase классе.

Очевидно, что я не хочу вручную добавлять все мои тесты в свой тестовый набор, их слишком много. Есть ли способ достичь этого? Или я должен просто использовать этот шаблон в командной строке при вызове python?

ответ

0

Как сказано в этом Q/A одно решение заключается в использовании TestLoader и изменить его значение testMethodPrefix:

test_runner.py:

# Loaders 
loader_foo = unittest.TestLoader() 
loader_bar = unittest.TestLoader() 
loader_timing = unittest.TestLoader() 

# Prefixes 
loader_foo.testMethodPrefix = "test_problem_foo" 
loader_bar.testMethodPrefix = "test_problem_bar" 
loader_timing.testMethodPrefix = "test_problem_one_minute" 

# Suites 
suite_foo = loader_foo.discover('.', pattern="test_*.py") 
suite_bar = loader_bar.discover('.', pattern="test_*.py") 
suite_timing = loader_timing.discover('.', pattern="test_*.py") 
suite_notiming = unittest.TestSuite((suite_foo, suite_bar)) 
suite_full = unittest.TestSuite((suite_foo, suite_bar, suite_timing)) 

# Running the correct test suite 
if len(sys.argv) > 1: 
    if sys.argv[1] == "notiming": 
     unittest.TextTestRunner().run(suite_no_timing) 
    elif [...] 

И называют test_runner.py так:

python test_runner.py примечание