By using the py.test.mark helper you can instantiate decorators that will set named meta data on test functions.
You can "mark" a test function with meta data like this:
@py.test.mark.webtest def test_send_http(): ...
This will set a "Marker" instance as a function attribute named "webtest". You can also specify parametrized meta data like this:
@py.test.mark.webtest(firefox=30) def test_receive(): ...
The named marker can be accessed like this later:
test_receive.webtest.kwargs['firefox'] == 30
In addition to set key-value pairs you can also use positional arguments:
@py.test.mark.webtest("triangular") def test_receive(): ...
and later access it with test_receive.webtest.args[0] == 'triangular.
If you are programming with Python2.6 you may use py.test.mark decorators with classes to apply markers to all its test methods:
@py.test.mark.webtest class TestClass: def test_startup(self): ... def test_startup_and_more(self): ...
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 py class TestClass: pytestmark = py.test.mark.webtest
or if you need to use multiple markers you can use a list:
import py class TestClass: pytestmark = [py.test.mark.webtest, pytest.mark.slowtest]
You can also set a module level marker:
import py pytestmark = py.test.mark.webtest
in which case it will be applied to all functions and methods defined in the module.
You can use the -k command line option to select tests:
py.test -k webtest # will only run tests marked as webtest
Checkout customize, other plugins or get in contact.