有没有办法获得“unittest.TextTestRunner()。run()”用于运行特定单元测试的总时间。
我正在使用for循环来针对某些场景测试模块(有些必须使用,有些则没有,所以它们运行了几次),我想打印运行所有的所有时间测试
非常感谢任何帮助。
答案 0 :(得分:11)
更新,感谢@ Centralniak的评论。
如何简单
from datetime import datetime
tick = datetime.now()
# run the tests here
tock = datetime.now()
diff = tock - tick # the result is a datetime.timedelta object
print(diff.total_seconds())
答案 1 :(得分:4)
您可以在设置功能中记录开始时间,然后在清理时打印已用时间。
答案 2 :(得分:3)
我完全按照Eric假设这样做 - 这是我用于测试的装饰器(通常比严格的单元测试更多的功能测试)...
from decorator import decorator
from unittest import TestCase
@decorator
def timedtest(f, *args, **kwargs):
"""
example use:
class MyTests(TestCase):
# ...
@timedtest
def test_yo_dogg(self):
assert something is something_else
# ... etc
return another_thing # this gets printed along with the times
"""
sout = codecs.getwriter('iso-8859-1')(sys.stdout)
print "\n"
print "TESTING: %s()" % getattr(f, "__name__", "<unnamed>")
print "----------------------------------------------------------"
print "\n"
t1 = time.time()
out = f(*args, **kwargs)
t2 = time.time()
dt = str((t2-t1)*1.00)
dtout = dt[:(dt.find(".")+4)]
print "----------------------------------------------------------"
print 'RESULTS:'
#print '%s\n' % out
pprint(out)
print 'Test finished in %ss' % dtout
print "=========================================================="
这是它的核心 - 从那里,如果你愿意,你可以将时间存储在数据库中进行分析,或绘制图形等等。像这样的装饰者(使用@decorator
)不会干扰单元测试框架偶尔会采用的任何暗魔法。
答案 3 :(得分:3)
关注Eric's one-line answer我有一个小片段,我在这里工作:
from datetime import datetime
class SomeTests(unittest.TestCase):
"""
... write the rest yourself! ...
"""
def setUp(self):
self.tick = datetime.now()
def tearDown(self):
self.tock = datetime.now()
diff = self.tock - self.tick
print (diff.microseconds / 1000), "ms"
# all the other tests below
这对我来说效果还不错,但是我想解决一些小的格式问题。结果ok
现在位于下一行,FAIL
具有优先权。这太丑了。
答案 4 :(得分:1)
除了使用datetime
,您还可以使用time
from time import time
t0 = time()
# do your stuff here
print(time() - t0) # it will show in seconds