← [Главная](../README.md)

# 09 — Тестирование облачных приложений

## Цель

Понять **уровни тестирования** для распределённых систем: от unit-тестов до проверки архитектурных свойств, нагрузочного тестирования и облегчённого chaos engineering — и как встроить их в CI без ложного чувства безопасности.

## Предварительно

- [Раздел 08 — Observability](../08-observability/README.md)
- Базовый опыт с unit-тестами в любом языке

## Время

**6–9 часов**

---

## Пирамида тестирования (адаптация для облака)

```text
        /\
       /  \  E2E / сценарии (мало, дорого)
      /----\
     /      \  Интеграция + контракты
    /--------\
   /          \  Unit + компонентные
  /--------------\
```

В микросервисах добавляется слой **contract tests** (потребитель ↔ провайдер) и **architecture tests** (запрет циклических зависимостей).

---

## Что тестировать на каждом уровне

| Уровень | Проверяет | Скорость | Стабильность |
|---------|-----------|----------|--------------|
| Unit | Функция, класс | мс | Высокая |
| Component | Сервис с mock БД | секунды | Высокая |
| Integration | Реальная БД в Docker | минуты | Средняя |
| Contract | API между командами | минуты | Высокая |
| E2E | Путь пользователя | минуты | Низкая |
| Load | Поведение под RPS | минуты–часы | Среда |
| Chaos-lite | Отказ зависимости | минуты | Staging |

---

## Оглавление раздела

| Страница | Содержание |
|----------|------------|
| [testirovanie-komponentov.md](testirovanie-komponentov.md) | Unit, integration, testcontainers, контракты |
| [testirovanie-arhitektury.md](testirovanie-arhitektury.md) | Fitness functions, ADR, NFR как тесты |
| [nagruzochnoe-i-chaos-lite.md](nagruzochnoe-i-chaos-lite.md) | k6/Locust, сценарии, инъекция сбоев |

---

## Тестовые среды

| Среда | Назначение |
|-------|------------|
| **Local** | Быстрый цикл разработчика |
| **CI** | PR: unit + быстрая интеграция |
| **Staging** | E2E, нагрузка, chaos |
| **Production** | Синтетические пробы, canary (не «тесты пользователей») |

Данные в staging — **анонимизированные** или синтетические, не копия prod с PII.

---

## Quality gates в pipeline

```text
commit → lint → unit → integration → contract → deploy staging → smoke E2E
```

Блокируйте merge при падении **критичных** gate. Не гоняйте полный load test на каждый PR — ночной cron на staging.

---

## Тестирование и SLO

Нагрузочный тест должен отвечать на вопрос: «выдержим ли **ожидаемый** трафик с **запасом** при p95 < SLO?»

Без связи с SLO load test — красивый график без решений.

---

## Практика на 15 минут

Для сервиса «корзина» выпишите:

1. Три unit-теста.
2. Один integration-тест.
3. Один сценарий E2E.
4. Одну метрику успеха нагрузочного теста.

---

## Самопроверка

1. Зачем contract tests отдельно от integration?
2. Почему E2E не должны быть основой пирамиды?
3. Где в pipeline уместен load test?
4. Чем staging отличается от production для тестов?

---

## Дальше

→ [Тестирование компонентов](testirovanie-komponentov.md)  
← [Раздел 08](../08-observability/README.md)
