Перейти к основному контенту
Tech Path Finder
КурсыИнтервьюКод-ревьюБлог
Tech Path Finder

Персонализированный путеводитель в IT. Квизы, мок-интервью, код ревью и аналитика прогресса.

@potapov_me

Платформа

  • Курсы
  • Прогресс
  • Мок-интервью
  • Код ревью
  • Тренажёр переговоров
  • Закладки

Контент

  • Блог
  • Главная
  • Обратная связь

Компания

  • О проекте
  • Тарифы
  • Условия использования
  • Конфиденциальность
  • Согласие на обработку данных
  • Cookie
  • Реквизиты

Аккаунт

  • Войти
  • Зарегистрироваться
  • Профиль

© 2026 Tech Path Finder. Все права защищены.

·ИП Потапов К.С.·Политика конфиденциальности·
Сделано с ❤️ в России
  1. МОДУЛЬ 0: Docker и PostgreSQL — Quick Start
docker_postgresql_quick_start

МОДУЛЬ 0: Docker и PostgreSQL — Quick Start

Устанавливаете Docker Desktop, запускаете PostgreSQL через docker-compose.yml, подключаетесь через psql, первый SELECT и INSERT, понимаете транзакции. Всё необходимое для курса за 40 минут. ОБЯЗАТЕЛЬНЫЙ БЕСПЛАТНЫЙ МОДУЛЬ

Это обязательный бесплатный модуль для всех, кто начинает курс. За 40 минут вы установите Docker, запустите PostgreSQL и выполните первые SQL-команды.

Цель: Убрать все технические барьеры перед тем, как начать тестирование БД.

Prerequisite Check

Вам НЕ нужен опыт с:

  • ❌ Docker
  • ❌ PostgreSQL
  • ❌ SQL
  • ❌ Виртуализацией

Вам нужен только:

  • ✅ Базовый Python (if, for, functions)
  • ✅ Знание pytest из Level 1-3
  • ✅ Компьютер с macOS, Windows или Linux

Если Docker/PostgreSQL уже установлены:

Вы можете пропустить секции установки, но обязательно выполните практику (SELECT, INSERT, транзакции) — это фундамент для курса.

Установка Docker Desktop (10 минут)

Шаг 1: Скачайте Docker Desktop

macOS:

# M1/M2 Mac (Apple Silicon) https://www.docker.com/products/docker-desktop/ # Intel Mac https://www.docker.com/products/docker-desktop/

Windows:

# Windows 10/11 Pro, Enterprise, или Education https://www.docker.com/products/docker-desktop/ # Требования: # - WSL 2 (Windows Subsystem for Linux) # - Virtualization enabled в BIOS

Linux (Ubuntu/Debian):

# Установка Docker Engine sudo apt-get update sudo apt-get install docker.io docker-compose sudo usermod -aG docker $USER # Logout и login обратно

Шаг 2: Установите Docker Desktop

  • Откройте скачанный файл
  • Следуйте инструкциям установщика
  • После установки запустите Docker Desktop
  • Дождитесь запуска (Docker icon в трее станет зелёным)

Шаг 3: Проверьте установку

docker --version # Docker version 25.0.0, build abc123 docker-compose --version # Docker Compose version v2.24.0

✅ Если видите версии — Docker установлен!

Troubleshooting

macOS: "Docker Desktop is starting..."

  • Подождите 2-3 минуты
  • Если висит — перезапустите Docker Desktop

Windows: "WSL 2 installation is incomplete"

# Установите WSL 2 wsl --install wsl --set-default-version 2

Linux: "permission denied"

# Добавьте себя в группу docker sudo usermod -aG docker $USER # Logout и login обратно

Запуск PostgreSQL (5 минут)

Создайте проект для курса

mkdir pytest-db-course cd pytest-db-course

Создайте docker-compose.yml

