133 lines
3.6 KiB
Plaintext
133 lines
3.6 KiB
Plaintext
|
|
.. _mark:
|
|
|
|
mark test functions with attributes
|
|
=================================================================
|
|
|
|
.. currentmodule:: _pytest.mark
|
|
|
|
By using the ``pytest.mark`` helper you can instantiate
|
|
decorators that will set named metadata on test functions.
|
|
|
|
Marking a single function
|
|
----------------------------------------------------
|
|
|
|
You can "mark" a test function with metadata like this::
|
|
|
|
import pytest
|
|
@pytest.mark.webtest
|
|
def test_send_http():
|
|
...
|
|
|
|
This will set the function attribute ``webtest`` to a :py:class:`MarkInfo`
|
|
instance. You can also specify parametrized metadata like this::
|
|
|
|
# content of test_mark.py
|
|
|
|
import pytest
|
|
@pytest.mark.webtest(firefox=30)
|
|
def test_receive():
|
|
pass
|
|
|
|
@pytest.mark.webtest("functional", firefox=30)
|
|
def test_run_and_look():
|
|
pass
|
|
|
|
and access it from other places like this::
|
|
|
|
test_receive.webtest.kwargs['firefox'] == 30
|
|
test_run_and_look.webtest.args[0] == "functional"
|
|
|
|
.. _`scoped-marking`:
|
|
|
|
Marking whole classes or modules
|
|
----------------------------------------------------
|
|
|
|
If you are programming with Python2.6 you may use ``pytest.mark`` decorators
|
|
with classes to apply markers to all of its test methods::
|
|
|
|
# content of test_mark_classlevel.py
|
|
import pytest
|
|
@pytest.mark.webtest
|
|
class TestClass:
|
|
def test_startup(self):
|
|
pass
|
|
def test_startup_and_more(self):
|
|
pass
|
|
|
|
This is equivalent to directly applying the decorator to the
|
|
two test functions.
|
|
|
|
To remain compatible with Python2.5 you can also set a
|
|
``pytestmark`` attribute on a TestClass like this::
|
|
|
|
import pytest
|
|
|
|
class TestClass:
|
|
pytestmark = pytest.mark.webtest
|
|
|
|
or if you need to use multiple markers you can use a list::
|
|
|
|
import pytest
|
|
|
|
class TestClass:
|
|
pytestmark = [pytest.mark.webtest, pytest.mark.slowtest]
|
|
|
|
You can also set a module level marker::
|
|
|
|
import pytest
|
|
pytestmark = pytest.mark.webtest
|
|
|
|
in which case it will be applied to all functions and
|
|
methods defined in the module.
|
|
|
|
Using ``-k TEXT`` to select tests
|
|
----------------------------------------------------
|
|
|
|
You can use the ``-k`` command line option to select tests::
|
|
|
|
$ py.test -k webtest # running with the above defined examples yields
|
|
=========================== test session starts ============================
|
|
platform linux2 -- Python 2.6.6 -- pytest-2.0.3
|
|
collecting ... collected 4 items
|
|
|
|
test_mark.py ..
|
|
test_mark_classlevel.py ..
|
|
|
|
========================= 4 passed in 0.01 seconds =========================
|
|
|
|
And you can also run all tests except the ones that match the keyword::
|
|
|
|
$ py.test -k-webtest
|
|
=========================== test session starts ============================
|
|
platform linux2 -- Python 2.6.6 -- pytest-2.0.3
|
|
collecting ... collected 4 items
|
|
|
|
===================== 4 tests deselected by '-webtest' =====================
|
|
======================= 4 deselected in 0.01 seconds =======================
|
|
|
|
Or to only select the class::
|
|
|
|
$ py.test -kTestClass
|
|
=========================== test session starts ============================
|
|
platform linux2 -- Python 2.6.6 -- pytest-2.0.3
|
|
collecting ... collected 4 items
|
|
|
|
test_mark_classlevel.py ..
|
|
|
|
==================== 2 tests deselected by 'TestClass' =====================
|
|
================== 2 passed, 2 deselected in 0.01 seconds ==================
|
|
|
|
API reference for mark related objects
|
|
------------------------------------------------
|
|
|
|
.. autoclass:: MarkGenerator
|
|
:members:
|
|
|
|
.. autoclass:: MarkDecorator
|
|
:members:
|
|
|
|
.. autoclass:: MarkInfo
|
|
:members:
|
|
|