summaryrefslogtreecommitdiffstats
path: root/meta/lib/oeqa/core/runner.py
diff options
context:
space:
mode:
Diffstat (limited to 'meta/lib/oeqa/core/runner.py')
-rw-r--r--meta/lib/oeqa/core/runner.py88
1 files changed, 88 insertions, 0 deletions
diff --git a/meta/lib/oeqa/core/runner.py b/meta/lib/oeqa/core/runner.py
index 0b04e8d586..75058384ae 100644
--- a/meta/lib/oeqa/core/runner.py
+++ b/meta/lib/oeqa/core/runner.py
@@ -5,6 +5,7 @@ import os
5import time 5import time
6import unittest 6import unittest
7import logging 7import logging
8import re
8 9
9xmlEnabled = False 10xmlEnabled = False
10try: 11try:
@@ -44,6 +45,93 @@ class OETestResult(_TestResult):
44 self.tc._results['skipped'] = self.skipped 45 self.tc._results['skipped'] = self.skipped
45 self.tc._results['expectedFailures'] = self.expectedFailures 46 self.tc._results['expectedFailures'] = self.expectedFailures
46 47
48 def logSummary(self, component, context_msg=''):
49 elapsed_time = self.tc._run_end_time - self.tc._run_start_time
50 self.tc.logger.info("SUMMARY:")
51 self.tc.logger.info("%s (%s) - Ran %d test%s in %.3fs" % (component,
52 context_msg, self.testsRun, self.testsRun != 1 and "s" or "",
53 elapsed_time))
54
55 if self.wasSuccessful():
56 msg = "%s - OK - All required tests passed" % component
57 else:
58 msg = "%s - FAIL - Required tests failed" % component
59 skipped = len(self.tc._results['skipped'])
60 if skipped:
61 msg += " (skipped=%d)" % skipped
62 self.tc.logger.info(msg)
63
64 def _getDetailsNotPassed(self, case, type, desc):
65 found = False
66
67 for (scase, msg) in self.tc._results[type]:
68 # XXX: When XML reporting is enabled scase is
69 # xmlrunner.result._TestInfo instance instead of
70 # string.
71 if xmlEnabled:
72 if case.id() == scase.test_id:
73 found = True
74 break
75 scase_str = scase.test_id
76 else:
77 if case == scase:
78 found = True
79 break
80 scase_str = str(scase)
81
82 # When fails at module or class level the class name is passed as string
83 # so figure out to see if match
84 m = re.search("^setUpModule \((?P<module_name>.*)\)$", scase_str)
85 if m:
86 if case.__class__.__module__ == m.group('module_name'):
87 found = True
88 break
89
90 m = re.search("^setUpClass \((?P<class_name>.*)\)$", scase_str)
91 if m:
92 class_name = "%s.%s" % (case.__class__.__module__,
93 case.__class__.__name__)
94
95 if class_name == m.group('class_name'):
96 found = True
97 break
98
99 if found:
100 return (found, msg)
101
102 return (found, None)
103
104 def logDetails(self):
105 self.tc.logger.info("RESULTS:")
106 for case_name in self.tc._registry['cases']:
107 case = self.tc._registry['cases'][case_name]
108
109 result_types = ['failures', 'errors', 'skipped', 'expectedFailures']
110 result_desc = ['FAILED', 'ERROR', 'SKIPPED', 'EXPECTEDFAIL']
111
112 fail = False
113 desc = None
114 for idx, name in enumerate(result_types):
115 (fail, msg) = self._getDetailsNotPassed(case, result_types[idx],
116 result_desc[idx])
117 if fail:
118 desc = result_desc[idx]
119 break
120
121 oeid = -1
122 for d in case.decorators:
123 if hasattr(d, 'oeid'):
124 oeid = d.oeid
125
126 if fail:
127 self.tc.logger.info("RESULTS - %s - Testcase %s: %s" % (case.id(),
128 oeid, desc))
129 if msg:
130 self.tc.logger.info(msg)
131 else:
132 self.tc.logger.info("RESULTS - %s - Testcase %s: %s" % (case.id(),
133 oeid, 'PASSED'))
134
47class OETestRunner(_TestRunner): 135class OETestRunner(_TestRunner):
48 streamLoggerClass = OEStreamLogger 136 streamLoggerClass = OEStreamLogger
49 137