← До списку лабораторних по Python
Повний опис / сценарій лабораторної:
Meta: навчитися ізолювати тести від реальних HTTP запитів.
Krok 1. Переконатися що pytest встановлено.
Komandi: cd ~/python_lab1; source .venv/bin/activate; pip install pytest
Krok 2. Створити модуль src/app/api17.py з функцією яка викликає requests.get.
Komanda: cd src; printf "import requests
def get_status(url: str) -> int:
resp = requests.get(url, timeout=5)
return resp.status_code
" > app/api17.py
Krok 3. Створити файл tests/test_api17.py.
Komandi: mkdir -p tests; touch tests/test_api17.py
Krok 4. Написати тест який використовує monkeypatch для підміни requests.get.
Komанда: printf "from app.api17 import get_status
class DummyResponse:
def __init__(self, code: int):
self.status_code = code
def test_get_status_ok(monkeypatch):
def fake_get(url, timeout):
return DummyResponse(200)
monkeypatch.setattr("app.api17.requests.get", fake_get)
assert get_status("http://example.com") == 200
" > tests/test_api17.py
Krok 5. Запустити pytest і переконатися що тест проходить без реального HTTP.
Komanda: pytest -q tests/test_api17.py
Krok 6. Додати тест який емулює помилку таймауту.
Poyasnennya: fake_get може кидати requests.exceptions.Timeout.
Krok 7. Оновити get_status щоб ловити таймаут і повертати спеціальний код.
Poyasnennya: наприклад повертати 0.
Krok 8. Додати тест який перевіряє цю поведінку.
Krok 9. Занотувати переваги моків для стабільності тестів і швидкості.
Krok 10. Mini zvit.
Zavdannya: опиши коли варто використовувати інтеграційні тести з реальним HTTP замість моків.