Source code for univention.testing.pytest
#!/usr/bin/python3
# SPDX-FileCopyrightText: 2021-2025 Univention GmbH
# SPDX-License-Identifier: AGPL-3.0-only
"""pytest runner for ucs-test"""
import argparse
import os
[docs]
class PytestRunner:
options = argparse.Namespace(inside=True)
[docs]
@classmethod
def extend_command(cls, testcase, cmd):
"""Add junit and other arguments to pytest"""
if getattr(cls.options, 'inside', False):
return cmd
args = []
if cls.options.dry:
args.append('--collect-only')
if cls.options.hold:
args.append('--exitfirst')
if cls.options.format == 'junit':
from univention.testing.format.junit import Junit
args.append('--junit-xml=%s' % (os.path.join(os.getcwd(), Junit().outdir, '%s.xml' % (testcase.uid,)),))
if cls.options.verbose:
args.append('-' + 'v' * cls.options.verbose)
args.append('--continue-on-collection-errors')
args.extend(('-c', '/usr/share/ucs-test/pytest.ini'))
# args.append('--strict')
# args.append('--showlocals')
# args.append('--full-trace')
args.append('--tb=native')
args.append('--color=auto')
args.append('--confcutdir=/usr/share/ucs-test/')
args.extend(('-%s' if len(arg) == 1 else '--%s') % (arg,) for arg in cls.options.pytest_arg)
try:
cmd.remove('--capture=no')
except ValueError:
pass
try:
cmd.remove('-s')
except ValueError:
pass
cmd.extend(args)
return cmd
[docs]
@classmethod
def set_arguments(cls, options):
"""store singleton CLI arguments globally"""
cls.options = options
[docs]
@classmethod
def is_pytest(self, test_case):
"""indicates that the test case is a pytest test"""
return test_case.exe.filename in ('/usr/bin/py.test-3', '/usr/bin/py.test', '/usr/bin/pytest-3', '/usr/bin/pytest', 'pytest', 'pytest-3', 'py.test', 'py.test-3', '/usr/share/ucs-test/playwright', '/usr/share/ucs-test/selenium-pytest')
[docs]
@classmethod
def get_argument_group(cls, parser):
"""The option group for ucs-test-framework"""
group = parser.add_argument_group('Additional pytest arguments')
group.add_argument('--pytest-arg', action='append', default=[], help='Additional arguments passed to pytest. Skip leading dashs (-).')
return group