-
Notifications
You must be signed in to change notification settings - Fork 255
Description
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
- Have
pytest=8.1.0installed - Have
allure-pytestinstalled (as of the moment of writing it is2.13.0) - Have simple project with
pytestconfigured - Have fixtures defined with
@pytest.fixturedecorator
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:
- Allure version: 2.26.0
- Test framework: [email protected]
- Allure adaptor: [email protected]
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: AttributeErrorAs it can be seen from the error message the following line is causing the issue:
allure-python/allure-pytest/src/listener.py
Line 102 in 058a6af
| 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.