Что такое регрессионное тестирование?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
# Регрессионное тестирование
Регрессионное тестирование — это один из самых 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:
- Code analysis — какие файлы менялись (git diff)
- Dependency analysis — какие модули зависят от измененных
- Test mapping — какие тесты покрывают эти модули
- 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
Выводы
Регрессионное тестирование:
- Essential — без него мы не можем confidently ship
- Continuous — не one-time activity, постоянно
- Automated — должно быть в CI/CD pipeline
- Risk-based — не тестируем одинаково всё, приоритизируем
- Evolving — обновляем тесты вместе с кодом
В моей практике, хорошее регрессионное тестирование экономит месяцы на отладку production issues. ROI очень высокий.