Closed muazhari closed 5 months ago
The same error here, pytest 7.4.4 and pytest-asyncio 0.23.4. It was harassing me for hours yesterday and then suddenly gone (just as suddenly, as it started).
pytest-asyncio 0.23.6 and pytest 8.2.0 same
gone with pytest==8.1.1
Thanks for reporting this. The pytest-asyncio tests don't seem to be affected, so it's hard to find the cause of the error.
@muazhari @Klavionik @halvomez: Can any one provide a minimal code example that reproduces the issue?
Fixed in pytest==8.2.1
. However, I can't reproduce the error with minimal codes with pytest==8.2.0
and the same environment. I don't know why.
============================= test session starts ==============================
platform linux -- Python 3.10.12, pytest-8.2.1, pluggy-1.5.0
rootdir: /app
plugins: cov-5.0.0, asyncio-0.23.6, xdist-3.6.1, anyio-4.3.0
asyncio: mode=strict
1 worker [6 items]
......
Since this issue seems to be fixed with more recent versions of pytest and I cannot reproduce it, I'll close the ticket until further evidence arrives.
Also encountered this on the latest pytest (8.3.2
). Causes the first test in the session to fail, but then all the subsequent ones succeed. Reverting to 0.21.2
resolves this 🤔
platform linux -- Python 3.9.6, pytest-8.3.2, pluggy-1.5.0
plugins: asyncio-0.23.8
asyncio: mode=auto
@mike-oakley Any chance you can cook up a reproducer so we can get to the bottom of this?
The same problem:
`$ poetry show pytest
name : pytest
version : 8.3.2
description : pytest: simple powerful testing with Python `
and
`$ poetry show pytest-asyncio
name : pytest-asyncio
version : 0.23.8
description : Pytest support for asyncio `
There's really not much I can do to help, unless someone can provide a minimal reproducer.
There's really not much I can do to help, unless someone can provide a minimal reproducer.
Here is example fixture "event_loop" which we have a problem with
@pytest.fixture(scope='session')
def event_loop():
try:
loop = asyncio.get_running_loop()
except RuntimeError:
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
yield loop
loop.close()
Try to run any tests, you might get error always in first test, because problem in moment initialization.
pytest==8.1.1
work good, 8.2.1
sometimes work, 8.2.2
doesn't work
You can try this and reproduce: conftest.py
import asyncio
from httpx import AsyncClient
@pytest.fixture(scope='session')
def event_loop():
try:
loop = asyncio.get_running_loop()
except RuntimeError:
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
yield loop
loop.close()
@pytest.fixture(scope='session')
async def http_client():
async with AsyncClient(app=app, base_url='https://test.io/') as client:
yield client
test_ping.py
from httpx import AsyncClient
async def test__ping(http_client: AsyncClient):
response = await http_client.get('/ping')
assert response.status_code == 200
assert response.json() == {'msg': 'pong'}
Even this tiny test return this error
@devTarik Thanks for backing this issue up with some more code. However, when I try to run your example, I get the following error:
@pytest.fixture(scope='session')
async def http_client():
> async with AsyncClient(app=app, base_url='https://test.io/') as client:
E NameError: name 'app' is not defined
conftest.py:18: NameError
Is there a minimal implementation of app
you can share?
Every initial test case will fail when
pytest_fixture_setup
is executed. I have comparedpytest==8.1.1
andpytest==8.2.0
. The 8.1.1 has no error, and the 8.2.0 has an error.My
conftest.py
:Comparison:
fixturedef =
/usr/local/lib/python3.10/dist-packages/pytest_asyncio/plugin.py:758:
/usr/lib/python3.10/inspect.py:1121: in getsourcelines lines, lnum = findsource(object)
object = <function event_loop at 0x7f7f854153f0>
/usr/lib/python3.10/inspect.py:958: OSError