Я пытаюсь написать модульный тест для конечной точки FastAPI, и я не смог высмеивать requests.get () вызов, выполненный в функции. Кроме того, в конечной точке есть вызов urlparse () , значение которого я хотел бы извлечь и проверить.
# my_pkg.api
import requests
from fastpi import APIRouter
from pydantic import BaseModel # Pydantic
[code]# tests/test_api
from typing import Optional
from unittest.mock import Mock, patch
from urllib.parse import urlparse
from fastapi import FastAPI
from fastapi.testclient import TestClient
from pytest import mark
from my_pkg.api import router
app = FastAPI()
app.include_router(router)
client = TestClient(app)
test_upload_file_params_matrix = (
# Rsync URL | Rsync module | Source directory |
(
"http://1.1.1.1", # When rsync_url is provided
"data",
"/c/ProgramData/Some Program/Some Files",
),
(
"", # When rsync_url is blank
"data",
"/c/ProgramData/Some Program/Some Files",
),
(
None, # When rsync_url not provided
"data",
"/c/ProgramData/Some Program/Some Files",
),
)
@mark.parametrize("test_params", test_upload_gain_reference_params_matrix)
@patch("my_pkg.api.subprocess")
@patch("my_pkg.api.urlparse", wraps=urlparse)
@patch("my_pkg.api.get_server_url")
@patch("my_pkg.api.requests")
def test_upload_file(
mock_request,
mock_get_server_url,
spy_parse,
mock_subprocess,
test_params: tuple[Optional[str], str, str],
):
# Create a mock config based on the test params
rsync_url, rsync_module, source_dir = test_params
server_url = "http://0.0.0.0:8000"
mock_config = {
"rsync_module": rsync_module,
"source_directory": source_dir,
}
if rsync_url is not None:
mock_config["rsync_url"] = rsync_url
# Assign expected values to the mock objects
mock_response = Mock()
mock_response.status_code = 200
mock_response.json.return_value = mock_config
mock_request.get.return_value = mock_response
mock_get_server_url.return_value = server_url
mock_subprocess.run.return_value = Mock(returncode=0)
# Construct payload and submit post request
payload = {
"gain_path": f"{source_dir}/file.txt",
"destination_path": "some/path/to/save/to",
"destination_dir": "processing",
}
response = client.post(
"/names/hello/ids/1/upload_file", json=payload
)
# Check that the config request was called
mock_request.get.assert_called_once()
# If no rsync_url key is provided, or rsync_url key is empty,
# This should default to the Murfey URL
returned_urlparse = spy_parse.return_value
expected_urlparse = urlparse(server_url) if not rsync_url else urlparse(rsync_url)
assert expected_urlparse.scheme == returned_urlparse.scheme
assert expected_urlparse.netloc == returned_urlparse.netloc
assert expected_urlparse.path == returned_urlparse.path
# Check that the subprocess was run
mock_subprocess.run.assert_called_once()
# Check that the endpoint function ran through to completion successfully
assert response.status_code == 200
assert response.json() == {"success": True}
< /code>
Я сейчас сталкиваюсь с парой ошибок. Первый - это то, что requests.get ()
не вызывается. И второе - это то, что spy_parse.return_value возвращает объект Magicmock вместо parseresult объекта.
Как можно настроить мой код для решения этих проблем?>
Я пытаюсь написать модульный тест для конечной точки FastAPI, и я не смог высмеивать requests.get () вызов, выполненный в функции. Кроме того, в конечной точке есть вызов urlparse () , значение которого я хотел бы извлечь и проверить.[code]# my_pkg.api
import requests from fastpi import APIRouter from pydantic import BaseModel # Pydantic [code]# tests/test_api
from typing import Optional from unittest.mock import Mock, patch from urllib.parse import urlparse
from fastapi import FastAPI from fastapi.testclient import TestClient from pytest import mark
# Create a mock config based on the test params rsync_url, rsync_module, source_dir = test_params server_url = "http://0.0.0.0:8000" mock_config = { "rsync_module": rsync_module, "source_directory": source_dir, } if rsync_url is not None: mock_config["rsync_url"] = rsync_url
# Check that the config request was called mock_request.get.assert_called_once()
# If no rsync_url key is provided, or rsync_url key is empty, # This should default to the Murfey URL returned_urlparse = spy_parse.return_value expected_urlparse = urlparse(server_url) if not rsync_url else urlparse(rsync_url) assert expected_urlparse.scheme == returned_urlparse.scheme assert expected_urlparse.netloc == returned_urlparse.netloc assert expected_urlparse.path == returned_urlparse.path
# Check that the subprocess was run mock_subprocess.run.assert_called_once()
# Check that the endpoint function ran through to completion successfully assert response.status_code == 200 assert response.json() == {"success": True} < /code> Я сейчас сталкиваюсь с парой ошибок. Первый - это то, что requests.get () [/code] не вызывается. И второе - это то, что spy_parse.return_value возвращает объект Magicmock вместо parseresult объекта. Как можно настроить мой код для решения этих проблем?>
Я пытаюсь прочитать URL-адрес изображения из Интернета и получить возможность загрузить изображение на свой компьютер через Python. Я использовал пример, использованный в этом сообщении блога -an-image-from-the-url-in-pil/, который был однако, когда...
Для проекта домашней автоматизации я пытаюсь получить данные о задержке поездов. Существует оболочка API с примерами cURL. Они работают нормально, но запросы Python Request.get и httpx.get медленно извлекают данные (до минуты для запросов и около 4...
My questions seem to be as same as this question: Java equivalent of Pythons urllib.urlencode(HashMap based UrlEncode) however, is not. Because its answer is not right (or I am doing something wrong that I am not aware of).