Skip to content

[BUG] Latest pytest release (8.1.0) breaks allure_listener plugin #794

@mihhail-m

Description

@mihhail-m

I'm submitting a ...

  • [*] bug report

What is the current behavior?

After pytest released its latest version 8.1.0 it suddenly started to break allure_listener plugin on fixtures initilization/teardown thus preventing from running any tests with pytest and allure-pytest installed.

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem

  1. Have pytest=8.1.0 installed
  2. Have allure-pytest installed (as of the moment of writing it is 2.13.0)
  3. Have simple project with pytest configured
  4. Have fixtures defined with @pytest.fixture decorator

The following is a minimal example the I could reproduce from our tests that caught this issue:

# conftest.py
import pytest

class MyBaseTestClass:
   def __init__(self, val):
       self.val = val

@pytest.fixture
def my_fixture():
    yield MyBaseTestClass("some value")
# test_example.py
def test_my_fixture(my_fixture):
    assert my_fixture.val == "some value"

What is the expected behavior?

It is expected for allure-pytest not to break whole project when updating to pytest==8.1.0

What is the motivation / use case for changing the behavior?

Not to break tests

Please tell us about your environment:

Other information

When running the test the stack trace gives the following error:

self = <allure_pytest.listener.AllureListener object at 0x1378f7250>, item = <Function test_create_enum_metadata[options_bounds0]>

    @pytest.hookimpl(hookwrapper=True)
    def pytest_runtest_setup(self, item):
        if not self._cache.get(item.nodeid):
            uuid = self._cache.push(item.nodeid)
            test_result = TestResult(name=item.name, uuid=uuid, start=now(), stop=now())
            self.allure_logger.schedule_test(uuid, test_result)
        yield
>       self._update_fixtures_children(item)

.nox/tests-3-10/lib/python3.10/site-packages/allure_pytest/listener.py:102: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.nox/tests-3-10/lib/python3.10/site-packages/allure_pytest/listener.py:71: in _update_fixtures_children
    for fixturedef in _test_fixtures(item):
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

item = <Function test_create_enum_metadata[options_bounds0]>

    def _test_fixtures(item):
        fixturemanager = item.session._fixturemanager
        fixturedefs = []
    
        if hasattr(item, "_request") and hasattr(item._request, "fixturenames"):
            for name in item._request.fixturenames:
>               fixturedefs_pytest = fixturemanager.getfixturedefs(name, item.nodeid)
E               AttributeError: 'str' object has no attribute 'iter_parents'

.nox/tests-3-10/lib/python3.10/site-packages/allure_pytest/listener.py:345: AttributeError

As it can be seen from the error message the following line is causing the issue:

self._update_fixtures_children(item)

I believe this can be due to following change recently introduced in the pytest framework, because right after that, we upgraded to the latest pytest and our tests started to fail without even running (the error thrown during the initialization of the fixtures I believe). And downgrading to pytest==8.0.0 fixed this issues. However, I think, it would be nice to fix this to make sure further compatability between allure-pytest and pytest framework.

Commit from the pytest: pytest-dev/pytest@434282e

P.S I am not exactly sure who should be responsible for handling this issue whether allure team or pytest team.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions