← Назад к вопросам

Что такое регрессионное тестирование?

1.3 Junior🔥 241 комментариев
#Теория тестирования

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI21 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# Регрессионное тестирование

Регрессионное тестирование — это один из самых important типов тестирования, и я использую его постоянно в своей работе. Расскажу подробно.

Определение

Регрессионное тестирование (Regression Testing) — это проверка того, что новые изменения не сломали существующий функционал.

Суть: Когда мы добавляем новую feature или фиксим баг, нам нужно убедиться, что мы не сломали всё остальное.

Аналогия: Если вы отремонтировали крышу в доме, но потом обнаружили, что сломалась стена — это регрессия. Регрессионное тестирование убедиться, что дом всё ещё целый.

Когда делается регрессионное тестирование

1. На каждом спринте (постоянно)

Workflow:

Разработчик добавляет новую feature
  ↓
Все unit тесты проходят ✓
  ↓
Smoke tests проходят ✓
  ↓
Регрессионные тесты запускаются
  → Проверяем, что feature работает
  → Проверяем, что всё остальное работает
  ↓
Если passed → merge to main
Если failed → fix and retry

2. Перед каждым релизом (обязательно)

Типичный сценарий в моей компании:

Спринт завершен (2 недели разработки)
  ↓
Понедельник: Код merge to release branch
  ↓
Вторник-Среда: QA делает FULL regression testing
  → Все features работают?
  → Нет ли новых багов?
  → Нет ли regression багов (старые баги вернулись)?
  ↓
Четверг: Bug fixes (если что-то сломалось)
  ↓
Пятница: Deployment на production

3. После hotfix на production

Сценарий:

Баг обнаружен в production
  ↓
Разработчик делает hotfix
  ↓
Регрессионное тестирование (QUICK version)
  → Fix работает?
  → Критичные features всё ещё работают?
  ↓
Deploy на production

Виды регрессионного тестирования

1. Full Regression Testing

Определение: Тестируем ALL existing functionality.

Когда: Перед major releases (например, v2.0)

Что включает:

  • Все previously working features
  • Все user journeys
  • Все edge cases
  • Все API endpoints
  • Database integrity checks
  • Performance checks

Время: 3-10 дней (в зависимости от размера продукта)

Инструменты:

  • Automated test suites (pytest, Selenium, Cypress)
  • Manual exploratory testing
  • Performance monitoring

Пример checklist для e-commerce:

- User Registration & Login
- Product Search & Filtering
- Product Details
- Add/Remove from Cart
- Checkout Process
- Payment Processing
- Order Confirmation
- Order History
- User Profile Management
- Wishlist
- Reviews & Ratings
- Admin Panel
- Email Notifications
- Mobile Responsiveness
- Browser Compatibility

2. Selective / Targeted Regression Testing

Определение: Тестируем только то, что МОЖЕТ быть затронуто изменениями.

Когда: На каждом спринте (fast iteration)

Логика:

Разработчик менял код в файле payment_service.py
  ↓
Что может быть затронуто:
  - Payment processing
  - Order creation
  - Invoice generation
  - Tax calculation
  - Refund processing
  ↓
Тестируем ЭТИ области + 2 соседние для safety

Преимущество: Быстро (30 мин - 2 часа вместо 3-10 дней)

Как я определяю what to test:

  1. Code analysis — какие файлы менялись (git diff)
  2. Dependency analysis — какие модули зависят от измененных
  3. Test mapping — какие тесты покрывают эти модули
  4. Risk assessment — какие области critical

3. Automated Regression Suite

Определение: Pre-written тесты, которые запускаются автоматически.

Примеры инструментов:

  • GitHub Actions / GitLab CI — trigger на каждый push
  • Jenkins — scheduled daily regression
  • Selenium Grid — параллельное выполнение на multiple browsers

Пример:

# .github/workflows/regression.yml
name: Regression Tests

on: [push, pull_request]

jobs:
  regression:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Run regression tests
        run: pytest tests/regression/ -v
      - name: Upload results
        if: always()
        uses: actions/upload-artifact@v2
        with:
          name: test-results
          path: reports/

4. Sanity Testing

Это подмножество regression, но быстрее:

  • Только main paths
  • Только critical features
  • После developer says "ready for QA"
  • Time: 30-60 мин

Как я структурирую регрессионное тестирование

Test Pyramid для Regression

          E2E Tests (10%)
       /                  \
    Integration Tests (30%)
   /                        \
 Unit Tests (60%)

Unit Tests (Auto, ~2 сек):

  • Функция calcDiscount работает?
  • Валидация email правильная?
  • Parsing JSON корректен?

Integration Tests (Auto, ~30 сек):

  • API endpoint вернёт correct data?
  • Database query вернёт ожидаемое?
  • Сервис A может call service B?

E2E Tests (Auto + Manual, ~3-5 мин):

  • User может заказать товар?
  • Payment workflow работает end-to-end?
  • Order appears в admin panel?

Процесс регрессионного тестирования