# docker-compose.yml version: "3.8" services: postgres: image: postgres:16 container_name: pytest-postgres environment: POSTGRES_USER: testuser POSTGRES_PASSWORD: testpass POSTGRES_DB: testdb ports: - "5432:5432" volumes: - postgres-data:/var/lib/postgresql/data volumes: postgres-data:

Что здесь происходит:

  • image: postgres:16 — используем PostgreSQL версии 16
  • POSTGRES_USER: testuser — username для подключения
  • POSTGRES_PASSWORD: testpass — пароль (для тестов!)
  • POSTGRES_DB: testdb — имя базы данных
  • ports: "5432:5432" — PostgreSQL доступен на localhost:5432
  • volumes — данные сохраняются между перезапусками

Запустите PostgreSQL

docker-compose up -d # Creating pytest-postgres ... done # Проверьте статус docker-compose ps # NAME STATUS # pytest-postgres Up 5 seconds

✅ PostgreSQL запущен!

Просмотр логов (если что-то не работает)

docker-compose logs postgres # Должны увидеть: "database system is ready to accept connections"

Подключение к PostgreSQL (10 минут)

Установите psql (PostgreSQL клиент)

macOS:

brew install libpq echo 'export PATH="/opt/homebrew/opt/libpq/bin:$PATH"' >> ~/.zshrc source ~/.zshrc

Windows:

psql уже включен в Docker контейнер (используйте метод 2).

Linux:

sudo apt-get install postgresql-client

Метод 1: psql на вашей машине

psql -h localhost -U testuser -d testdb # Password: testpass # Должны увидеть: # testdb=#

Метод 2: psql внутри Docker (всегда работает!)

docker exec -it pytest-postgres psql -U testuser -d testdb # testdb=#

✅ Вы подключены к PostgreSQL!

Первые SQL команды

-- Проверьте версию PostgreSQL SELECT version(); -- Результат: -- PostgreSQL 16.1 on x86_64-pc-linux-gnu... -- Покажите текущую БД SELECT current_database(); -- Результат: -- testdb -- Выход \q

Практика: Первая таблица (15 минут)

Создайте таблицу users

