2016-01-12 2 views
13

Я использую python рамки unittest. Можно ли указать способностями каркаса тайм-аут для теста? Если нет, можно ли изящно указать timeout для всех тестов, а для некоторых отдельных тестов - личное значение для каждого из них?
Я хочу определить global timeout для всех тестов (они будут использовать его по умолчанию) и тайм-аут для некоторого теста, который может занять много времени.Как указать время проверки для python unittest?

ответ

13

Насколько я знаю unittest не содержит поддержки тайм-аутов тестов.

Вы можете попробовать timeout-decorator библиотека от PyPI. Нанести декоратора на отдельных тестов, чтобы сделать их прекратить, если они слишком долго:

import timeout_decorator 

class TestCaseWithTimeouts(unittest.TestCase): 

    # ... whatever ... 

    @timeout_decorator.timeout(LOCAL_TIMEOUT) 
    def test_that_can_take_too_long(self): 
     sleep(float('inf')) 

    # ... whatever else ... 

Чтобы создать глобальный тайм-аут, вы можете заменить называть

unittest.main() 

с

timeout_decorator.timeout(GLOBAL_TIMEOUT)(unittest.main)() 
+0

Интересно. Я не использую 'unittest.main()', но я надеюсь, что смогу принять 'decorator' для моего дела. Но мои тесты не идут в одном потоке ... – Jury

+0

@Jury Проверьте раздел «Многопоточность» в ['timeout-decorator' reference] (https://pypi.python.org/pypi/timeout-decorator) - вы просто необходимо использовать 'timeout_decorator.timeout (TIMEOUT, use_signals = False)' в многопоточной среде. – Lav

+0

Да, я это видел. Я попробую. – Jury

Смежные вопросы