aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/api/apidoc/functest.core.rst1
-rw-r--r--docs/api/apidoc/functest.core.unit.rst7
-rw-r--r--docs/com/pres/framework/framework.md56
-rw-r--r--functest/core/feature.py2
-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.py4
-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.py10
8 files changed, 110 insertions, 27 deletions
diff --git a/docs/api/apidoc/functest.core.rst b/docs/api/apidoc/functest.core.rst
index 27b2ed1fb..55c795be0 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 000000000..5dd6880ed
--- /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 3c1aae1b8..1b07a8e0b 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 140c9bb2e..d53eb7d0e 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 efcef7b66..6799420c7 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 94b97551a..2b98a202f 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 f317cdea2..f86ea8d31 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 218f7f727..12604c1a0 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: