oe-selftest: export test results via xmlrunner

if available, use the xmlrunner for exporting the test results to a
dir named the same than the log where the text results are stored.
this means creating a dir with the name of the log (without the .log)
and dumping there the xml files that indicate the results of each of
the tests.

if xmlrunner is not available then it will behave the same as before,
no xml exports.

[YOCTO#9682]

(From OE-Core rev: d51f9dd34d759c77b9e7050405cbb6a88a578f73)

Signed-off-by: Benjamin Esquivel <benjamin.esquivel@linux.intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Benjamin Esquivel 2016-07-21 12:02:05 +00:00 committed by Richard Purdie
parent cc3c276852
commit e91d0d5d1c
1 changed files with 30 additions and 3 deletions

View File

@ -48,8 +48,19 @@ import oeqa.utils.ftools as ftools
from oeqa.utils.commands import runCmd, get_bb_var, get_test_layer
from oeqa.selftest.base import oeSelfTest, get_available_machines
try:
import xmlrunner
from xmlrunner.result import _XMLTestResult as TestResult
from xmlrunner import XMLTestRunner as _TestRunner
except ImportError:
# use the base runner instead
from unittest import TextTestResult as TestResult
from unittest import TextTestRunner as _TestRunner
log_prefix = "oe-selftest-" + t.strftime("%Y-%m-%d_%H:%M:%S")
def logger_create():
log_file = "oe-selftest-" + t.strftime("%Y-%m-%d_%H:%M:%S") + ".log"
log_file = log_prefix + ".log"
if os.path.exists("oe-selftest.log"): os.remove("oe-selftest.log")
os.symlink(log_file, "oe-selftest.log")
@ -520,7 +531,8 @@ def main():
suite = unittest.TestSuite()
loader = unittest.TestLoader()
loader.sortTestMethodsUsing = None
runner = unittest.TextTestRunner(verbosity=2, resultclass=buildResultClass(args))
runner = TestRunner(verbosity=2,
resultclass=buildResultClass(args))
# we need to do this here, otherwise just loading the tests
# will take 2 minutes (bitbake -e calls)
oeSelfTest.testlayer_path = get_test_layer()
@ -561,7 +573,7 @@ def buildResultClass(args):
"""Build a Result Class to use in the testcase execution"""
import site
class StampedResult(unittest.TextTestResult):
class StampedResult(TestResult):
"""
Custom TestResult that prints the time when a test starts. As oe-selftest
can take a long time (ie a few hours) to run, timestamps help us understand
@ -631,6 +643,21 @@ def buildResultClass(args):
return StampedResult
class TestRunner(_TestRunner):
"""Test runner class aware of exporting tests."""
def __init__(self, *args, **kwargs):
try:
exportdir = os.path.join(os.getcwd(), log_prefix)
kwargsx = dict(**kwargs)
# argument specific to XMLTestRunner, if adding a new runner then
# also add logic to use other runner's args.
kwargsx['output'] = exportdir
kwargsx['descriptions'] = False
# done for the case where telling the runner where to export
super(TestRunner, self).__init__(*args, **kwargsx)
except TypeError:
log.info("test runner init'ed like unittest")
super(TestRunner, self).__init__(*args, **kwargs)
if __name__ == "__main__":
try: