Крепление PyTest: как устранить предупреждение о том, что ярлык приложения FastAPI устарел?

Я пытаюсь решить одно для всех, это предупреждение при выполнении 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)

Я знаю, что здесь задавался аналогичный вопрос:

Как написать тесты pytest для маршрута FastAPI, включающего внедрение зависимостей с моделями Pydantic, используя Annotated и Depends?

Но до сих пор я не могу понять, как избежать этого предупреждения.

У меня есть тестовое приспособление 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'

Есть разница между TestClient и AsyncClient. Я бы посоветовал просто перепроверить то, что вы хотите использовать. Потому что у AsyncClient есть параметр transport, а у TestClient его нет.

Hetvi 12.06.2024 13:03
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
156
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Просто обновите 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

RobyB 12.06.2024 14:52

В этом случае я думаю, что единственный способ — игнорировать это предупреждение.

Yurii Motov 12.06.2024 15:13

Другие вопросы по теме