You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[✅ ] 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?
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
The problem with your code is that it uses @pytest.fixture(…) in strict mode. The use of @pytest.fixture for async fixtures only makes sense with auto mode, whereas you should use @pytest_asyncio.fixture in strict mode.
Please refer to the docs about Test discovery modes and let me know if things are still unclear.
I'll see if it's possible to add a corresponding warning when using @pytest.fixture for async functions in strict mode, as it's not clear from the code why it doesn't work.
pip list
from the virtual environment you are usingDescription:
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:
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
The text was updated successfully, but these errors were encountered: