Unittest представляет только общее время, затраченное на выполнение всех тестов, но не выделяет время, затрачиваемое на каждый тест отдельно.
Как добавить время каждого теста при использовании unittest?
Unittest представляет только общее время, затраченное на выполнение всех тестов, но не выделяет время, затрачиваемое на каждый тест отдельно.
Как добавить время каждого теста при использовании unittest?
Я полагаю, что это невозможно сейчас: 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
Nose тесты с расширение pinnochio a stopwatch, который даст вам это, если нос является для вас вариантом.
В нем также есть множество других полезных функций и плагинов, чтобы сделать с помощью unittest приятнее.
Вот вариация 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
Решение только с командной строкой:
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