以秒为单位获取python单元测试持续时间

时间:2012-08-20 08:55:00

标签: python unit-testing time

有没有办法获得“unittest.TextTestRunner()。run()”用于运行特定单元测试的总时间。

我正在使用for循环来针对某些场景测试模块(有些必须使用,有些则没有,所以它们运行了几次),我想打印运行所有的所有时间测试

非常感谢任何帮助。

5 个答案:

答案 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