Как протестировать взаимодействие с внешним сервисом

Python Middle Без компании
Как протестировать взаимодействие с внешним сервисом
Ответы
Для тестирования взаимодействия с внешним сервисом в Python можно использовать несколько подходов: - **Mock-объекты** (unittest.mock) - заменяют реальные вызовы API: ``` from unittest.mock import patch def test_external_api(): with patch('requests.get') as mock_get: mock_get.return_value.json.return_value = {'key': 'value'} response = call_external_service() assert response == {'key': 'value'} ``` - **Тестовые серверы** - можно поднять локальный сервер для тестов (например, с помощью `responses` или `httpx`): ``` import responses @responses.activate def test_api(): responses.add( responses.GET, 'http://api.example.com', json={'data': 'test'}, status=200 ) response = requests.get('http://api.example.com') assert response.json() == {'data': 'test'} ``` - **VCR.py** - записывает и воспроизводит реальные HTTP-запросы: ``` import vcr @vcr.use_cassette('fixtures/vcr_cassettes/test_api.yaml') def test_api(): response = requests.get('https://api.example.com') assert response.status_code == 200 ``` Для интеграционных тестов можно использовать реальные вызовы, но с тестовыми данными и отдельным окружением. Важно изолировать тесты от реального сервиса в большинстве случаев.