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)


Reply via email to