markers.uncollect module¶
uncollect¶
Used internally to mark a test to be “uncollected”
This mark should be used at any point before or during test collection to dynamically flag a test to be removed from the list of collected tests.
py.test adds marks to test items a few different ways. When marking in a py.test
hook that takes an Item
or Node
(Item
is a subclass of Node
), use item.add_marker('uncollect')
or
item.add_marker(pytest.mark.uncollect)
When dealing with the test function directly, using the mark decorator is preferred.
In this case, either decorate a test function directly (and have a good argument ready
for adding a test that won’t run...), e.g. @pytest.mark.uncollect
before the test
def
, or instantiate the mark decorator and use it to wrap a test function, e.g.
pytest.mark.uncollect()(test_function)
uncollectif¶
The uncollectif
marker is very special and can cause harm to innocent kittens if used
incorrectly. The uncollectif
marker enables the ability to uncollect a specific test
if a certain condition is evaluated to True
. The following is an example:
@pytest.mark.uncollectif(lambda: version.current_version() < '5.3')
In this case, when pytest runs the modify items hook, it will evaluate the lambda function
and if it results in True
, then the test will be uncollected. Fixtures that are
generated by testgen, such as provider_key, provider_data etc, are also usable inside
the collectif
marker, assuming the fixture name is also a prerequisite for the test
itself. For example:: python
@pytest.mark.uncollectif(lambda provider_type: provider_type != 'virtualcenter') def test_delete_all_snapshots(test_vm, provider_key, provider_type): pass
Here, the fixture provider_type is special as it comes from testgen and is passed to the lambda for comparison.
Note
Be aware, that this cannot be used for any other fixture types. Doing so will break pytest and may invalidate your puppies.