ipatests: add context manager for declaring part of test as xfail

This function provides functionality similar to pytest.mark.xfail
but for a block of code instead of the whole test function. This has
two benefits:
1) you can mark single line as expectedly failing without suppressing
   all other errors in the test function
2) you can use conditions which can not be evaluated before the test start.

The check is always done in "strict" mode, i.e. if test is expected to
fail but succeeds then it will be marked as failing.

Reviewed-By: Florence Blanc-Renaud <flo@redhat.com>
This commit is contained in:
Sergey Orlov 2019-11-21 15:30:32 +01:00
parent 3ae0d0d724
commit 84c94f7350
No known key found for this signature in database
GPG Key ID: ADF8C90EDD04503D

View File

@ -887,3 +887,28 @@ def get_group_dn(cn):
def get_user_dn(uid):
return DN(('uid', uid), api.env.container_user, api.env.basedn)
@contextmanager
def xfail_context(condition, reason):
"""Expect a block of code to fail.
This function provides functionality similar to pytest.mark.xfail
but for a block of code instead of the whole test function. This has
two benefits:
1) you can mark single line as expectedly failing without suppressing
all other errors in the test function
2) you can use conditions which can not be evaluated before the test start.
The check is always done in "strict" mode, i.e. if test is expected to
fail but succeeds then it will be marked as failing.
"""
try:
yield
except Exception:
if condition:
pytest.xfail(reason)
raise
else:
if condition:
pytest.fail('XPASS(strict) reason: {}'.format(reason), False)