Установка и настройка PHPUnit. Написание Unit-тестов. Создание инфраструктуры функциональных тестов для API. Анализ тестового покрытия.
- 00:00:34 Проблемы логики
- 00:03:14 Фреймворк PHPUnit
- 00:06:40 Файл конфигурации
- 00:13:17 Переменные окружения для тестов
- 00:15:04 Папка tests
- 00:15:33 Какие тесты нужны
- 00:21:43 Первый Unit-тест
- 00:26:29 Команда запуска
- 00:29:31 Параметризованные тесты
- 00:32:56 Тестирование контроллеров
- 00:33:43 Команда check
- 00:34:11 Функциональный тест
- 00:40:30 Вынос повторяющегося кода
- 00:43:20 Что нам помогло
- 00:45:56 Логирование ошибок в тестах
- 00:49:09 Разделение на Test Suite
- 00:52:43 Анализ тестового покрытия кода
- 00:59:12 Аннотация covers
- 01:01:05 Покрытие функциональными тестами
- 01:04:06 Форматы отчёта
- 01:05:41 Очистка мусора при инициализации
- 01:07:44 Обзор результата
Скрытый контент (код, слайды, ...) для подписчиков.
Открыть →Чтобы не пропускать новые эпизоды подпишитесь на наш канал @deworkerpro в Telegram
Большая просьба. Добавьте пожалуйста в .gitignore папки .idea.
У всех редакторы могут быть разные. В Git для этого можно указать глобальный игнор:
и добавлять папки своих редакторов туда:
Спасибо
Большое спасибо!
спасибо за замечательный урок.
возможно ли тест: множественный запрос (напр. 100 раз в сек) от одного и того же IP, т.е. что-бы обнаружить атаку? как организована такая защита на Slim? как лучше организовать защиту? Будет о защите на уроках?
Да, добавим Rate Limiter.
Срасибо
Странно, чтоб сайт на PHP сам боролся с DDOS. Просто поставьте ограничение в фаерволе ведь он наверное для этого. Да и вообще по ситуации, есть различные ситуации - разные решения.
Согласен. Если по серьезному начнут ddos-ить, то в первую очередь ляжет сервер. До web приложения не дойдет
rate limit можно наложить на любой порт и на 80, 443 тоже.
В чем разница между PhpUnit и Codeception? Почему во всех уроках используете PhpUnit?
Codeception построен поверх PHPUnit, дополняя его своими модулями для готовых фреймворков и позволяя делать функциональные и приёмочные тесты в своём Cest-стиле.
Он с модулями удобен как быстрое решение для готовых фреймворков, но неудобен для кастомных проектов с вынесенным фронтендом.
Поэтому мы возьмём оригинальный PHPUnit для тестов API, отдельный JS-фреймворк для тестов JS и отдельный BDD-фреймворк для приёмочных тестов всей системы.
Дмитрий, спасибо за урок, все замечательно, а был ли у Вас опыт использования мутационного тестирования? Если да, то что думаете по этому поводу? Спасибо.
Особо не использовал из-за медленной работы, но вещь полезная.
Дмитрий, подскажите любезно, что с правами не так. Винда =/ Докер и консоль от администратора запущено. Докер ап работет исправно, сайт поднимается. А вот make init. Ерунда какая то, есть идеи? Спасибо.
А что выводит команда
ls
?Docker-демон не видит виртуальную папку /cygdrive, которая. существует только в консоли Git.
Установите Make for Windows и запускайте команды в консоли PowerShell.
Установил эту утилиту, выполняю её из powerShell:
Странно, а остальные команды работают
В
-v /api:/app
адрес должен подставляться из${PWD}
абсолютныйC:\Users\...
Странное поведение, потому что PWD в консоли работает:
Прописал прямо путь, ошибок не выбросило.
Значит та консоль подменяет
$PWD
на свой/cygdrive
Скорее всего. Но конкретно предыдущий лог из консоли это из powershell и make утилиты. и PWD в повершелле работает корректно.
Но ошибка все равно сыпется. Ерунда какая то :(
Я на винде прописал путь так и все работает: docker run --rm -v //${PWD}/api://app -w /app alpine chmod 777 var
Неа, с двойными слэшами тоже не работает :( Только абсолютный путь
У меня таже проблема, ломается на этом месте. Подскажите, что мы хотим добится в этом месте?
Если только установить права на var. Но если ,я не запущу эту команду, то получу теже права:
Можно ли в данном случае обойтись без абсолютного пути? ${PWD}/api
Да, только устанавливаем права. Для docker-compose нужны относительные пути, а для docker требуются только абсолютные.
docker run --rm -v $$PWD/api:/app -w /app alpine ls -l
попробуйте так.
echo $$PWD
Дошел до 27 минуты, у меня не видны тесты:
А phpunit.xml настроен верно?
Я в тупиковых ситуациях смотрю ваши комиты и беру от туда:
попробуйте выполнить команду composer dump-autoload
Всем добрый вечер. У кого то зависает загрузка видео на скорости 1.25 или 1.5? C интернетом перебоя нет. Это не в первый раз.
их не может быть, а если и случаются то зависят от Vimeo, так как он используется для размещения видео
Зависания были раньше, когда использовался файловый хостинг. Сейчас после перехода на Vimeo проблем со скоростью нет.
Дмитрий, я хотел сам поставить phpunit,
не дало
Ладно , взял код из комита - Added JSON response test
и в итоге - /usr/local/bin/docker-php-entrypoint: exec: line 9: vendor/bin/phpinput: not found
что где пропустил не пойму подскажите ?
Попробуйте удалить папку vendor и поставить через
composer require
снова. Если не получится, то сделайте сначалаcomposer remove phpunit/phpunit
, а потом сноваrequre
.phpunit в вендоре есть при любом раскладе и переустановке. Но все равно при запуске от любого коммита и после переустановки при вводе команды
ответ один
Не
phpinput
, аphpunit
ага точно, походу ночью лучше спать ))))
Спасибо!
Добрый день, Дмитрий.
У меня phpunit 9.3.8 и psalm 3.14.2. Plalm выдает ошибку одинаковую для всех файлов Unit тестов, сами тесты работают нормально:
Подскажите в чем может быть проблема?
Можно добавить глобальное подавление этой ошибки для всех тестов в
psalm.yml
:У меня phpunit 9 ругается на отсутствие @covers. Дописал к классу теста @covers JsonResponse и он перестал это делать.
Test\Unit\Http\JsonResponseTest::testObject This test does not have a @covers annotation but is expected to have one
UPD: досмотрел видео до конца и директивы в конфиге
У меня при запуску coverage тестов ругается
Configuration: /app/phpunit.xml Warning: XDEBUG_MODE=coverage or xdebug.mode=coverage has to be set
Чтобы пофиксить в Ubuntu переделал команду в следующую:
Было тоже самое, поменял в
api/docker/development/php/conf.d/xdebug.ini
xdebug.mode=debug
наxdebug.mode=coverage
. Лучше ничего не придумал пока)Лучше как раз передавать
XDEBUG_MODE=coverage
при выполнении, как в совете выше.Мы сделали также в 44-ом эпизоде про новый Xdebug 3
Отлично, спасибо!
Здравствуйте! Немного не в тему, но подскажите пожалуйста, есть ли в планах скринкасны по Python? Также охватывающие тему деполоя, сборки, тестов, контейнеризация.
Python в планах нет. А контейнеризация и деплой везде одинаковые.
Здравствуйте. Подскажите такой момент: У меня на testMethod и на testNotFound валятся ошибки Error: Value of type bool is not callable при этом если их по отдельности по 1 запустить то они нормально проходят, я понимаю что это из за того что экземпляр приложения после первого теста создан, и при попытки создать его еще раз и валится эта ошибка. Только вот я не понимаю как ее обойти. версия slim 4.9 версия phpunit 9.5
Вопрос отпал, у мена в файле config/app.php были прописаны require_once а не просто require
Здравствуйте! При запуске
ошибка
команда в Composer
С чем это может быть связано?
Может проблема текущей верси PHPUnit.
здравствуйте, меня всегда мучает такой вопрос: как тестить сервисы с более менее сложным функционалом? Или все надо вынести в отдельные функции так, чтобы не было сложной логики и тогда не будет необходимости тестить основной сервис который оперирует маленькими функциями?
пример такого сервиса:
Или войти через: