Add Timer to rally.utils
This is small and pretty class for with statement that measure time. Example of usage: with Timer() as timer: #do some dirty stuff time_in_seconds = timer.duration() It will be used at least by our Test engine. Change-Id: I3bf0075df807c2118d5872dd425aae0061232133
This commit is contained in:
parent
04f42b867a
commit
d3473afc19
@ -20,6 +20,7 @@ import os
|
||||
import StringIO
|
||||
import sys
|
||||
import time
|
||||
import traceback
|
||||
|
||||
from rally import exceptions
|
||||
from rally.openstack.common.gettextutils import _ # noqa
|
||||
@ -69,6 +70,22 @@ class StdErrCapture(object):
|
||||
sys.stderr = self.stderr
|
||||
|
||||
|
||||
class Timer(object):
|
||||
def __enter__(self):
|
||||
self.error = None
|
||||
self.start = time.time()
|
||||
return self
|
||||
|
||||
def __exit__(self, type, value, tb):
|
||||
self.finish = time.time()
|
||||
if type:
|
||||
tb = traceback.print_exception(type, value, tb)
|
||||
self.error = (type, value, tb)
|
||||
|
||||
def duration(self):
|
||||
return self.finish - self.start
|
||||
|
||||
|
||||
def itersubclasses(cls, _seen=None):
|
||||
"""Generator over all subclasses of a given class in depth first order."""
|
||||
|
||||
|
@ -20,7 +20,9 @@
|
||||
from __future__ import print_function
|
||||
|
||||
import datetime
|
||||
import mock
|
||||
import sys
|
||||
import time
|
||||
|
||||
from rally import exceptions
|
||||
from rally import test
|
||||
@ -82,6 +84,30 @@ class StdIOCaptureTestCase(test.NoDBTestCase):
|
||||
self.assertEqual(stderr, sys.stderr)
|
||||
|
||||
|
||||
class TimerTestCase(test.NoDBTestCase):
|
||||
|
||||
def test_timer_duration(self):
|
||||
start_time = time.time()
|
||||
end_time = time.time()
|
||||
|
||||
with mock.patch('rally.utils.time') as mock_time:
|
||||
mock_time.time = mock.MagicMock(return_value=start_time)
|
||||
with utils.Timer() as timer:
|
||||
mock_time.time = mock.MagicMock(return_value=end_time)
|
||||
|
||||
self.assertIsNone(timer.error)
|
||||
self.assertEqual(end_time - start_time, timer.duration())
|
||||
|
||||
def test_timer_exception(self):
|
||||
try:
|
||||
with utils.Timer() as timer:
|
||||
raise Exception()
|
||||
except Exception:
|
||||
pass
|
||||
self.assertEqual(3, len(timer.error))
|
||||
self.assertEqual(timer.error[0], type(Exception()))
|
||||
|
||||
|
||||
class IterSubclassesTestCase(test.NoDBTestCase):
|
||||
|
||||
def test_itersubclasses(self):
|
||||
|
Loading…
x
Reference in New Issue
Block a user