I want to name the test dynamically during run-time when i run them with the @pytest.mark.parametrize("value",values_list)
fixture. for example:
values_list=['apple','tomatoes','potatoes']
@pytest.mark.parametrize("value",values_list)
def test_xxx(self,value):
assert value==value
the final outcome i want to see is 3 tests with the following names:
test_apple
test_tomatoes
test_potatoes
i gave tried looking in to pytest documentation but i haven found anything that might shed light on this problem.
You can change the names displayed in test execution by rewriting the _nodeid
attibute of the test item. Example: create a file named conftest.py
in your project/test root dir with the following contents:
def pytest_collection_modifyitems(items):
for item in items:
# check that we are altering a test named `test_xxx`
# and it accepts the `value` arg
if item.originalname == 'test_xxx' and 'value' in item.fixturenames:
item._nodeid = item.nodeid.replace(']', '').replace('xxx[', '')
Running your tests will now yield
test_fruits.py::test_apple PASSED
test_fruits.py::test_tomatoes PASSED
test_fruits.py::test_potatoes PASSED
Beware that overwriting _nodeid
should be enjoyed with caution as each nodeid should remain unique. Otherwise, pytest
will silently drop executing some tests and it will be hard to find out why.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.