mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Print out how long each test takes and slowest tests
This commit is contained in:
parent
ec1c6d43cf
commit
302b68135f
@ -7,13 +7,56 @@ __license__ = 'GPL v3'
|
|||||||
__copyright__ = '2013, Kovid Goyal <kovid at kovidgoyal.net>'
|
__copyright__ = '2013, Kovid Goyal <kovid at kovidgoyal.net>'
|
||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
import unittest, os, argparse
|
import unittest, os, argparse, time, functools
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import init_calibre # noqa
|
import init_calibre # noqa
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def no_endl(f):
|
||||||
|
@functools.wraps(f)
|
||||||
|
def func(*args, **kwargs):
|
||||||
|
self = f.__self__
|
||||||
|
orig = self.stream.writeln
|
||||||
|
self.stream.writeln = self.stream.write
|
||||||
|
try:
|
||||||
|
return f(*args, **kwargs)
|
||||||
|
finally:
|
||||||
|
self.stream.writeln = orig
|
||||||
|
return func
|
||||||
|
|
||||||
|
class TestResult(unittest.TextTestResult):
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super(TestResult, self).__init__(*args, **kwargs)
|
||||||
|
self.start_time = {}
|
||||||
|
for x in ('Success', 'Error', 'Failure', 'Skip', 'ExpectedFailure', 'UnexpectedSuccess'):
|
||||||
|
x = 'add' + x
|
||||||
|
setattr(self, x, no_endl(getattr(self, x)))
|
||||||
|
self.times = {}
|
||||||
|
|
||||||
|
def startTest(self, test):
|
||||||
|
self.start_time[test] = time.time()
|
||||||
|
return super(TestResult, self).startTest(test)
|
||||||
|
|
||||||
|
def stopTest(self, test):
|
||||||
|
orig = self.stream.writeln
|
||||||
|
self.stream.writeln = self.stream.write
|
||||||
|
super(TestResult, self).stopTest(test)
|
||||||
|
elapsed = time.time()
|
||||||
|
elapsed -= self.start_time.get(test, elapsed)
|
||||||
|
self.times[test] = elapsed
|
||||||
|
self.stream.writeln = orig
|
||||||
|
self.stream.writeln(' [%.1g secs]' % elapsed)
|
||||||
|
|
||||||
|
def stopTestRun(self):
|
||||||
|
super(TestResult, self).stopTestRun()
|
||||||
|
if self.wasSuccessful():
|
||||||
|
tests = sorted(self.times, key=self.times.get, reverse=True)
|
||||||
|
slowest = ['%s [%g]' % (t.id(), self.times[t]) for t in tests[:3]]
|
||||||
|
self.stream.writeln('\nSlowest tests: %s' % ' '.join(slowest))
|
||||||
|
|
||||||
def find_tests():
|
def find_tests():
|
||||||
return unittest.defaultTestLoader.discover(os.path.dirname(os.path.abspath(__file__)), pattern='*.py')
|
return unittest.defaultTestLoader.discover(os.path.dirname(os.path.abspath(__file__)), pattern='*.py')
|
||||||
|
|
||||||
@ -47,5 +90,7 @@ if __name__ == '__main__':
|
|||||||
tests = ans
|
tests = ans
|
||||||
else:
|
else:
|
||||||
tests = unittest.defaultTestLoader.loadTestsFromName(args.name) if args.name else find_tests()
|
tests = unittest.defaultTestLoader.loadTestsFromName(args.name) if args.name else find_tests()
|
||||||
unittest.TextTestRunner(verbosity=4).run(tests)
|
r = unittest.TextTestRunner
|
||||||
|
r.resultclass = TestResult
|
||||||
|
r(verbosity=4).run(tests)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user