Ответ
Это разница между общим и частным. Тестирование приложения — это широкий процесс, а тестирование API — его важная, но более узкая часть.
Тестирование приложения (Application Testing)
Это комплексная проверка всего приложения на соответствие требованиям. Оно включает в себя множество уровней и типов тестов:
- Unit-тесты: Проверка отдельных функций и методов в изоляции.
- Интеграционные тесты: Проверка взаимодействия нескольких компонентов системы. Тестирование API является одним из видов интеграционного тестирования.
- End-to-End (E2E) тесты: Симуляция полного пользовательского сценария через интерфейс (UI или CLI), например, "регистрация -> логин -> создание заказа".
- UI-тесты: Проверка корректности отображения и работы пользовательского интерфейса.
- Нагрузочное тестирование: Проверка производительности и стабильности приложения под высокой нагрузкой.
Тестирование API (API Testing)
Это вид интеграционного тестирования, который фокусируется исключительно на проверке программного интерфейса приложения (API), обычно через HTTP.
- Цель: Убедиться, что API работает согласно своей спецификации (контракту).
- Что проверяется:
- Правильность кодов состояния HTTP (200, 404, 500 и т.д.).
- Корректность структуры и содержания тела ответа (JSON, XML).
- Правильность HTTP-заголовков.
- Время ответа.
- Обработка ошибок и некорректных входных данных.
Пример теста для API-ручки в Go:
// Этот код проверяет только один аспект - работу API-ручки /users/1
func TestGetUserAPI(t *testing.T) {
req, _ := http.NewRequest("GET", "/users/1", nil)
rr := httptest.NewRecorder()
// GetUserHandler - это наш обработчик
handler := http.HandlerFunc(GetUserHandler)
handler.ServeHTTP(rr, req)
// Проверяем код ответа
if status := rr.Code; status != http.StatusOK {
t.Errorf("handler returned wrong status code: got %v want %v", status, http.StatusOK)
}
// Проверяем тело ответа
expected := `{"id":1,"name":"John"}`
if rr.Body.String() != expected {
t.Errorf("handler returned unexpected body: got %v want %v", rr.Body.String(), expected)
}
}
Итог: Тестирование API проверяет "контракт" вашего бэкенда, в то время как тестирование приложения проверяет всю систему целиком, включая то, как разные части (в том числе API) работают вместе для решения бизнес-задачи.