Я пытаюсь решить одно для всех, это предупреждение при выполнении pytests:
/usr/local/lib/python3.11/site-packages/httpx/_client.py:680:
DeprecationWarning: The 'app' shortcut is now deprecated.
Use the explicit style 'transport=WSGITransport(app=...)' instead.
warnings.warn(message, DeprecationWarning)
Я знаю, что здесь задавался аналогичный вопрос:
Но до сих пор я не могу понять, как избежать этого предупреждения.
У меня есть тестовое приспособление Python:
@pytest.fixture
def client(app: FastAPI) -> Generator:
with TestClient(app, base_url = "http://localhost") as client:
yield client
Но если я изменю это на то, что предложено в ранее упомянутой ссылке:
@pytest.fixture
def client()-> Generator:
"""Fixture to create a FastAPI test client."""
# instead of app = app, use this to avoid the DeprecationWarning:
with TestClient(transport=ASGITransport(app=app), base_url = "http://localhost") as
client:
yield client
Мои тесты не могут пройти, и вместо этого у меня появляется новая ошибка:
TypeError: TestClient.__init__() got an unexpected keyword argument 'transport'






Просто обновите fastapi и starlette до последних версий. Эта проблема уже исправлена в старлетке 0.37.2 (https://www.starlette.io/release-notes/#0372):
Если вы используете пип:
pip install --upgrade fastapi starlette
И используйте with TestClient(app, base_url = "http://localhost") as client:, как раньше.
Привет Спасибо за ответ! На самом деле у меня есть поэзия, поэтому, если я запускаю poetry update starlette или poetry update fastapi, она не обновляется, потому что у меня также есть py-de-log, для которого нужна версия старлетки <0.37.0, поэтому я, очевидно, не могу обновить старлетку, но оставлю ее до 0.36. .3
В этом случае я думаю, что единственный способ — игнорировать это предупреждение.
Есть разница между
TestClientиAsyncClient. Я бы посоветовал просто перепроверить то, что вы хотите использовать. Потому что уAsyncClientесть параметрtransport, а уTestClientего нет.