Подтвердить что ты не робот

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

Unittest представляет только общее время, затраченное на выполнение всех тестов, но не выделяет время, затрачиваемое на каждый тест отдельно.

Как добавить время каждого теста при использовании unittest?

4b9b3361

Ответ 1

Я полагаю, что это невозможно сейчас: http://bugs.python.org/issue4080.

Но вы можете сделать что-то вроде этого:

import unittest
import time

class SomeTest(unittest.TestCase):
    def setUp(self):
        self.startTime = time.time()

    def tearDown(self):
        t = time.time() - self.startTime
        print "%s: %.3f" % (self.id(), t)

    def testOne(self):
        time.sleep(1)
        self.assertEquals(int('42'), 42)

    def testTwo(self):
        time.sleep(2)
        self.assertEquals(str(42), '42')

if __name__ == '__main__':
    suite = unittest.TestLoader().loadTestsFromTestCase(SomeTest)
    unittest.TextTestRunner(verbosity=0).run(suite)

Результат:

__main__.SomeTest.testOne: 1.001
__main__.SomeTest.testTwo: 2.002
----------------------------------------------------------------------
Ran 2 tests in 3.003s

OK

Ответ 2

Nose тесты с расширение pinnochio a stopwatch, который даст вам это, если нос является для вас вариантом.

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

Ответ 3

Вот вариация script от ответа хорейсека. Он будет тестировать тестовую базу django для обезьян, чтобы каждый TestCase дал общее время работы.

Вы можете поместить это sript в корневой пакет __init__.py, где живет ваш settings.py. После этого вы можете запускать тесты с помощью. /mange.py test -s

from django import test
import time


@classmethod
def setUpClass(cls):
    cls.startTime = time.time()


@classmethod
def tearDownClass(cls):
    print "\n%s.%s: %.3f" % (cls.__module__, cls.__name__, time.time() - cls.startTime)


test.TestCase.setUpClass = setUpClass
test.TestCase.tearDownClass = tearDownClass

Ответ 4

Решение только с командной строкой:

1/install nose (популярный альтернативный тестировщик) и расширение pinnochio

$ pip install nose pinnochio

2/запустить тесты с записью времени (время сохраняется в файле .nose-stopwatch-times)

$ nosetests --with-stopwatch

3/отображает имена тестов, отсортированные по уменьшению времени:

$ python -c "import pickle,operator,signal; signal.signal(signal.SIGPIPE, signal.SIG_DFL); print '\n'.join(['%.03fms: %s'%(v[1],v[0]) for v in sorted(pickle.load(open('.nose-stopwatch-times','r')).items(), key=operator.itemgetter(1), reverse=True)])" | less