Запуск и тестирование готового интернет-магазина
Студент проведет полное тестирование всех функций проекта, исправит возможные ошибки и выполнит финальный запуск интернет-магазина.
Комплексное тестирование системы (QA)
Поздравляем! Мы подошли к финальному этапу нашего курса — комплексному тестированию и запуску интернет-магазина (Project-Based Learning). Прежде чем открыть доступ реальным покупателям, необходимо провести End-to-End (E2E) тестирование. Это процесс проверки всего приложения от начала до конца, имитирующий действия реального пользователя. Мы должны убедиться, что все компоненты системы: база данных, маршруты, бизнес-логика и сторонние API работают как единое целое.
Тестирование делится на позитивное (ввод правильных данных) и негативное (попытки сломать систему). Что будет, если пользователь попытается добавить в корзину отрицательное количество товара? Что произойдет, если во время оплаты у пользователя пропадет интернет? Программный продукт должен грациозно обрабатывать такие ситуации, показывая понятные сообщения об ошибках, а не «падать» с белым экраном.
Задание
Сценарий ручного End-to-End тестирования магазина
- Зарегистрируйте нового пользователя с валидными данными. Убедитесь, что пароль захеширован в БД (bcrypt).
- Добавьте несколько товаров в корзину. Проверьте правильность расчета итоговой суммы.
- Перейдите к оформлению заказа (Checkout). Введите неполные данные адреса — проверьте, что валидация возвращает ошибки.
- Выберите тестовый режим оплаты (Stripe/Vipps) и завершите платеж.
- Авторизуйтесь под учетной записью администратора. Перейдите в админ-панель.
- Найдите новый заказ, убедитесь, что его статус изменился на 'paid' (оплачен), и в составе заказа присутствуют выбранные товары.
Обзор типичных ошибок и транзакции БД
Основываясь на архивных материалах курса, давайте вспомним одну из самых критичных ошибок при оформлении заказа — отсутствие транзакций базы данных (`DB::transaction`). Оформление заказа — это сложный процесс: мы создаем запись в таблице `orders`, затем в цикле добавляем записи в `order_items`, и очищаем корзину. Если на моменте добавления второго товара в `order_items` произойдет сбой (например, отключилась БД), у нас останется «повисший» заказ без товаров. Это нарушение целостности данных.
Использование транзакций гарантирует атомарность: либо все операции выполняются успешно, либо, при малейшей ошибке, все изменения отменяются (Rollback), возвращая базу данных в исходное состояние. Это золотое правило разработки финансовых и e-commerce систем.
<?php
// Финальный обзор правильного метода сохранения заказа (из архивных материалов)
use Illuminate\Support\Facades\DB;
use App\Models\Order;
use App\Models\OrderItem;
public function process() {
$cart = session('cart', []);
if (empty($cart)) return redirect()->route('cart.index');
// Запуск транзакции БД
DB::transaction(function () use ($cart) {
$total = array_sum(array_map(fn($item) => $item['price'] * $item['quantity'], $cart));
$order = Order::create([
'user_id' => auth()->id(),
'total_price' => $total,
'status' => 'pending'
]);
foreach ($cart as $id => $item) {
OrderItem::create([
'order_id' => $order->id,
'product_id' => $id,
'quantity' => $item['quantity'],
'price' => $item['price'] // Фиксируем цену на момент покупки
]);
}
}); // Транзакция автоматически коммитится (Commit), если нет исключений
session()->forget('cart');
return redirect()->route('orders.success');
}
Чек-лист безопасности перед запуском
Безопасность интернет-магазина — ваша прямая ответственность (Scaffolding). Перед финальным запуском пройдитесь по этому чек-листу. 1. Защита от SQL-инъекций: убедитесь, что вы везде используете Eloquent ORM или подготовленные выражения PDO (не конкатенируете сырые строки в запросы). 2. XSS (Межсайтовый скриптинг): всегда используйте двойные фигурные скобки `{{ $variable }}` в Blade шаблонах, они автоматически экранируют HTML-теги с помощью функции `htmlspecialchars`. 3. CSRF: проверьте наличие директивы `@csrf` во всех формах с методами POST/PUT/DELETE. 4. Права доступа: убедитесь, что обычный пользователь не может получить доступ к маршрутам администратора, подменив URL.
Вы проделали огромную работу! Вы изучили основы PHP 8, объектно-ориентированное программирование, проектирование баз данных MySQL, архитектуру MVC в Laravel, интеграцию внешних API и основы деплоя. Ваш интернет-магазин готов к приему первых клиентов. Удачи в дальнейшей разработке!
Флеш-карточки
Что такое SQL-инъекция и как Laravel от нее защищает?
Нажмите, чтобы увидеть ответ
Уязвимость, позволяющая выполнить вредоносный SQL-код. Laravel защищает от нее, используя подготовленные выражения (Prepared Statements) под капотом Eloquent/PDO.
Нажмите, чтобы вернуться
Как работает защита от XSS в шаблонах Blade?
Нажмите, чтобы увидеть ответ
Синтаксис {{ $var }} автоматически пропускает данные через функцию htmlspecialchars, превращая опасные теги (<script>) в безопасные сущности.
Нажмите, чтобы вернуться
Для чего нужна директива @csrf?
Нажмите, чтобы увидеть ответ
Она генерирует скрытое поле с токеном, защищая от подделки межсайтовых запросов (когда злоумышленник заставляет браузер пользователя отправить запрос от его имени).
Нажмите, чтобы вернуться