Unittest仅显示运行所有测试所花费的总时间,但不会分别显示每个测试所花费的时间。
使用unittest时如何添加每个测试的时间?
答案 0 :(得分:33)
我想,现在不可能: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
答案 1 :(得分:6)
它还有许多其他有用的功能和插件,可以使用unittest更好。
答案 2 :(得分:6)
这是horejsek答案的脚本变体。 它将修补django TestCase,以便每个TestCase都能给出它的总运行时间。
您可以将此sript放在您的settings.py所在的根包__init__.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
答案 3 :(得分:3)
仅限命令行解决方案:
1 /安装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(['%.03fs: %s'%(v[1],v[0]) for v in sorted(pickle.load(open('.nose-stopwatch-times','r')).items(), key=operator.itemgetter(1), reverse=True)])" | less
答案 4 :(得分:3)
您可以使用django-slowtests,它提供如下输出:
select id, RecordDate, CreateDate, DATEDIFF(DAY,CreateDate,RecordDate) as TimeDifference from items
id RecordDate CreateDate TimeDifference
0 2014-03-28 17:29:35.557 2014-03-28 17:29:35.557 0
1 2014-04-11 12:13:17.320 2014-04-11 12:13:17.320 0
2 2014-05-08 10:15:42.670 2014-05-08 10:15:42.670 0
3 2014-03-17 18:58:28.480 2018-01-10 13:22:33.827 1395
4 2014-03-17 18:58:30.207 2018-01-02 20:11:49.327 1387
如果你看django_slowtests/test_runner.py,你也可以自己调整技术。
答案 5 :(得分:3)
您可以将pytest与--durations=0
一起使用,它将为您提供每次测试的执行时间
答案 6 :(得分:1)
PyCharm CE(free)提供unittest
持续时间的清晰视图。它还有助于按目录结构和文件进行聚合,并允许您按持续时间进行排序:
正如@horejsek所提到的,unittest
存在一个在开放PR中添加持续时间测量的问题:https://github.com/python/cpython/pull/12271。