Переносимое окружение для разработки и тестов
Сегодня организовал трансляцию и вместе с Валентином Удальцовым и Кириллом Несмеяновым выступил с докладом на втором митапе сообщества LivePHP в Санкт-Петербурге:
Кирилл и Валентин рассказали про асинхронность и полиморфизм, а я собрал в кучу мои постоянные советы по построению быстроподнимаемого переносимого окружения для удобной разработки и тестирования веб-проектов:
Кирилл Несмеянов: Все оттенки асинхронности
Многие слышали об асинхронности, но не многие применяли. А те, кто применяли — почти всегда используют готовые инструменты. С приходом PHP 8.1 в язык добавили Fiber API, которые изменяют подходы к разработке ПО, но не только лишь все смотрят в завтрашний день, понимая насколько они могут изменить "правила игры". В докладе предлагается "изобрести" асинхронность заново, и задуматься о том, что подходы к разработке с использованием EventLoop, используемые в Revolt/ReactPHP/Amp/etc с приходом файберов морально устарели. А может и нет... Решать вам =)
Валентин Удальцов: Полиморфизм в современном PHP
На первый взгляд может показаться, что в PHP есть только полиморфизм подтипов. Однако если вооружиться современными инструментами и напильником, можно получить все три вида полиморфизма. На докладе мы глубоко прокачаем понимание типизации. Обсудим в сотый раз LSP, разберёмся с вариантностью (declaration-site и call-site), реализуем простейшую перегрузку методов и поймём, почему её нет в языке. Будет познавательно и полезно не только в контексте PHP.
Дмитрий Елисеев: Переносимое окружение для разработки и тестов
Про облегчение деплоя сказано много. Но про локальный стенд для разработки и тестов говорить часто боятся. Уходит много сил на перекидывание ключей доступа к песочницам сторонних сервисов и дампов данных от одних программистов другим. Пока Кирилл берёт быка за Фаберже, исправим эту оплошность :) Расскажем, как выстроить удобное локальное окружение для разработки и тестов при командной работе с коллегами или с собой со второго компьютера. Как обмениваться демо-данными, подключать и эмулировать сторонние сервисы, разрабатывать отдельные микросервисы без необходимости поднимать соседние сервисы и как тестировать проекты с базами данных и очередями.
И концерт «В Питере – Пых!»
...который по авторским правам в стрим не вошёл:
- Стрим в YouTube
- Стрим в RuTube
- Мой GitHub с примерами проектов
- Канал сообщества LivePHP
- Анонс митапа с программой
- Фотоотчёт там что было
Начинаем в 19:00 по МСК, раскачаем мир, захватим вселенную, а дальше как повезёт :)
Дмитрий, хочу задать вопросы по стриму, для осмысления. Не знаю на сколько будет полезно написать здесь. Можете вынести на Деворкер.
По тестированию:
1. Когда тестируется API и отправка email сообщения через очередь вы используете скрипт ожидания, который ждет ответ очереди. При этом вы никак не протестировали само сообщение, которое ушло в очередь. В Symfony Messenger можно протестировать отправленное сообщение в очередь. И после того как отработало можно проверить ушло ли письмо. Так же можно использовать sync, in-memory транспорт, вместо реального вызова брокера сообщений.
2. Касается фикстур для тестов. А что если действительно отказаться от фикстур в функциональных тестов и заменить их на вызов команды, затем получения из Query ответа и проверить его. Кроме того было бы полезно проверять что интеграционное событие так же было опубликовано. Тогда получилась бы связка Command -> Event -> Query.
Например, нам нужно проверить блокировку пользователя. Для этого мы вызываем Join By Email Command. Далее вызываем Block Command и проверяем, что в шине появилось событие UserBlocked.
Фикстуры делают тоже самое, только при этом нам приходится писать их отдельно для каждого кейса, а так же писать Builder. Можно убрать это звено и просто вызывать акцентировать своё внимание на конечных контрактах Command, Event, Query, Policy… Фикстуры использовать только для демо данных.
3. Почему отправку email сообщения вызываете отдельным сервисом JoinSender, вместо того чтобы подписаться на событие UserJoined в модуле Mailer?
xaxaaxax
Добрый день, будет ли продолжение курса по Slim? Если да, то когда?
Вопросов в зале нет, никто нихера не понял, что это за огороды Дима городит в своих учебных демо проектах