Reputation: 122112
I would like to customize the output name of my pytest to include the name of my fixtures
So I have
def test_t1(
when_creating_a_project_from_a_sales_handoff,
with_a_new_customer,
and_no_conflicting_data_exists,
create_project):
it_will_create_a_customer_with_the_releavant_information()
it_will_create_a_project_that_references_the_newly_created_customer()
and I'd like the displayed test name to be some version of
when_creating_a_project_from_a_sales_handoff
with_a_new_customer
and_no_conflicting_data_exists
create_project
How can I do this? I tried creating
@fixture
def namer(request):
request.node.name = 'test_foo'
but no dice, it didn't change the test display name
Upvotes: 8
Views: 7008
Reputation: 2090
I managed to change the displayed name, but only by using pytest private variables.
Make a conftest.py
file and make this function:
def pytest_itemcollected(item):
""" change test name, using fixture names """
item._nodeid = ', '.join(item._fixtureinfo.argnames)
When I run this test_file with pytest:
import pytest
@pytest.fixture()
def fixture_1():
pass
@pytest.fixture()
def fixture_2():
pass
def test1(fixture_1):
assert 1 == 1
def test_a(fixture_1, fixture_2):
assert 1 == 2
The result is:
pytest
============================= test session starts =============================
platform win32 -- Python 3.6.1, pytest-3.6.1, py-1.5.3, pluggy-0.6.0
rootdir: C:\Users\gelineau\Desktop\kaggle_flavien, inifile:
collected 2 items
fixture_1 . [ 50%]
fixture_1, fixture_2 F [100%]
================================== FAILURES ===================================
___________________________________ test_a ____________________________________
fixture_1 = None, fixture_2 = None
def test_a(fixture_1, fixture_2):
> assert 1 == 2
E assert 1 == 2
test\test_so.py:15: AssertionError
===================== 1 failed, 1 passed in 0.86 seconds ======================
The new test names are also printed in pycharm
Upvotes: 12