Как было организовано регрессионное тестирование на предыдущем проекте?

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

Ответ

Регрессионное тестирование было преимущественно автоматизировано и интегрировано в CI/CD конвейер.

Стратегия и организация:

  • Наборы тестов: Разделены по приоритету и времени выполнения.
    • Smoke Suite (5-15 мин): Критичный базовый функционал. Запускался на каждый коммит в develop/master.
    • Regression Suite (~2 часа): Полное покрытие ключевых сценариев UI, API и интеграций. Запускался nightly и перед релизом.
  • Параллельный запуск: Использование Selenium Grid или облачных сервисов (BrowserStack) для ускорения UI-тестов.
  • Флаки-тесты: Автоматическое отслеживание нестабильных тестов и их временное отключение с уведомлением.

Технический стек и пример:

  • Фреймворк: Pytest (Python).
  • Отчетность: Allure Reports с историей запусков, графиками и прикрепленными логами.
  • Уведомления: Интеграция со Slack/Teams о результатах прогона.

Пример API-теста для регресса:

import pytest
import requests

@pytest.mark.regression
def test_order_lifecycle(api_client, create_test_user):
    """Проверка полного цикла создания и оплаты заказа."""
    # 1. Добавление товара в корзину
    add_response = api_client.post("/api/cart/items", json={"productId": 123, "quantity": 1})
    assert add_response.status_code == 201

    # 2. Создание заказа
    order_response = api_client.post("/api/orders", json={"cartId": add_response.json()["cartId"]})
    assert order_response.status_code == 201
    order_id = order_response.json()["id"]

    # 3. Симуляция оплаты
    payment_response = api_client.post(f"/api/orders/{order_id}/pay", json={"method": "card"})
    assert payment_response.status_code == 200
    assert payment_response.json()["status"] == "paid"

    # 4. Проверка финального статуса
    final_order = api_client.get(f"/api/orders/{order_id}")
    assert final_order.json()["status"] == "completed"

Для исправлений (hotfix): Запускался выборочный регресс, затрагивающий только измененный модуль и связанные с ним интеграции.