[Piglit] [PATCH v2] framework: keep track of running stats and display them

Ilia Mirkin imirkin at alum.mit.edu
Sat Feb 15 21:54:09 PST 2014


This will display a line that looks like:
[00076/11064] fail: 1, pass: 55, skip: 19 Running Test(s): 00075

Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
---

One problem that I noticed is that this might make the line go over 80
characters when running in parallel mode. If the line length is longer than
the terminal width (at least with aterm), then the \r trick doesn't work
nearly as well -- the stuff before the wrap stays, and a new line is emitted
every time. Not the end of the world, but not great. IMHO the value of this
feature outweighs the potential for such things. It's easy enough to resize
the term if this happens.

 framework/core.py |  8 +++++---
 framework/log.py  | 16 +++++++++++++---
 2 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/framework/core.py b/framework/core.py
index ac25917..fc59e3c 100644
--- a/framework/core.py
+++ b/framework/core.py
@@ -435,6 +435,7 @@ class Test(object):
         '''
 
         log_current = log.get_current()
+        test_result = None
         # Run the test
         if env.execute:
             try:
@@ -462,15 +463,16 @@ class Test(object):
                 result['traceback'] = \
                     "".join(traceback.format_tb(sys.exc_info()[2]))
 
-            if 'subtest' in result and len(result['subtest'].keys()) > 1:
-                for test in result['subtest'].keys():
+            test_result = result['result']
+            if 'subtest' in result and len(result['subtest']) > 1:
+                for test in result['subtest']:
                     result['result'] = result['subtest'][test]
                     json_writer.write_dict_item(os.path.join(path, test), result)
             else:
                 json_writer.write_dict_item(path, result)
         else:
             log.log()
-        log.mark_complete(log_current)
+        log.mark_complete(log_current, test_result)
 
 
 class Group(dict):
diff --git a/framework/log.py b/framework/log.py
index 01c3a32..9f2d723 100644
--- a/framework/log.py
+++ b/framework/log.py
@@ -37,6 +37,11 @@ class Log(object):
         self.__running = []
         self.__generator = (x for x in xrange(self.__total))
         self.__pad = len(str(self.__total))
+        self.__summary = {}
+
+    def _summary(self):
+        return ", ".join("{0}: {1}".format(k, self.__summary[k])
+                         for k in sorted(self.__summary))
 
     def _running(self):
         return "Running Test(s): {}".format(
@@ -47,12 +52,13 @@ class Log(object):
                                   str(self.__total).zfill(self.__pad))
 
     @synchronized_self
-    def mark_complete(self, value):
+    def mark_complete(self, value, result):
         """ Used to mark a test as complete in the log
 
         Arguments:
         value -- the test number to mark complete
-        
+        result -- the result of the completed test
+
         """
         # Mark running complete
         assert value in self.__running
@@ -61,6 +67,9 @@ class Log(object):
         # increment the number of completed tests
         self.__complete += 1
 
+        if result:
+            self.__summary[result] = self.__summary.get(result, 0) + 1
+
     @synchronized_self
     def log(self):
         """ Print to the screen 
@@ -69,7 +78,8 @@ class Log(object):
         over it.
         
         """
-        sys.stdout.write("{0} {1} \r".format(self._percent(), self._running()))
+        sys.stdout.write("{0} {1} {2}\r".format(
+            self._percent(), self._summary(), self._running()))
         # Need to flush explicitly, otherwise it all gets buffered without a
         # newline.
         sys.stdout.flush()
-- 
1.8.3.2



More information about the Piglit mailing list