Расскажи про опыт работы с PostgreSQL в контексте тестирования

«Расскажи про опыт работы с PostgreSQL в контексте тестирования» — вопрос из категории Базы данных и SQL, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Мой опыт с PostgreSQL в QA связан в основном с проверкой целостности данных, написанием интеграционных тестов и отладкой сложных сценариев.

1. Валидация данных в ручном и автоматизированном тестировании:

  • После выполнения ключевых действий в приложении (регистрация, оформление заказа) я проверяю, что данные корректно сохранились в БД.
    -- Проверка создания заказа со всеми связанными данными
    SELECT o.id, o.status, u.email, COUNT(oi.id) as items_count
    FROM orders o
    JOIN users u ON o.user_id = u.id
    LEFT JOIN order_items oi ON o.id = oi.order_id
    WHERE o.order_number = 'TEST-ORD-123'
    GROUP BY o.id, u.email;

2. Интеграционные и API-тесты (на Python с pytest):

  • Я пишу тесты, которые проверяют работу сервисов с реальной или тестовой БД. Использую фикстуры для подготовки и очистки данных.

    import psycopg2
    import pytest
    
    @pytest.fixture
    def db_connection():
        conn = psycopg2.connect(
            host="localhost",
            database="test_db",
            user="tester",
            password="test_pass"
        )
        yield conn
        conn.close()
    
    def test_api_creates_user_in_db(db_connection, api_client):
        # 1. Действие через API
        payload = {"name": "Alice", "email": "alice@test.com"}
        response = api_client.post("/api/users", json=payload)
        assert response.status_code == 201
    
        # 2. Проверка в БД
        cursor = db_connection.cursor()
        cursor.execute(
            "SELECT name, email FROM users WHERE email = %s",
            ("alice@test.com",)
        )
        result = cursor.fetchone()
        cursor.close()
    
        assert result is not None
        assert result[0] == "Alice"  # name
        assert result[1] == "alice@test.com"  # email

3. Отладка и анализ:

  • При исследовании багов часто анализирую SQL-запросы, которые генерирует приложение (логи ORM), или пишу свои запросы для поиска аномалий в данных.
  • Использую транзакции (BEGIN; ... ROLLBACK;) для безопасного исследования данных на проде (если разрешено), не изменяя их.

4. Работа с миграциями:

  • В рамках CI/CD проверяю, что новые миграции БД (написанные на Alembic или Liquibase) применяются корректно и не ломают существующие данные. Пишу тесты, которые запускаются на схеме БД после применения миграции.

Это позволяет убедиться, что слой данных работает корректно, а бизнес-логика приложения согласована с состоянием базы данных.