X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=functest%2Fcore%2Fpytest_suite_runner.py;h=efcef7b6683df9b909276a2bb34abf0271304f64;hb=11e81955122f66f8d4d211fb81c1111af2eddbee;hp=ba372c3b9b6b10a40bbfe9b473ce3a75efee11b9;hpb=d334e0e1e56d265c95d79c551c315add252e58cd;p=functest.git diff --git a/functest/core/pytest_suite_runner.py b/functest/core/pytest_suite_runner.py index ba372c3b9..efcef7b66 100644 --- a/functest/core/pytest_suite_runner.py +++ b/functest/core/pytest_suite_runner.py @@ -1,5 +1,3 @@ -#!/usr/bin/python -# # Copyright (c) 2015 All rights reserved # This program and the accompanying materials # are made available under the terms of the Apache License, Version 2.0 @@ -7,50 +5,57 @@ # # http://www.apache.org/licenses/LICENSE-2.0 -from functest.core import TestCasesBase -import unittest +# pylint: disable=missing-docstring + +from __future__ import division + +import logging import time +import unittest + +import six +from functest.core import testcase -class PyTestSuiteRunner(TestCasesBase.TestCasesBase): + +class PyTestSuiteRunner(testcase.TestCase): """ This superclass is designed to execute pre-configured unittest.TestSuite() objects """ - def __init__(self): - super(PyTestSuiteRunner, self).__init__() + + def __init__(self, **kwargs): + super(PyTestSuiteRunner, self).__init__(**kwargs) self.suite = None + self.logger = logging.getLogger(__name__) def run(self, **kwargs): """ Starts test execution from the functest framework """ - start_time = time.time() - result = unittest.TextTestRunner(verbosity=2).run(self.suite) - end_time = time.time() - - if result.errors: - self.logger.error('Number of errors in test suite - ' + - str(len(result.errors))) - for test, message in result.errors: - self.logger.error(str(test) + " ERROR with " + message) - - if result.failures: - self.logger.error('Number of failures in test suite - ' + - str(len(result.failures))) - for test, message in result.failures: - self.logger.error(str(test) + " FAILED with " + message) - - if (result.errors and len(result.errors) > 0) \ - or (result.failures and len(result.failures) > 0): - self.logger.info("%s FAILED" % self.case_name) - self.criteria = 'FAIL' - exit_code = TestCasesBase.TestCasesBase.EX_RUN_ERROR - else: - self.logger.info("%s OK" % self.case_name) - exit_code = TestCasesBase.TestCasesBase.EX_OK - - self.details = {'timestart': start_time, - 'duration': round(end_time - start_time, 1), - 'status': self.criteria} - return exit_code + try: + name = kwargs["name"] + try: + self.suite = unittest.TestLoader().loadTestsFromName(name) + except ImportError: + self.logger.error("Can not import %s", name) + return testcase.TestCase.EX_RUN_ERROR + except KeyError: + pass + self.start_time = time.time() + stream = six.StringIO() + result = unittest.TextTestRunner( + stream=stream, verbosity=2).run(self.suite) + self.logger.debug("\n\n%s", stream.getvalue()) + self.stop_time = time.time() + self.details = {"failures": result.failures, + "errors": result.errors} + try: + self.result = 100 * ( + (result.testsRun - (len(result.failures) + + len(result.errors))) / + result.testsRun) + return testcase.TestCase.EX_OK + except ZeroDivisionError: + self.logger.error("No test has been run") + return testcase.TestCase.EX_RUN_ERROR