Первое, с чем нужно ознакомиться — это структура каталогов Laravel. Откройте корневую папку проекта. Ключевые директории: `app/` (ядро приложения: модели, контроллеры, middleware, исключения), `routes/` (все маршруты API и веб-интерфейса), `database/` (миграции, сидеры, фабрики), `tests/` (автотесты), `config/` (файлы конфигурации), `resources/` (шаблоны Blade и фронтенд-активы). Уже на этом этапе можно оценить организованность проекта: разбросана ли бизнес-логика по контроллерам или выделена в сервисы в `app/Services`? Это говорит о потенциальной сложности тестирования.
Анализ файла `routes/web.php` и `routes/api.php` — это карта функциональности приложения. Каждый маршрут — это точка входа для тестирования. Обратите внимание на группы маршрутов с примененным middleware (например, `auth:api`, `throttle:api`). Это прямое указание на необходимость тестирования авторизации, аутентификации и ограничения частоты запросов (rate limiting). Если вы видите много ресурсных маршрутов (`Route::resource(...)`), это стандартный CRUD, который нужно проверить на все возможные операции (создание, чтение, обновление, удаление) и валидацию.
Следующий ключевой объект анализа — модели Eloquent (файлы в `app/Models`). Откройте любую модель. Посмотрите на свойства `$fillable` (какие поля можно массово назначать) и `$guarded` (какие поля защищены от массового назначения). Уязвимость массового назначения (Mass Assignment) — классическая проблема безопасности. Если в `$fillable` указано поле `is_admin`, а оно приходит из формы регистрации, это критический баг. Тестировщик должен специально проверять передачу таких полей в запросах.
Изучите связи (`hasMany`, `belongsTo`, `belongsToMany`). Они подскажут, какие данные должны быть согласованы. Например, если у модели `Order` есть связь `hasMany` с `OrderItem`, то при удалении заказа должны каскадно удаляться все его позиции (если не настроено иное). Это сценарий для интеграционного тестирования.
Контроллеры (`app/Http/Controllers`) — это мозг операций. Не нужно читать каждую строку кода, но обратите внимание на объем методов. Если метод контроллера занимает 100 строк, он, скорее всего, нарушает принцип единой ответственности и содержит сложную логику, которую легко сломать. Такие методы — кандидаты на интенсивное тестирование граничных значений и различных ветвлений. Посмотрите, используется ли валидация запросов с помощью Form Request (специальные классы в `app/Http/Requests`). Их наличие — хороший знак, означающий централизованную валидацию. Проверьте правила валидации: они дают готовый чек-лист для негативного тестирования (отправка невалидных email, строк короче min длины и т.д.).
Middleware — мощный механизм Laravel. Он находится в `app/Http/Middleware`. Стандартные: `VerifyCsrfToken` (защита от CSRF — важно для тестирования веб-форм), `Authenticate`, `EncryptCookies`. Кастомные middleware могут реализовывать проверку прав, логирование, модификацию ответов. Узнайте, какие middleware глобальны, а какие назначены на конкретные маршруты. Это поможет понять, какие проверки выполняются на каждом запросе.
Конфигурационные файлы в папке `config/` — кладезь информации для тестировщика. `config/auth.php` — как настроена аутентификация (через сессии, токены, JWT?). `config/database.php` — какие драйверы БД используются. `config/cache.php` и `config/queue.php` — использует ли приложение кеширование и очереди задач? Если да, то тестирование должно учитывать возможные задержки (например, при отложенной отправке email через очередь). `config/app.php` — настройки локали, таймзоны, уровень дебага. Приложение в режиме `APP_DEBUG=true` может раскрывать чувствительную информацию в ошибках — это угроза безопасности.
Папка `tests/` — ваш лучший друг. Изучите существующие тесты (Feature и Unit). Они покажут, что сами разработчики считают важным покрыть тестами. Это может выявить недостаточно протестированные модули. Также по структуре тестов можно понять, используется ли DatabaseMigrations или DatabaseTransactions для изоляции тестов — это подскажет, как тестовые данные влияют на среду.
Практические шаги для тестировщика:
- Составьте карту приложения на основе `routes/`. Выпишите все конечные точки, методы HTTP и примененные middleware.
- Проанализируйте модели и их связи. Выявите потенциальные точки Mass Assignment и бизнес-правила целостности данных.
- Изучите конфигурацию безопасности: `config/auth.php`, `config/session.php`, глобальные middleware.
- Проверьте наличие и содержание файла `.env.example`. Часто в нем перечислены все необходимые переменные окружения, что помогает понять интеграции (сторонние API, ключи доступа).
- Используйте встроенные инструменты Laravel для отладки во время тестирования. Например, можно временно добавить логирование в интересующие точки с помощью `Log::info()` (с разрешения команды) или использовать Telescope (если установлен) для мониторинга запросов, исключений, выполненных запросов к БД.
Комментарии (8)