From dbedb36db63b406c5264be20e100062fc59c5a19 Mon Sep 17 00:00:00 2001 From: Cédric Ollivier Date: Tue, 23 May 2017 16:37:04 +0200 Subject: Rename pytest_suite_runner.py to unit.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It also adds the rst files to include this module in apidoc. Change-Id: Iabbb17bc8601265bd9436c75d1afc0b470df1eb4 Signed-off-by: Cédric Ollivier --- functest/core/unit.py | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 functest/core/unit.py (limited to 'functest/core/unit.py') diff --git a/functest/core/unit.py b/functest/core/unit.py new file mode 100644 index 00000000..efcef7b6 --- /dev/null +++ b/functest/core/unit.py @@ -0,0 +1,61 @@ +# 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 +# which accompanies this distribution, and is available at +# +# http://www.apache.org/licenses/LICENSE-2.0 + +# pylint: disable=missing-docstring + +from __future__ import division + +import logging +import time +import unittest + +import six + +from functest.core import testcase + + +class PyTestSuiteRunner(testcase.TestCase): + """ + This superclass is designed to execute pre-configured unittest.TestSuite() + objects + """ + + 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 + """ + 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 -- cgit 1.2.3-korg