Declarative tests: Switch to pytest

Provide a local pytest plugin to generate tests.

The Declarative tests can now only be run with pytest

https://fedorahosted.org/freeipa/ticket/4610

Reviewed-By: Tomas Babej <tbabej@redhat.com>
This commit is contained in:
Petr Viktorin 2014-10-10 09:47:25 +02:00 committed by Tomas Babej
parent 07def0b275
commit 0cb12f3cde
4 changed files with 55 additions and 19 deletions

View File

@ -7,6 +7,7 @@
[pytest]
python_classes = test_ Test
addopts = --doctest-modules
-p ipatests.pytest_plugins.declarative
# Ignore files for doc tests.
# TODO: ideally, these should all use __name__=='__main__' guards
--ignore=setup.py

View File

View File

@ -0,0 +1,47 @@
# Authors:
# Petr Viktorin <pviktori@redhat.com>
#
# Copyright (C) 2014 Red Hat
# see file 'COPYING' for use and warranty information
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
"""Pytest plugin for Declarative tests"""
def pytest_generate_tests(metafunc):
"""Generates Declarative tests"""
if 'declarative_test_definition' in metafunc.fixturenames:
name = metafunc.cls.__name__
tests = []
descriptions = []
for i, test in enumerate(metafunc.cls.tests):
if callable(test):
description = '%d: %s' % (
i,
test.__name__, # test is not a dict. pylint: disable=E1103
)
else:
description = '%d: %s: %s' % (i,
test['command'][0],
test.get('desc', ''))
test = dict(test)
test['nice'] = description
tests.append(test)
descriptions.append(description)
metafunc.parametrize(
['index', 'declarative_test_definition'],
enumerate(tests),
ids=descriptions,
)

View File

@ -278,27 +278,15 @@ class Declarative(XMLRPC_test):
print e
pass
def test_generator(self):
"""
Iterate through tests.
def test_command(self, index, declarative_test_definition):
"""Run an individual test
nose reports each one as a seperate test.
The arguments are provided by the pytest plugin.
"""
name = self.__class__.__name__
for (i, test) in enumerate(self.tests):
if callable(test):
func = lambda: test(self)
nice = '%s[%d]: call %s: %s' % (
name, i, test.__name__, test.__doc__
)
func.description = nice
else:
nice = '%s[%d]: %s: %s' % (
name, i, test['command'][0], test.get('desc', '')
)
func = lambda: self.check(nice, **test)
func.description = nice
yield (func,)
if callable(declarative_test_definition):
declarative_test_definition(self)
else:
self.check(**declarative_test_definition)
def check(self, nice, desc, command, expected, extra_check=None):
(cmd, args, options) = command