Description
- [✅ ] a detailed description of the bug or problem you are having
- [✅ ] output of
pip list
from the virtual environment you are using - [ ✅] pytest and operating system versions
- [ ✅] minimal example if possible
Description:
When using an asyncio fixture with pytest, the teardown fixture is not executing properly. The teardown fixture is meant to run after test_foo
and print "teardown", then await for one second before finishing. However, when the yield statement is included in the fixture, nothing gets printed to the console. If the yield statement is removed, nothing still gets printed but I get a warning: "RuntimeWarning: coroutine 'teardown' was never awaited". I don't understand this behaviour, can someone help me understand?
Steps to reproduce:
# test_foo.py
import pytest
import asyncio
@pytest.fixture(scope="function", autouse=True)
@pytest.mark.asyncio
async def teardown():
yield
print("teardown")
await asyncio.sleep(1)
def test_foo():
assert True
run pytest test_foo.py -s
Expected result:
The teardown fixture should run after the test function, print "teardown", and await for one second before finishing.
Actual result:
If the yield statement is included, "teardown" does not get printed.
If the yield statement is removed, "teardown" does still not get print but I get a warning:
"RuntimeWarning: coroutine 'teardown' was never awaited".
Environment:
Python version: 3.11.0
Pytest version: 7.2.0
Operating system: Mac OS 13.2.1
Pip list:
Package Version
attrs 22.2.0
iniconfig 2.0.0
maturin 0.14.12
packaging 23.0
pip 22.3
pluggy 1.0.0
pydantic 1.10.2
pyo3-asyncio-example 0.1.0
pytest 7.2.0
pytest-asyncio 0.20.3
python-dotenv 0.19.1
setuptools 65.5.0
typing_extensions 4.4.0