Ответ
Типичный тест API endpoint — это интеграционный или функциональный тест, который проверяет, что эндпоинт корректно обрабатывает HTTP-запрос и возвращает ожидаемый ответ. В экосистеме PHP для этого часто используется PHPUnit в связке с фреймворком для HTTP-клиента.
Пример теста для GET-эндпоинта /api/users/{id} с использованием Symfony и PHPUnit:
// tests/Controller/UserApiControllerTest.php
namespace AppTestsController;
use SymfonyBundleFrameworkBundleTestWebTestCase;
class UserApiControllerTest extends WebTestCase
{
public function testGetUserReturnsValidResponse(): void
{
// 1. Создаем клиент и выполняем запрос
$client = static::createClient();
$client->request('GET', '/api/users/1');
// 2. Проверяем HTTP-статус код (первичная проверка успеха)
$this->assertResponseIsSuccessful(); // Проверяет, что статус код 2xx
// Или более конкретно:
// $this->assertResponseStatusCodeSame(200);
// 3. Проверяем, что ответ в формате JSON
$this->assertResponseHeaderSame('Content-Type', 'application/json');
// 4. Декодируем и проверяем структуру и данные ответа
$responseData = json_decode($client->getResponse()->getContent(), true, 512, JSON_THROW_ON_ERROR);
$this->assertIsArray($responseData);
$this->assertArrayHasKey('id', $responseData);
$this->assertArrayHasKey('email', $responseData);
$this->assertArrayHasKey('name', $responseData);
$this->assertEquals(1, $responseData['id']);
$this->assertMatchesRegularExpression('/^[^@s]+@[^@s]+.[^@s]+$/', $responseData['email']);
}
public function testGetUserReturns404ForNonExistentId(): void
{
$client = static::createClient();
$client->request('GET', '/api/users/99999');
// Проверяем корректную обработку ошибки
$this->assertResponseStatusCodeSame(404);
}
}
Ключевые аспекты, которые проверяются в API-тестах:
- Корректность HTTP-статуса (200, 201, 400, 401, 404, 422, 500).
- Структура ответа (формат JSON/XML, наличие обязательных полей).
- Корректность данных (соответствие ожидаемым значениям, форматам дат, email и т.д.).
- Заголовки ответа (
Content-Type,Cache-Control, кастомные заголовки). - Обработка ошибок и валидации (возврат 422 с деталями ошибок при невалидном входе).
- Авторизация и аутентификация (проверка доступа для авторизованных/неавторизованных пользователей, разных ролей).
- Побочные эффекты (например, что POST-запрос действительно создал запись в БД).
Для комплексного тестирования также используются:
- DataFixtures для предзагрузки тестовых данных в БД.
- Mock-объекты для изоляции теста от внешних сервисов (например, платежных шлюзов).
- Тестирование пагинации, фильтрации и сортировки для списковых эндпоинтов.
Такой подход обеспечивает надежную проверку контрактов API и предотвращает регрессии.