Как подойти к тестированию нового функционала?

«Как подойти к тестированию нового функционала?» — вопрос из категории Основы тестирования, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Подход основан на пирамиде тестирования и включает следующие уровни:

1. Модульное тестирование (Unit Testing):

  • Цель: Проверить логику отдельных функций/классов в изоляции.
  • Инструменты: Фреймворки (pytest, JUnit).
  • Пример: Тест бизнес-логики калькулятора.

2. Интеграционное тестирование (Integration Testing):

  • Цель: Проверить взаимодействие между модулями (например, сервис ↔ база данных, микросервисы).
  • Подход: Использование тестовых баз данных и контейнеров (Docker).

    def test_order_creation_integration():
    # Используем реальную тестовую БД
    user = create_test_user()
    product = create_test_product()
    
    order = OrderService.create_order(user_id=user.id, product_id=product.id)
    
    # Проверяем, что заказ создан и сохранен в БД
    db_order = OrderRepository.get_by_id(order.id)
    assert db_order is not None
    assert db_order.status == "pending"

3. Системное (E2E) тестирование (System / E2E Testing):

  • Цель: Проверить полный пользовательский сценарий в среде, максимально приближенной к продакшену.
  • Инструменты: Selenium, Cypress, Playwright для UI; Postman/RestAssured для API.

4. Приемочное тестирование (Acceptance Testing):

  • Цель: Убедиться, что функционал соответствует бизнес-требованиям (часто с использованием User Stories и BDD-фреймворков вроде Cucumber).

Общий процесс:

  1. Начать с модульных тестов для новой логики.
  2. Добавить интеграционные тесты для проверки взаимодействий.
  3. Дополнить E2E-тестами для ключевых сценариев.
  4. Провести дымовое (smoke) и регрессионное тестирование существующего функционала.
  5. Использовать чек-листы для ручного исследовательского тестирования (exploratory testing).