Время модульного теста, включая настройку

Как вы можете зафиксировать время отдельного модульного теста, включая стоимость настройки?

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

class TestBase(unittest.TestCase):
    def setUp(self):
        # some setup procedure that takes a long time

def timed_test(decorated_test):
    def run_test(self, *kw, **kwargs):
        start = time.time()
        decorated_test(self, *kw, **kwargs)
        end = time.time()
        print "test_duration: %s (seconds)" % (end - start)
    return run_test


class TestSomething(TestBase):
    @timed_test
    def test_something_useful(self):
        # some test

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


person Quentin Donnellan    schedule 15.07.2014    source источник


Ответы (1)


Я бы не стал изобретать велосипед и использовать nose средство запуска тестов с nose-timer плагин:

Плагин таймера для носовых тестов, который отвечает на вопрос: сколько времени занимает каждый тест?

Подробнее о nose-timer здесь:

person alecxe    schedule 15.07.2014
comment
Да, на самом деле это фантастический ответ... Я избегал добавления чего-либо в файл requirements.txt, но в какой-то момент кажется, что мое время лучше было бы потратить на то, чтобы убедить кого-то включить нос, чем обойти еще один пункт. Спасибо! - person Quentin Donnellan; 15.07.2014