2 new revisions:
Revision: 9d7a19db0cfa
Author: Pekka Klärck
Date: Thu Aug 16 05:55:59 2012
Log: statistics: collect elapsed times...
http://code.google.com/p/robotframework/source/detail?r=9d7a19db0cfa
Revision: 082d895e55ee
Author: Pekka Klärck
Date: Thu Aug 16 06:47:28 2012
Log: Write elapsed times of statistics to the JS model in
log/report....
http://code.google.com/p/robotframework/source/detail?r=082d895e55ee
==============================================================================
Revision: 9d7a19db0cfa
Author: Pekka Klärck
Date: Thu Aug 16 05:55:59 2012
Log: statistics: collect elapsed times
Update issue 1194
Now internal statistics objects collect the elapsed times.
http://code.google.com/p/robotframework/source/detail?r=9d7a19db0cfa
Modified:
/src/robot/model/stats.py
/utest/model/test_statistics.py
=======================================
--- /src/robot/model/stats.py Tue Jun 26 03:11:49 2012
+++ /src/robot/model/stats.py Thu Aug 16 05:55:59 2012
@@ -23,6 +23,7 @@
self.name = name
self.passed = 0
self.failed = 0
+ self.elapsed = 0
def get_attributes(self, include_label=False, exclude_empty=False,
values_as_strings=False, html_escape=False):
@@ -49,14 +50,17 @@
return self.passed + self.failed
def add_test(self, test):
+ self._update_stats(test)
+ self._update_elapsed(test)
+
+ def _update_stats(self, test):
if test.passed:
self.passed += 1
else:
self.failed += 1
- def add_stat(self, other):
- self.passed += other.passed
- self.failed += other.failed
+ def _update_elapsed(self, test):
+ self.elapsed += test.elapsedtime
def __cmp__(self, other):
return cmp(self.name, other.name)
@@ -78,10 +82,18 @@
def __init__(self, suite):
Stat.__init__(self, suite.longname)
self.id = suite.id
+ self.elapsed = suite.elapsedtime
self._name = suite.name
def _get_custom_attrs(self):
return {'id': self.id, 'name': self._name}
+
+ def _update_elapsed(self, test):
+ pass
+
+ def add_stat(self, other):
+ self.passed += other.passed
+ self.failed += other.failed
class TagStat(Stat):
=======================================
--- /utest/model/test_statistics.py Mon Mar 5 05:32:49 2012
+++ /utest/model/test_statistics.py Thu Aug 16 05:55:59 2012
@@ -6,7 +6,8 @@
from robot.result.testcase import TestCase
-def verify_stat(stat, name, passed, failed, critical=None, non_crit=None,
id=None):
+def verify_stat(stat, name, passed, failed, critical=None, non_crit=None,
+ id=None, elapsed=0):
assert_equals(stat.name, name, 'stat.name')
assert_equals(stat.passed, passed)
assert_equals(stat.failed, failed)
@@ -16,6 +17,7 @@
assert_equals(stat.non_critical, non_crit)
if id:
assert_equals(stat.id, id)
+ assert_equals(stat.elapsed, elapsed)
def verify_suite(suite, name, id, passed, failed):
verify_stat(suite.stat, name, passed, failed, id=id)
@@ -148,5 +150,44 @@
verify_stat(stats[6], 'Root Suite.Second Sub Suite.Sub Suite 2_1',
0, 1, id='s1-s2-s1')
+class TestElapsedTime(unittest.TestCase):
+
+ def setUp(self):
+ ts = '20120816 00:00:'
+ suite = TestSuite(starttime=ts+'00.000', endtime=ts+'59.999')
+ suite.suites = [
+ TestSuite(starttime=ts+'00.000', endtime=ts+'30.000'),
+ TestSuite(starttime=ts+'30.000', endtime=ts+'42.042')
+ ]
+ suite.suites[0].tests = [
+ TestCase(starttime=ts+'00.000', endtime=ts+'00.001',
tags=['t1']),
+ TestCase(starttime=ts+'00.001', endtime=ts+'01.001',
tags=['t1', 't2'])
+ ]
+ suite.suites[1].tests = [
+ TestCase(starttime=ts+'30.000', endtime=ts+'40.000',
tags=['t1', 't2', 't3'])
+ ]
+ suite.set_criticality(critical_tags=['t2'])
+ self.stats = Statistics(suite,
tag_stat_combine=[('?2', 'combined')])
+
+ def test_total_stats(self):
+ assert_equals(self.stats.total.all.elapsed, 11001)
+ assert_equals(self.stats.total.critical.elapsed, 11000)
+
+ def test_tag_stats(self):
+ t1, t2, t3 = self.stats.tags.tags.values()
+ verify_stat(t1, 't1', 0, 3, elapsed=11001)
+ verify_stat(t2, 't2', 0, 2, elapsed=11000)
+ verify_stat(t3, 't3', 0, 1, elapsed=10000)
+
+ def test_combined_tag_stats(self):
+ combined = self.stats.tags.combined[0]
+ verify_stat(combined, 'combined', 0, 2, elapsed=11000)
+
+ def test_suite_stats(self):
+ assert_equals(self.stats.suite.stat.elapsed, 59999)
+ assert_equals(self.stats.suite.suites[0].stat.elapsed, 30000)
+ assert_equals(self.stats.suite.suites[1].stat.elapsed, 12042)
+
+
if __name__ == "__main__":
unittest.main()
==============================================================================
Revision: 082d895e55ee
Author: Pekka Klärck
Date: Thu Aug 16 06:47:28 2012
Log: Write elapsed times of statistics to the JS model in log/report.
Update issue 1194
Now elapsed times are written to the JS model in logs/reports but not yet
used for anything.
http://code.google.com/p/robotframework/source/detail?r=082d895e55ee
Modified:
/src/robot/model/stats.py
/src/robot/reporting/jsmodelbuilders.py
/utest/model/test_statistics.py
/utest/reporting/test_jsmodelbuilders.py
=======================================
--- /src/robot/model/stats.py Thu Aug 16 05:55:59 2012
+++ /src/robot/model/stats.py Thu Aug 16 06:47:28 2012
@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-from robot.utils import html_escape
+from robot.utils import elapsed_time_to_string, html_escape
from .tags import TagPatterns
@@ -25,12 +25,16 @@
self.failed = 0
self.elapsed = 0
- def get_attributes(self, include_label=False, exclude_empty=False,
- values_as_strings=False, html_escape=False):
+ def get_attributes(self, include_label=False, include_elapsed=False,
+ exclude_empty=False, values_as_strings=False,
+ html_escape=False):
attrs = {'pass': self.passed, 'fail': self.failed}
attrs.update(self._get_custom_attrs())
if include_label:
attrs['label'] = self.name
+ if include_elapsed:
+ attrs['elapsed'] = elapsed_time_to_string(self.elapsed,
+ include_millis=False)
if exclude_empty:
attrs = dict((k, v) for k, v in attrs.items() if v != '')
if values_as_strings:
=======================================
--- /src/robot/reporting/jsmodelbuilders.py Tue Jun 26 03:11:49 2012
+++ /src/robot/reporting/jsmodelbuilders.py Thu Aug 16 06:47:28 2012
@@ -156,8 +156,8 @@
self._build_stats(statistics.suite))
def _build_stats(self, stats):
- return tuple(stat.get_attributes(include_label=True,
exclude_empty=True,
- html_escape=True)
+ return tuple(stat.get_attributes(include_label=True,
include_elapsed=True,
+ exclude_empty=True,
html_escape=True)
for stat in stats)
=======================================
--- /utest/model/test_statistics.py Thu Aug 16 05:55:59 2012
+++ /utest/model/test_statistics.py Thu Aug 16 06:47:28 2012
@@ -188,6 +188,17 @@
assert_equals(self.stats.suite.suites[0].stat.elapsed, 30000)
assert_equals(self.stats.suite.suites[1].stat.elapsed, 12042)
+ def test_suite_stats_when_suite_has_no_times(self):
+ suite = TestSuite()
+ assert_equals(Statistics(suite).suite.stat.elapsed, 0)
+ ts = '20120816 00:00:'
+ suite.tests = [TestCase(starttime=ts+'00.000',
endtime=ts+'00.001'),
+ TestCase(starttime=ts+'00.001',
endtime=ts+'01.001')]
+ assert_equals(Statistics(suite).suite.stat.elapsed, 1001)
+ suite.suites = [TestSuite(starttime=ts+'02.000',
endtime=ts+'12.000'),
+ TestSuite()]
+ assert_equals(Statistics(suite).suite.stat.elapsed, 11001)
+
if __name__ == "__main__":
unittest.main()
=======================================
--- /utest/reporting/test_jsmodelbuilders.py Fri Aug 10 07:44:11 2012
+++ /utest/reporting/test_jsmodelbuilders.py Thu Aug 16 06:47:28 2012
@@ -312,20 +312,23 @@
def test_total_stats(self):
critical, all = self._build_statistics()[0]
- self._verify_stat(critical, 2, 0, 'Critical Tests')
- self._verify_stat(all, 2, 2, 'All Tests')
+ self._verify_stat(all, 2, 2, 'All Tests', '00:00:33')
+ self._verify_stat(critical, 2, 0, 'Critical Tests', '00:00:22')
def test_tag_stats(self):
- t2, comb, t1 = self._build_statistics()[1]
- self._verify_stat(t2, 2, 0, 't2', info='critical', doc='doc',
links='t:url')
- self._verify_stat(comb, 2, 0, 'name', info='combined',
combined='t1&t2')
- self._verify_stat(t1, 2, 2, 't1')
+ t2, comb, t1, t3 = self._build_statistics()[1]
+ self._verify_stat(t2, 2, 0, 't2', '00:00:22',
+ info='critical', doc='doc', links='t:url')
+ self._verify_stat(comb, 2, 0, 'name', '00:00:22',
+ info='combined', combined='t1&t2')
+ self._verify_stat(t1, 2, 2, 't1', '00:00:33')
+ self._verify_stat(t3, 0, 1, 't3', '00:00:01')
def test_suite_stats(self):
root, sub1, sub2 = self._build_statistics()[2]
- self._verify_stat(root, 2, 2, 'root', name='root', id='s1')
- self._verify_stat(sub1, 1, 1, 'root.sub1', name='sub1', id='s1-s1')
- self._verify_stat(sub2, 1, 1, 'root.sub2', name='sub2', id='s1-s2')
+ self._verify_stat(root, 2, 2, 'root', '00:00:42', name='root',
id='s1')
+ self._verify_stat(sub1, 1, 1, 'root.sub1', '00:00:10',
name='sub1', id='s1-s1')
+ self._verify_stat(sub2, 1, 1, 'root.sub2', '00:00:30',
name='sub2', id='s1-s2')
def _build_statistics(self):
return StatisticsBuilder().build(self._get_statistics())
@@ -338,20 +341,26 @@
tag_stat_link=[('?2', 'url', '%1')])
def _get_suite(self):
- suite = TestSuite(name='root')
+ ts = lambda s, ms=0: '20120816 16:09:%02d.%03d' % (s, ms)
+ suite = TestSuite(name='root', starttime=ts(0), endtime=ts(42))
suite.set_criticality(critical_tags=['t2'])
- sub1 = TestSuite(name='sub1')
+ sub1 = TestSuite(name='sub1', starttime=ts(0), endtime=ts(10))
sub2 = TestSuite(name='sub2')
suite.suites = [sub1, sub2]
- sub1.tests = [TestCase(tags=['t1', 't2'], status='PASS'),
- TestCase(tags=['t1'], status='FAIL')]
- sub2.tests.create(tags=['t1', 't2'], status='PASS')
- sub2.suites.create(name='below suite stat level')
- sub2.suites[0].tests.create(tags=['t1'], status='FAIL')
+ sub1.tests = [
+ TestCase(tags=['t1', 't2'], status='PASS', starttime=ts(0),
endtime=ts(1, 500)),
+ TestCase(tags=['t1', 't3'], status='FAIL', starttime=ts(2),
endtime=ts(3, 499))
+ ]
+ sub2.tests = [
+ TestCase(tags=['t1', 't2'], status='PASS', starttime=ts(10),
endtime=ts(30))
+ ]
+ sub2.suites.create(name='below suite stat level')\
+ .tests.create(tags=['t1'], status='FAIL',
starttime=ts(30), endtime=ts(40))
return suite
- def _verify_stat(self, stat, pass_, fail, label, **attrs):
- attrs.update({'pass': pass_, 'fail': fail, 'label': label})
+ def _verify_stat(self, stat, pass_, fail, label, elapsed, **attrs):
+ attrs.update({'pass': pass_, 'fail': fail, 'label': label,
+ 'elapsed': elapsed})
assert_equals(stat, attrs)