pytest-asyncio runs in strict mode by default, so an async def test without @pytest.mark.asyncio is not awaited. pytest collects it, calls it, gets a coroutine back and skips it with a warning about an async function not being natively supported, which reads like a plugin is missing rather than like a test that silently never ran.
Set asyncio_mode = auto under [tool.pytest.ini_options] to have every async test and fixture handled automatically, which is what most projects want.
Since pytest-asyncio 0.24 an unset loop scope produces PytestDeprecationWarning: The configuration option "asyncio_default_fixture_loop_scope" is unset. Set asyncio_default_fixture_loop_scope = "function" to keep the historical behaviour of one loop per test, or a wider scope when async fixtures must be shared. The related trap is that a session-scoped async fixture and a function-scoped loop cannot coexist: anything created on a closed loop, notably an aiohttp session or an asyncpg pool, fails later with an error about a future attached to a different loop.