Шаг 1: Preparation

1. Identify what changed
   → git diff main...feature-branch
   
2. Determine impact areas
   → Which modules? Which features?
   
3. Select test cases
   → From existing test suite
   → Add new tests for new functionality

Шаг 2: Test Execution

1. Setup test environment
   → Fresh database
   → Test data prepared
   → 3rd party mocks configured
   
2. Run automated tests
   → pytest, Cypress, Selenium
   → CI/CD pipeline
   → Parallel execution if possible
   
3. Manual testing (if needed)
   → Edge cases
   → User experience
   → Exploratory testing

Шаг 3: Results Analysis

Test Results:
  ✓ 450 tests passed
  ✗ 12 tests failed
  ⊘ 5 tests skipped
  
Analysis:
  - Are failures related to changes?
  - Are they new bugs or expected?
  - Do we need to update test expectations?
  
Decision:
  → All critical features work? YES
  → All regressions acceptable? YES
  → Ready to deploy? YES

Шаг 4: Reporting

Referession Test Report:
- Date: 2025-03-15
- Build: v3.2.0-rc1
- Environment: Staging
- Test Duration: 45 minutes
- Pass Rate: 97.4% (450/462)
- Failures: 12 (see details)
- Blockers: None
- Ready for Production: YES

Инструменты для регрессионного тестирования

Автоматизация

Unit/Integration:

  • pytest (Python)
  • Jest (JavaScript)
  • JUnit (Java)

UI:

  • Cypress — мой выбор (fast, reliable, great UX)
  • Playwright — альтернатива
  • Selenium — старый, но powerful

API:

  • RestAssured (Java)
  • pytest + requests (Python)
  • Thunder Client / Postman (manual)

CI/CD:

  • GitHub Actions
  • GitLab CI
  • Jenkins

Управление тестами

Test Management:

  • TestRail — organize and track
  • Jira — link tests to requirements
  • Spreadsheet — simple tracking

Reporting:

  • HTML reports (pytest-html)
  • Allure Reports (beautiful, interactive)
  • Dashboard в CI/CD

Реальный пример из моей практики

Ситуация

Разработчик добавил feature: "Multi-language support" (поддержка русского языка)

Регрессионное тестирование

Шаг 1: Impact Analysis

Что менялось:
- i18n library added
- All strings moved to translation files
- Language selector added to UI

Что может сломаться:
- Page titles (в разных языках)
- Form validation messages (локализованы)
- Date/time formatting (locale-specific)
- Email templates (множественное число в русском?)
- Admin interface (также переведён?)

Шаг 2: Test Strategy

1. Core regression (все language-agnostic features)
   - Login/logout
   - Payment
   - Search
   - Database integrity
   
2. i18n specific tests
   - Switch language to Russian ✓
   - All UI labels translated ✓
   - Date format: 15.03.2025 (DD.MM.YYYY) ✓
   - Numbers: 1 000,50 (Russian format) ✓
   - Email templates translated ✓
   - RTL languages? (if supported)

Шаг 3: Execution

Automated tests ran:
  ✓ 450 passed
  ✗ 3 failed:
    - Date format in order confirmation (expected DD.MM.YYYY, got MM/DD/YYYY)
    - Email subject not translated
    - Admin labels in English
    
Manual testing:
  ✓ UI looks good in Russian
  ✓ Navigation works
  ✗ RTL text in reviews wraps incorrectly

Шаг 4: Action

Developer fixes:
  - Date formatting
  - Email translations
  - Admin localization
  - RTL CSS
  
Re-test:
  ✓ All passed!
  
Deploy: Approved

Best Practices для регрессионного тестирования

1. Maintainability

# ❌ Плохо — hard to maintain
driver.find_element("xpath", "//div[@class='btn btn-primary'][1]").click()

# ✅ Хорошо — POM (Page Object Model)
class LoginPage:
    LOGIN_BUTTON = ("id", "login_btn")
    
    def click_login(self):
        self.driver.find_element(*self.LOGIN_BUTTON).click()

2. Parallelization

# Run tests in parallel (3x faster)
pytest tests/regression/ -n auto

# Cypress in parallel
npm run cypress:run -- --parallel --record

3. Monitoring

Трек flaky tests:
- Какие тесты падают случайно?
- Может быть timing issue?
- Может быть environment issue?
- Fix or quarantine

4. Continuous Improvement

Каждый спринт:
- Add tests for new features
- Remove tests for deprecated features
- Refactor brittle tests
- Update test data

Выводы

Регрессионное тестирование:

  1. Essential — без него мы не можем confidently ship
  2. Continuous — не one-time activity, постоянно
  3. Automated — должно быть в CI/CD pipeline
  4. Risk-based — не тестируем одинаково всё, приоритизируем
  5. Evolving — обновляем тесты вместе с кодом

В моей практике, хорошее регрессионное тестирование экономит месяцы на отладку production issues. ROI очень высокий.

Что такое регрессионное тестирование? | PrepBro