← До фільтрів та технологій

← До списку лабораторних по Python

Python Лабораторна 17: Мок клієнта requests

Технологія: Python

Номер лабораторної: 17 · Рівень: middle

Тема: Тестування HTTP коду з моками

Повний опис / сценарій лабораторної:

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 замість моків.