Closed
Description
Hello, I run: pytest --setup-plan -sv tests/test.py
in container image python:3.11
and received the following error:
==================================== test session starts ====================================
platform linux -- Python 3.11.6, pytest-7.4.2, pluggy-1.3.0 -- /usr/local/bin/python
cachedir: .pytest_cache
rootdir: /root
plugins: asyncio-0.21.1
asyncio: mode=Mode.STRICT
collected 1 item
tests/test.py::test_hello
SETUP F event_loopERROR
TEARDOWN F event_loop
========================================== ERRORS ===========================================
_______________________________ ERROR at setup of test_hello ________________________________
fixturedef = <FixtureDef argname='event_loop' scope='function' baseid=''>
request = <SubRequest 'event_loop' for <Function test_hello>>
@pytest.hookimpl(hookwrapper=True)
def pytest_fixture_setup(
fixturedef: FixtureDef, request: SubRequest
) -> Optional[object]:
"""Adjust the event loop policy when an event loop is produced."""
if fixturedef.argname == "event_loop":
# The use of a fixture finalizer is preferred over the
# pytest_fixture_post_finalizer hook. The fixture finalizer is invoked once
# for each fixture, whereas the hook may be invoked multiple times for
# any specific fixture.
# see https://github.com/pytest-dev/pytest/issues/5848
_add_finalizers(
fixturedef,
_close_event_loop,
_provide_clean_event_loop,
)
outcome = yield
loop = outcome.get_result()
policy = asyncio.get_event_loop_policy()
try:
with warnings.catch_warnings():
warnings.simplefilter("ignore", DeprecationWarning)
old_loop = policy.get_event_loop()
if old_loop is not loop:
old_loop.close()
except RuntimeError:
# Either the current event loop has been set to None
# or the loop policy doesn't specify to create new loops
# or we're not in the main thread
pass
> policy.set_event_loop(loop)
/usr/local/lib/python3.11/site-packages/pytest_asyncio/plugin.py:410:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.11/asyncio/unix_events.py:1457: in set_event_loop
super().set_event_loop(loop)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <asyncio.unix_events._UnixDefaultEventLoopPolicy object at 0x7f5144eb8c10>
loop = (None, 0, None)
def set_event_loop(self, loop):
"""Set the event loop."""
self._local._set_called = True
if loop is not None and not isinstance(loop, AbstractEventLoop):
> raise TypeError(f"loop must be an instance of AbstractEventLoop or None, not '{type(loop).__name__}'")
E TypeError: loop must be an instance of AbstractEventLoop or None, not 'tuple'
/usr/local/lib/python3.11/asyncio/events.py:686: TypeError
================================== short test summary info ==================================
ERROR tests/test.py::test_hello - TypeError: loop must be an instance of AbstractEventLoop or None, not 'tuple'
===================================== 1 error in 0.04s ======================================
It seems that --setup-plan
caused loop
value became (None, 0, None)
instead of event loop instance.
Here is tests/test.py
:
import pytest
@pytest.mark.asyncio
async def test_hello():
print("Hello")
Python version: 3.11.6
pip freeze:
iniconfig==2.0.0
packaging==23.2
pluggy==1.3.0
pytest==7.4.2
pytest-asyncio==0.21.1