|
@@ -7,10 +7,9 @@ import json
|
|
|
import time
|
|
|
import logging
|
|
|
import collections
|
|
|
-import re
|
|
|
|
|
|
from oeqa.core.loader import OETestLoader
|
|
|
-from oeqa.core.runner import OETestRunner, xmlEnabled
|
|
|
+from oeqa.core.runner import OETestRunner
|
|
|
|
|
|
class OETestContext(object):
|
|
|
loaderClass = OETestLoader
|
|
@@ -59,92 +58,6 @@ class OETestContext(object):
|
|
|
|
|
|
return result
|
|
|
|
|
|
- def logSummary(self, result, component, context_msg=''):
|
|
|
- self.logger.info("SUMMARY:")
|
|
|
- self.logger.info("%s (%s) - Ran %d test%s in %.3fs" % (component,
|
|
|
- context_msg, result.testsRun, result.testsRun != 1 and "s" or "",
|
|
|
- (self._run_end_time - self._run_start_time)))
|
|
|
-
|
|
|
- if result.wasSuccessful():
|
|
|
- msg = "%s - OK - All required tests passed" % component
|
|
|
- else:
|
|
|
- msg = "%s - FAIL - Required tests failed" % component
|
|
|
- skipped = len(self._results['skipped'])
|
|
|
- if skipped:
|
|
|
- msg += " (skipped=%d)" % skipped
|
|
|
- self.logger.info(msg)
|
|
|
-
|
|
|
- def _getDetailsNotPassed(self, case, type, desc):
|
|
|
- found = False
|
|
|
-
|
|
|
- for (scase, msg) in self._results[type]:
|
|
|
- # XXX: When XML reporting is enabled scase is
|
|
|
- # xmlrunner.result._TestInfo instance instead of
|
|
|
- # string.
|
|
|
- if xmlEnabled:
|
|
|
- if case.id() == scase.test_id:
|
|
|
- found = True
|
|
|
- break
|
|
|
- scase_str = scase.test_id
|
|
|
- else:
|
|
|
- if case == scase:
|
|
|
- found = True
|
|
|
- break
|
|
|
- scase_str = str(scase)
|
|
|
-
|
|
|
- # When fails at module or class level the class name is passed as string
|
|
|
- # so figure out to see if match
|
|
|
- m = re.search("^setUpModule \((?P<module_name>.*)\)$", scase_str)
|
|
|
- if m:
|
|
|
- if case.__class__.__module__ == m.group('module_name'):
|
|
|
- found = True
|
|
|
- break
|
|
|
-
|
|
|
- m = re.search("^setUpClass \((?P<class_name>.*)\)$", scase_str)
|
|
|
- if m:
|
|
|
- class_name = "%s.%s" % (case.__class__.__module__,
|
|
|
- case.__class__.__name__)
|
|
|
-
|
|
|
- if class_name == m.group('class_name'):
|
|
|
- found = True
|
|
|
- break
|
|
|
-
|
|
|
- if found:
|
|
|
- return (found, msg)
|
|
|
-
|
|
|
- return (found, None)
|
|
|
-
|
|
|
- def logDetails(self):
|
|
|
- self.logger.info("RESULTS:")
|
|
|
- for case_name in self._registry['cases']:
|
|
|
- case = self._registry['cases'][case_name]
|
|
|
-
|
|
|
- result_types = ['failures', 'errors', 'skipped', 'expectedFailures']
|
|
|
- result_desc = ['FAILED', 'ERROR', 'SKIPPED', 'EXPECTEDFAIL']
|
|
|
-
|
|
|
- fail = False
|
|
|
- desc = None
|
|
|
- for idx, name in enumerate(result_types):
|
|
|
- (fail, msg) = self._getDetailsNotPassed(case, result_types[idx],
|
|
|
- result_desc[idx])
|
|
|
- if fail:
|
|
|
- desc = result_desc[idx]
|
|
|
- break
|
|
|
-
|
|
|
- oeid = -1
|
|
|
- for d in case.decorators:
|
|
|
- if hasattr(d, 'oeid'):
|
|
|
- oeid = d.oeid
|
|
|
-
|
|
|
- if fail:
|
|
|
- self.logger.info("RESULTS - %s - Testcase %s: %s" % (case.id(),
|
|
|
- oeid, desc))
|
|
|
- if msg:
|
|
|
- self.logger.info(msg)
|
|
|
- else:
|
|
|
- self.logger.info("RESULTS - %s - Testcase %s: %s" % (case.id(),
|
|
|
- oeid, 'PASSED'))
|
|
|
-
|
|
|
class OETestContextExecutor(object):
|
|
|
_context_class = OETestContext
|
|
|
|
|
@@ -227,8 +140,8 @@ class OETestContextExecutor(object):
|
|
|
self.tc = self._context_class(**self.tc_kwargs['init'])
|
|
|
self.tc.loadTests(self.module_paths, **self.tc_kwargs['load'])
|
|
|
rc = self.tc.runTests(**self.tc_kwargs['run'])
|
|
|
- self.tc.logSummary(rc, self.name)
|
|
|
- self.tc.logDetails()
|
|
|
+ rc.logSummary(self.name)
|
|
|
+ rc.logDetails()
|
|
|
|
|
|
output_link = os.path.join(os.path.dirname(args.output_log),
|
|
|
"%s-results.log" % self.name)
|