Ответ
В backend-разработке используется несколько ключевых видов тестирования, которые образуют так называемую "пирамиду тестирования":
-
Unit-тесты (Модульные тесты)
- Цель: Проверка наименьших изолированных частей кода (функций, методов) без внешних зависимостей, таких как базы данных или сетевые сервисы. Они быстрые и составляют основу пирамиды.
- Пример на Go:
// функция для теста func Add(a, b int) int { return a + b } // тест func TestAdd(t *testing.T) { result := Add(2, 3) if result != 5 { t.Errorf("Ожидали 5, получили %d", result) } }
-
Интеграционные тесты
- Цель: Проверка взаимодействия нескольких компонентов системы между собой. Например, как ваш сервис работает с базой данных, кэшем или внешней очередью сообщений.
- Пример на Go (тест репозитория с БД):
func TestUserRepository_CreateUser(t *testing.T) { // Инициализация тестовой БД db := setupTestDB() defer db.Close() repo := NewUserRepository(db) user := &User{Name: "Test User"} err := repo.Create(user) if err != nil { t.Fatalf("Не удалось создать пользователя: %v", err) } // Здесь можно добавить проверку, что пользователь действительно появился в БД }
-
End-to-End (E2E) тесты
- Цель: Проверка полного пользовательского сценария через внешние интерфейсы системы (обычно API). Эти тесты имитируют поведение реального пользователя.
- Пример на Go (тест API эндпоинта):
func TestAPI_CreateUser(t *testing.T) { router := setupRouter() // Настройка роутера // Создаем HTTP запрос body := strings.NewReader(`{"name":"Test"}`) req := httptest.NewRequest("POST", "/users", body) req.Header.Set("Content-Type", "application/json") // Записываем ответ w := httptest.NewRecorder() router.ServeHTTP(w, req) // Проверяем результат if w.Code != http.StatusCreated { t.Errorf("Ожидали статус 201, получили %d", w.Code) } }
Другие важные виды тестов:
- Нагрузочное тестирование: Проверка производительности и стабильности системы под высокой нагрузкой (инструменты:
k6
,JMeter
,vegeta
). - Smoke-тесты (Дымовые тесты): Быстрая проверка работоспособности основных функций после развертывания.
- Регрессионное тестирование: Проверка того, что новые изменения не сломали существующий функционал.
- Тестирование безопасности: Поиск уязвимостей в приложении (например, с помощью
OWASP ZAP
).