TGViewer
Сочный DevOps Сочный DevOps @andtree_sec · 420 subscribers
Post #160 165
Немного про async тесты в python

По долгу службы порой пишешь утилиты на python или небольшие backend системы. К одной из таких решил написать тесты с помощью pytest. Код на fastapi, асинхронный.

Структура:
tests
├── auth
│   └── test_login.py
├── conftest.py


Тут пример с тестом логина, для получения токена. Стандартная JWT авторизация.

В conftest.py:
import pytest_asyncio
from httpx import AsyncClient, ASGITransport
from src.main import app
from asgi_lifespan import LifespanManager


@pytest_asyncio.fixture
async def async_client():
async with LifespanManager(app):
transport = ASGITransport(app=app)
async with AsyncClient(
transport=transport, base_url="http://testserver"
) as client:
yield client


На реальный сервер запроса не будет, он поднимется внутри pytest, поэтому импортируем app.
Обязательно используйте LifespanManager, если в main.py есть @lifespan или startup/shutdown-логика (например, подключение к БД). Без него — ошибки event loop'а гарантированы.

Далее в тестах:
@pytest.mark.asyncio
async def test_login(async_client):
response = await async_client.post("/auth/jwt/login", data=...)
assert response.status_code == 200


#python
  • 👍 1
More from @andtree_sec
  1. Sep 7, 2026Давненько не было сообщений. Скорее всего в будущем они уйдут в telegraf, который я еще не…
  2. Jul 6, 2026Последнее время на работе часто приходится работать с apache flink и даже что-то писать на…
  3. Jun 4, 2026Немножко про молекула тесты... У нас принято использовать в переменных lookup плагин для д…
  4. May 20, 2026Очередной небольшой проект. Веб-приложение, которое агрегирует через стандартный механиз g…
  5. May 15, 2026Включаем профилирование в ansible Профилирование, это вывод даты, времени запуска и итогов…
  6. Apr 17, 2026Так выглядит общий dashbord работы с инцидентами.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →