diff options
-rw-r--r-- | docs/api/apidoc/functest.core.rst | 1 | ||||
-rw-r--r-- | docs/api/apidoc/functest.core.unit.rst | 7 | ||||
-rw-r--r-- | docs/com/pres/framework/framework.md | 56 | ||||
-rw-r--r-- | functest/core/feature.py | 2 | ||||
-rw-r--r-- | functest/core/unit.py (renamed from functest/core/pytest_suite_runner.py) | 47 | ||||
-rw-r--r-- | functest/opnfv_tests/openstack/snaps/snaps_test_runner.py | 4 | ||||
-rw-r--r-- | functest/tests/unit/core/test_unit.py (renamed from functest/tests/unit/core/test_pytest_suite_runner.py) | 10 | ||||
-rw-r--r-- | functest/tests/unit/utils/test_functest_utils.py | 10 |
8 files changed, 110 insertions, 27 deletions
diff --git a/docs/api/apidoc/functest.core.rst b/docs/api/apidoc/functest.core.rst index 27b2ed1f..55c795be 100644 --- a/docs/api/apidoc/functest.core.rst +++ b/docs/api/apidoc/functest.core.rst @@ -14,4 +14,5 @@ Submodules functest.core.feature functest.core.testcase functest.core.vnf + functest.core.unit diff --git a/docs/api/apidoc/functest.core.unit.rst b/docs/api/apidoc/functest.core.unit.rst new file mode 100644 index 00000000..5dd6880e --- /dev/null +++ b/docs/api/apidoc/functest.core.unit.rst @@ -0,0 +1,7 @@ +functest.core.unit module +========================= + +.. automodule:: functest.core.unit + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/com/pres/framework/framework.md b/docs/com/pres/framework/framework.md index 3c1aae1b..1b07a8e0 100644 --- a/docs/com/pres/framework/framework.md +++ b/docs/com/pres/framework/framework.md @@ -252,6 +252,62 @@ run: +## class Suite +bases: TestCase + +base model for running unittest.TestSuite + + +### run(**kwargs) + +- allows running any unittest.TestSuite +- sets the following attributes required to push the results to DB: + - result + - start_time + - stop_time + - details + + + +## Your fourth test case + + +### fourth.py + +```python +#!/usr/bin/env python + +import unittest + +class TestStringMethods(unittest.TestCase): + + def test_upper(self): + self.assertEqual('Hello World'.upper(), + 'HELLO WORLD') +``` + + +### functest/ci/testcases.yaml + +``` +case_name: fourth +project_name: functest +criteria: 100 +blocking: true +clean_flag: false +description: '' +dependencies: + installer: '' + scenario: '' +run: + module: 'functest.core.unit' + class: 'Suite' + args: + name: 'fourth' +``` + + + ## Euphrates diff --git a/functest/core/feature.py b/functest/core/feature.py index 140c9bb2..d53eb7d0 100644 --- a/functest/core/feature.py +++ b/functest/core/feature.py @@ -7,7 +7,7 @@ # which accompanies this distribution, and is available at # http://www.apache.org/licenses/LICENSE-2.0 -"""Define the parent class of all Functest Features. +"""Define the parent classes of all Functest Features. Feature is considered as TestCase offered by Third-party. It offers helpers to run any python method or any bash command. diff --git a/functest/core/pytest_suite_runner.py b/functest/core/unit.py index efcef7b6..6799420c 100644 --- a/functest/core/pytest_suite_runner.py +++ b/functest/core/unit.py @@ -1,11 +1,13 @@ -# Copyright (c) 2015 All rights reserved -# This program and the accompanying materials +#!/usr/bin/env python + +# Copyright (c) 2016 Cable Television Laboratories, Inc. and others. +# +# 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 +"""Define the parent class to run unittest.TestSuite as TestCase.""" from __future__ import division @@ -17,21 +19,42 @@ import six from functest.core import testcase +__author__ = ("Steven Pisarski <s.pisarski@cablelabs.com>, " + "Cedric Ollivier <cedric.ollivier@orange.com>") -class PyTestSuiteRunner(testcase.TestCase): - """ - This superclass is designed to execute pre-configured unittest.TestSuite() - objects - """ + +class Suite(testcase.TestCase): + """Base model for running unittest.TestSuite.""" def __init__(self, **kwargs): - super(PyTestSuiteRunner, self).__init__(**kwargs) + super(Suite, self).__init__(**kwargs) self.suite = None self.logger = logging.getLogger(__name__) def run(self, **kwargs): - """ - Starts test execution from the functest framework + """Run the test suite. + + It allows running any unittest.TestSuite and getting its + execution status. + + By default, it runs the suite defined as instance attribute. + It can be overriden by passing name as arg. It must + conform with TestLoader.loadTestsFromName(). + + It sets the following attributes required to push the results + to DB: + + * result, + * start_time, + * stop_time, + * details. + + Args: + kwargs: Arbitrary keyword arguments. + + Returns: + TestCase.EX_OK if any TestSuite has been run, + TestCase.EX_RUN_ERROR otherwise. """ try: name = kwargs["name"] diff --git a/functest/opnfv_tests/openstack/snaps/snaps_test_runner.py b/functest/opnfv_tests/openstack/snaps/snaps_test_runner.py index 94b97551..2b98a202 100644 --- a/functest/opnfv_tests/openstack/snaps/snaps_test_runner.py +++ b/functest/opnfv_tests/openstack/snaps/snaps_test_runner.py @@ -7,7 +7,7 @@ import logging -from functest.core.pytest_suite_runner import PyTestSuiteRunner +from functest.core import unit from functest.opnfv_tests.openstack.snaps import snaps_utils from functest.utils import functest_utils from functest.utils.constants import CONST @@ -16,7 +16,7 @@ from snaps.openstack import create_flavor from snaps.openstack.tests import openstack_tests -class SnapsTestRunner(PyTestSuiteRunner): +class SnapsTestRunner(unit.Suite): """ This test executes the SNAPS Python Tests """ diff --git a/functest/tests/unit/core/test_pytest_suite_runner.py b/functest/tests/unit/core/test_unit.py index f317cdea..f86ea8d3 100644 --- a/functest/tests/unit/core/test_pytest_suite_runner.py +++ b/functest/tests/unit/core/test_unit.py @@ -12,20 +12,19 @@ import unittest import mock -from functest.core import pytest_suite_runner +from functest.core import unit from functest.core import testcase class PyTestSuiteRunnerTesting(unittest.TestCase): def setUp(self): - self.psrunner = pytest_suite_runner.PyTestSuiteRunner() + self.psrunner = unit.Suite() @mock.patch('unittest.TestLoader') def _test_run(self, mock_class=None, result=mock.Mock(), status=testcase.TestCase.EX_OK): - with mock.patch('functest.core.pytest_suite_runner.' - 'unittest.TextTestRunner.run', + with mock.patch('functest.core.unit.unittest.TextTestRunner.run', return_value=result): self.assertEqual(self.psrunner.run(), status) mock_class.assert_not_called() @@ -78,8 +77,7 @@ class PyTestSuiteRunnerTesting(unittest.TestCase): failures=[]) mock_obj = mock.Mock() mock_class.side_effect = mock_obj - with mock.patch('functest.core.pytest_suite_runner.' - 'unittest.TextTestRunner.run', + with mock.patch('functest.core.unit.unittest.TextTestRunner.run', return_value=mock_result): self.assertEqual(self.psrunner.run(name='foo'), testcase.TestCase.EX_OK) diff --git a/functest/tests/unit/utils/test_functest_utils.py b/functest/tests/unit/utils/test_functest_utils.py index 218f7f72..12604c1a 100644 --- a/functest/tests/unit/utils/test_functest_utils.py +++ b/functest/tests/unit/utils/test_functest_utils.py @@ -452,9 +452,8 @@ class FunctestUtilsTesting(unittest.TestCase): mock_logger_info.assert_called_once_with(msg_exec) mopen.assert_called_once_with(self.output_file, "w") - @mock.patch('functest.utils.functest_utils.logger.info') - def test_execute_command_args_missing_with_success(self, mock_logger_info, - ): + @mock.patch('sys.stdout') + def test_execute_command_args_missing_with_success(self, stdout=None): with mock.patch('functest.utils.functest_utils.subprocess.Popen') \ as mock_subproc_open: @@ -476,9 +475,8 @@ class FunctestUtilsTesting(unittest.TestCase): output_file=None) self.assertEqual(resp, 0) - @mock.patch('functest.utils.functest_utils.logger.error') - def test_execute_command_args_missing_with_error(self, mock_logger_error, - ): + @mock.patch('sys.stdout') + def test_execute_command_args_missing_with_error(self, stdout=None): with mock.patch('functest.utils.functest_utils.subprocess.Popen') \ as mock_subproc_open: |