-- Подключитесь к PostgreSQL docker exec -it pytest-postgres psql -U testuser -d testdb -- Создайте таблицу CREATE TABLE users ( id SERIAL PRIMARY KEY, email VARCHAR(255) NOT NULL UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Проверьте структуру \d users -- Результат: -- Column | Type | Modifiers -- -----------+---------+------------- -- id | integer | not null default nextval('users_id_seq') -- email | varchar | not null -- created_at| timestamp| default now()

INSERT: добавьте пользователей

-- Добавьте одного пользователя INSERT INTO users (email) VALUES ('alice@test.com'); -- Добавьте несколько за раз INSERT INTO users (email) VALUES ('bob@test.com'), ('charlie@test.com'); -- Проверьте результат SELECT * FROM users; -- id | email | created_at -- ----+------------------+------------------------ -- 1 | alice@test.com | 2025-11-25 12:30:00 -- 2 | bob@test.com | 2025-11-25 12:30:01 -- 3 | charlie@test.com | 2025-11-25 12:30:01

SELECT: выборка данных

-- Все пользователи SELECT * FROM users; -- Только email SELECT email FROM users; -- Фильтрация SELECT * FROM users WHERE email = 'alice@test.com'; -- Подсчёт SELECT COUNT(*) FROM users; -- count: 3

UPDATE: изменение данных

-- Добавьте колонку для имени ALTER TABLE users ADD COLUMN name VARCHAR(100); -- Обновите данные UPDATE users SET name = 'Alice' WHERE email = 'alice@test.com'; -- Проверьте SELECT * FROM users WHERE email = 'alice@test.com'; -- id | email | created_at | name -- ----+------------------+------------+------- -- 1 | alice@test.com | ... | Alice

DELETE: удаление данных

-- Удалите одного пользователя DELETE FROM users WHERE email = 'charlie@test.com'; -- Проверьте SELECT COUNT(*) FROM users; -- count: 2 (Alice и Bob остались) -- Удалите всех (осторожно!) DELETE FROM users; -- Проверьте SELECT COUNT(*) FROM users; -- count: 0

Транзакции: Почему это важно для тестов

Что такое транзакция?

Транзакция — группа SQL команд, которые выполняются все или ничего.

Пример без транзакции (плохо для тестов):

-- Добавляем пользователя INSERT INTO users (email) VALUES ('test@test.com'); -- ❌ Тест упал — но данные остались в БД! -- Следующий тест увидит "мусор" от предыдущего теста

BEGIN и ROLLBACK

Паттерн для изоляции тестов:

-- Начните транзакцию BEGIN; -- Вставьте тестовые данные INSERT INTO users (email) VALUES ('test@test.com'); -- Проверьте (в рамках транзакции) SELECT * FROM users WHERE email = 'test@test.com'; -- id | email | created_at | name -- ----+------------------+------------+------ -- 1 | test@test.com | ... | NULL -- Откатите изменения ROLLBACK; -- Данные исчезли! SELECT * FROM users WHERE email = 'test@test.com'; -- (0 rows)

✅ Это фундамент для изоляции тестов!

В pytest мы будем:

@pytest.fixture def db_connection(): conn = psycopg2.connect(...) conn.execute("BEGIN") # Начать транзакцию yield conn conn.execute("ROLLBACK") # Откатить после теста

COMMIT: сохранение изменений

-- Начните транзакцию BEGIN; -- Вставьте данные INSERT INTO users (email) VALUES ('real@test.com'); -- Сохраните изменения COMMIT; -- Данные сохранены навсегда SELECT * FROM users; -- id | email | created_at | name -- ----+------------------+------------+------ -- 1 | real@test.com | ... | NULL

Проверка готовности

Вы готовы к курсу если можете выполнить:

-- 1. Создать таблицу CREATE TABLE test_ready ( id SERIAL PRIMARY KEY, message TEXT ); -- 2. Вставить данные в транзакции BEGIN; INSERT INTO test_ready (message) VALUES ('I am ready!'); ROLLBACK; -- 3. Проверить что данные исчезли SELECT COUNT(*) FROM test_ready; -- count: 0 ✅ -- 4. Очистить DROP TABLE test_ready;

✅ Если всё работает — вы готовы!

Остановка и очистка

Остановить PostgreSQL

# Остановить контейнер (данные сохраняются) docker-compose stop # Запустить снова docker-compose start # Остановить и удалить (данные сохраняются в volume) docker-compose down # Запустить заново docker-compose up -d

Полная очистка (удалить ВСЕ данные)

# Остановить и удалить ВСЁ включая volumes docker-compose down -v # Запустить с чистой БД docker-compose up -d

Troubleshooting

"Port 5432 already in use"

Проблема: У вас уже установлен PostgreSQL локально.

Решение 1: Остановите локальный PostgreSQL

# macOS brew services stop postgresql # Linux sudo systemctl stop postgresql

Решение 2: Используйте другой порт

# docker-compose.yml ports: - "5433:5432" # Используем 5433 вместо 5432
# Подключение psql -h localhost -p 5433 -U testuser -d testdb

"Connection refused"

Проблема: PostgreSQL ещё не запустился.

Решение:

# Проверьте логи docker-compose logs postgres # Дождитесь: "database system is ready to accept connections"

"Password authentication failed"

Проблема: Неправильный пароль.

Решение:

# Проверьте docker-compose.yml # POSTGRES_PASSWORD: testpass # Используйте правильный пароль psql -h localhost -U testuser -d testdb # Password: testpass

Проверьте свои знания

Вопросы ещё не добавлены

Вопросы для этой подтемы ещё не добавлены.

Далее: Integration vs Unit: границы тестирования