🎉 С Днём программиста! 🎉
С участием в E-CODE совсем забыл сказать, чему он приурочен - а именно Дню программиста!
Программирование - одно из самых увлекательных занятий.
Уже несколько лет живу на дофамине от решения рабочих задач.
Когда ковыряешься в коде неделями и наконец решаешь задачу - всегда есть легкая эйфория от того, что преодолел новое препятствие и справился!
В современном мире этот навык позволяет автоматизировать свою деятельность и облегчить жизнь - будь то телеграм-бот или парсер для поиска лучших цен на отели и билеты
- Отличная профилактика болезни Альцгеймера ))
- А разработка - одна из интереснейших ветвей развития Automation QA
Кайфую от момента, когда создаешь что-то, что экономит кучу времени тебе и команде.
И да, это единственная профессия, где можно сломать всё одной строчкой кода, а потом героически это же исправить другой строчкой 😅
Поздравляю всех причастных к празднику!
Желаю:
• Интересных задач
• Прекрасных побед 🏆
• Собственных крутых инструментов
• Чтобы продакшн не падал по выходным!
С участием в E-CODE совсем забыл сказать, чему он приурочен - а именно Дню программиста!
Программирование - одно из самых увлекательных занятий.
Уже несколько лет живу на дофамине от решения рабочих задач.
Когда ковыряешься в коде неделями и наконец решаешь задачу - всегда есть легкая эйфория от того, что преодолел новое препятствие и справился!
В современном мире этот навык позволяет автоматизировать свою деятельность и облегчить жизнь - будь то телеграм-бот или парсер для поиска лучших цен на отели и билеты
- Отличная профилактика болезни Альцгеймера ))
- А разработка - одна из интереснейших ветвей развития Automation QA
Кайфую от момента, когда создаешь что-то, что экономит кучу времени тебе и команде.
И да, это единственная профессия, где можно сломать всё одной строчкой кода, а потом героически это же исправить другой строчкой 😅
Поздравляю всех причастных к празднику!
Желаю:
• Интересных задач
• Прекрасных побед 🏆
• Собственных крутых инструментов
• Чтобы продакшн не падал по выходным!
❤17🔥10👍1
Media is too big
VIEW IN TELEGRAM
Привет, вот и прошел E-CODE, было очень круто.
Познакомился с 4 подписчиками, почувствовал себя звездой 🤣🤣🤣
Тем кто не смог попасть на мой доклад можно посмотреть по ссылке)
Ну и всем хорошего дня)
Даже на видос попал на 10 секунде 😀
Познакомился с 4 подписчиками, почувствовал себя звездой 🤣🤣🤣
Тем кто не смог попасть на мой доклад можно посмотреть по ссылке)
Ну и всем хорошего дня)
Даже на видос попал на 10 секунде 😀
🔥17😁7❤2🫡1
Почему тестирование брокеров сообщений - это отдельная наука
Готовлю кодовую базу для курса по автотестированию брокеров сообщений. Несмотря на кажущуюся простоту подключения к Kafka или RabbitMQ, там огромное количество подводных камней.
Основная проблема:
Брокеры предназначены для непрерывной работы, а автотесты - это всегда конечная история. Это кардинально меняет подход:
В разработке:
- Консьюмер работает non-stop и безотказно
- Соединения устанавливаются один раз
- Оптимизация под долгосрочную работу
В тестировании:
- Тесты должны выполняться максимально быстро
- Частое создание/закрытие соединений
- Каждый тест изолирован: "открыл → выполнил → забыл"
Реальный кейс из разработки курса:
Создал интеграционную цепочку:
1. API Handler → отправляет сообщение в Kafka
2. Kafka Consumer → обрабатывает событие регистрации пользователя
3. Database → сохраняет нового пользователя
4. RabbitMQ → отправляет событие на email
5. RabbitMQ Consumer → обрабатывает отправку письма
Проблема: каждый компонент работал изолированно, но полная цепочка не функционировала.
Что я пробовал:
Различные настройки соединений
Перезапуск приложения
Эксперименты с таймаутами
Отладка каждого звена отдельно
Решение:
Оказалось, что тест нашел реальный баг в приложении, а я упорно пытался "починить" тест!
Проблема была в Kafka Consumer - сообщения попадали в топик, но не обрабатывались. Фикс оказался простым: изменить одну настройку в docker-compose для тестового окружения.
Вывод:
Именно поэтому нанимают тестировщиков-автоматизаторов - чтобы находить такие интеграционные проблемы, которые незаметны при изолированном тестировании компонентов.
Тестирование брокеров сообщений - это сложная, многогранная тема со множеством нюансов:
- Управление жизненным циклом соединений
- Обработка таймаутов и retry-логики
- Тестирование асинхронных цепочек
- Изоляция тестов при работе с очередями
Все подготовительные работы завершены, блокеры устранены. После отпуска планирую завершить запись курса и поделиться накопленными знаниями по этой непростой, но критически важной области автоматизации.
Этот курс будет мегаполезен всем, кто сталкивается с тестированием распределенных систем и брокеров сообщений. Совсем скоро! 🚀
——————————-
📱 TG-сообщество
📱 Обучение
📱 Отзывы
Готовлю кодовую базу для курса по автотестированию брокеров сообщений. Несмотря на кажущуюся простоту подключения к Kafka или RabbitMQ, там огромное количество подводных камней.
Основная проблема:
Брокеры предназначены для непрерывной работы, а автотесты - это всегда конечная история. Это кардинально меняет подход:
В разработке:
- Консьюмер работает non-stop и безотказно
- Соединения устанавливаются один раз
- Оптимизация под долгосрочную работу
В тестировании:
- Тесты должны выполняться максимально быстро
- Частое создание/закрытие соединений
- Каждый тест изолирован: "открыл → выполнил → забыл"
Реальный кейс из разработки курса:
Создал интеграционную цепочку:
1. API Handler → отправляет сообщение в Kafka
2. Kafka Consumer → обрабатывает событие регистрации пользователя
3. Database → сохраняет нового пользователя
4. RabbitMQ → отправляет событие на email
5. RabbitMQ Consumer → обрабатывает отправку письма
Проблема: каждый компонент работал изолированно, но полная цепочка не функционировала.
Что я пробовал:
Различные настройки соединений
Перезапуск приложения
Эксперименты с таймаутами
Отладка каждого звена отдельно
Решение:
Оказалось, что тест нашел реальный баг в приложении, а я упорно пытался "починить" тест!
Проблема была в Kafka Consumer - сообщения попадали в топик, но не обрабатывались. Фикс оказался простым: изменить одну настройку в docker-compose для тестового окружения.
Вывод:
Именно поэтому нанимают тестировщиков-автоматизаторов - чтобы находить такие интеграционные проблемы, которые незаметны при изолированном тестировании компонентов.
Тестирование брокеров сообщений - это сложная, многогранная тема со множеством нюансов:
- Управление жизненным циклом соединений
- Обработка таймаутов и retry-логики
- Тестирование асинхронных цепочек
- Изоляция тестов при работе с очередями
Все подготовительные работы завершены, блокеры устранены. После отпуска планирую завершить запись курса и поделиться накопленными знаниями по этой непростой, но критически важной области автоматизации.
Этот курс будет мегаполезен всем, кто сталкивается с тестированием распределенных систем и брокеров сообщений. Совсем скоро! 🚀
——————————-
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25🤝1
This media is not supported in your browser
VIEW IN TELEGRAM
КЕМ ТЫ БЫЛ 7 ЛЕТ НАЗАД?
Вернулся из отпуска. Бали, Катар, куча впечатлений.
Те, кто следят за мной в запрещенограмме, думаю, в курсе.
Но главный вопрос, который я задавал себе в отпуске:
"Каким я был 7 лет назад? И где бы я был сейчас, если бы не сделал выбор тогда?"
Мог ли я представить, что смогу видеть другие культуры, общаться с людьми на другом языке, видеть всё своими глазами, а не по телевизору?
Когда я жил в Омске, я всегда мечтал уехать за границу. Там я видел финансовую стабильность и безопасность, хотел быть просто в тихом месте, чтобы меня никто не трогал. Меня не сильно интересовали какие-то вызовы, хотелось хотя бы просто покоя.
Сейчас, вопреки непопулярному мнению, я вижу, что в России гораздо больше возможностей и комфорта, чем во многих странах. Я понял, что богатые люди живут не на Бали - богатые люди живут в Москве и других крупных городах, потому что уровень доходов в какой-то мере определяется уровнем расходов.
А на Бали ездят отдыхать.
Да, на Бали может быть интересно две-три недели, но, по большому счёту, там делать нечего. Есть в кафе, кататься на сёрфе, плавать в бассейне - надоест довольно быстро.
А обычная жизнь - это ещё походы к врачу, бытовая санитария, чистота вокруг, общение, сервис, да даже тупо влажность, от которой плесневеет всё вокруг, вечно влажное бельё и кровати.
Таких моментов очень много.
И туда едут жить на ПМЖ, по моему мнению, те, кто не может себе позволить жить в РФ комфортно, ну и единицы, потому что им действительно нравится. Но в большинстве случаев продаётся это всё под очень красивой мотивирующей картинкой. (Не рассматриваю тех, кто уехал по каким-то политическим соображениям).
С каждым своим путешествием я всё больше убеждаюсь, что мне нравится жить в РФ, а вот ездить отдыхать за границу - чтобы видеть, как живут другие. Потому что путешествия, особенно если они больше двух недель, убирают розовые очки.
И понимаешь: не везде хорошо, не только у нас плохо.
То есть, если проанализировать: один выбор, сделанный мной 7 лет назад, а также ряд шагов, которые позволили прийти к той точке, в которой я сейчас. Когда не голодным взглядом смотришь на жизнь других, а сам можешь в какой-то мере планировать результат.
То есть, по сути, выбор сводился к тому: остаться на текущем уровне и быть в безопасности или попробовать что-то новое и, возможно, провалиться.
Но знай - через 5-7 лет ты всё равно будешь на 5-7 лет старше.
Вопрос только: с какими навыками?
В своём рилс Даниил Бобров автор тг канала https://t.me/bobrov_frontend сказал, что нет лучшего времени, чем сейчас, делать то, что запланировал. И знаете, я с этим полностью согласен.
Есть ещё несколько моментов, которые я осмыслил, пока был в отпуске. А время подумать у меня там было))
Но о них — в следующих постах.
——————————-
📱 TG-сообщество
📱 Обучение
📱 Отзывы
Вернулся из отпуска. Бали, Катар, куча впечатлений.
Те, кто следят за мной в запрещенограмме, думаю, в курсе.
Но главный вопрос, который я задавал себе в отпуске:
"Каким я был 7 лет назад? И где бы я был сейчас, если бы не сделал выбор тогда?"
Мог ли я представить, что смогу видеть другие культуры, общаться с людьми на другом языке, видеть всё своими глазами, а не по телевизору?
Когда я жил в Омске, я всегда мечтал уехать за границу. Там я видел финансовую стабильность и безопасность, хотел быть просто в тихом месте, чтобы меня никто не трогал. Меня не сильно интересовали какие-то вызовы, хотелось хотя бы просто покоя.
Сейчас, вопреки непопулярному мнению, я вижу, что в России гораздо больше возможностей и комфорта, чем во многих странах. Я понял, что богатые люди живут не на Бали - богатые люди живут в Москве и других крупных городах, потому что уровень доходов в какой-то мере определяется уровнем расходов.
А на Бали ездят отдыхать.
Да, на Бали может быть интересно две-три недели, но, по большому счёту, там делать нечего. Есть в кафе, кататься на сёрфе, плавать в бассейне - надоест довольно быстро.
А обычная жизнь - это ещё походы к врачу, бытовая санитария, чистота вокруг, общение, сервис, да даже тупо влажность, от которой плесневеет всё вокруг, вечно влажное бельё и кровати.
Таких моментов очень много.
И туда едут жить на ПМЖ, по моему мнению, те, кто не может себе позволить жить в РФ комфортно, ну и единицы, потому что им действительно нравится. Но в большинстве случаев продаётся это всё под очень красивой мотивирующей картинкой. (Не рассматриваю тех, кто уехал по каким-то политическим соображениям).
С каждым своим путешествием я всё больше убеждаюсь, что мне нравится жить в РФ, а вот ездить отдыхать за границу - чтобы видеть, как живут другие. Потому что путешествия, особенно если они больше двух недель, убирают розовые очки.
И понимаешь: не везде хорошо, не только у нас плохо.
То есть, если проанализировать: один выбор, сделанный мной 7 лет назад, а также ряд шагов, которые позволили прийти к той точке, в которой я сейчас. Когда не голодным взглядом смотришь на жизнь других, а сам можешь в какой-то мере планировать результат.
То есть, по сути, выбор сводился к тому: остаться на текущем уровне и быть в безопасности или попробовать что-то новое и, возможно, провалиться.
Но знай - через 5-7 лет ты всё равно будешь на 5-7 лет старше.
Вопрос только: с какими навыками?
В своём рилс Даниил Бобров автор тг канала https://t.me/bobrov_frontend сказал, что нет лучшего времени, чем сейчас, делать то, что запланировал. И знаете, я с этим полностью согласен.
Есть ещё несколько моментов, которые я осмыслил, пока был в отпуске. А время подумать у меня там было))
Но о них — в следующих постах.
——————————-
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25👍5❤3🤔1💯1
This media is not supported in your browser
VIEW IN TELEGRAM
⛔️ КАСТОВАЯ СИСТЕМА
На одной из первых экскурсий у нас была прекрасная женщина Lilis.
Ей под 40 лет, но выглядит она много старше и очень неплохо разговаривает на русском.
Работает гидом за небольшие деньги, а выучила русский, чтобы расширить возможности для работы, хотя русских туристов там не так и много.
Мы спрашивали её о жизни на Бали. Узнали, например, что у них много детей, и они просто дают им имена по порядковому номеру.
Putu - первый
Kadek (или Kade) - второй
Coma - третий
И так далее.
Дальше она рассказала, что у них кастовая система.
То есть если отец был врачом, то и сын должен быть врачом, если отец водитель, то и сын водитель.
Я спросил: "А как быть с другой профессией, например, если я хочу быть программистом?"
Она даже не поняла вопрос, их жизненный флоу вообще не предполагает, что можно заняться чем-то другим, ответ был всегда стандартный: нельзя при жизни изменить касту.
То есть девушка ещё может, если выйдет замуж за мужчину высшей касты, а парню - всё, труба.
Многие живут так, что после школы идут массировать ноги иностранцам, и вместо выходных они просто меняют один салон на другой. И так повсеместно. Когда мы разговаривали с девушками-массажистками 19-ти лет, про их планы после школы, то это просто сводилось к тому, чтобы выйти замуж и работать.
То есть какой там техникум или уж тем более вуз - у них даже таких мыслей в принципе нет.
И как живём мы? Где некоторые даже бесплатно не хотят учиться. Где ты можешь выбирать судьбу сам, у тебя нет внешних ограничений в виде даже не общества, а государства, которое тебе просто в зависимости от рождения в той или иной касте режет возможности.
И мы ведь этим даже не пользуемся, многие хают государство, город, родителей, да всё что угодно, только не себя, свой страх или лень. Вместо того чтобы попытаться взять от жизни то, что она может дать.
Так вот, Lilis не может изменить свою жизнь - система не даёт.
Вы можете, но не даёте себе.
Но вы не на Бали. У вас есть выбор.
Вопрос: воспользуетесь ли вы им?
P.S. Следующий пост - про то, что я понял про английский на Бали.
И это изменило моё понимание того, как нужно учиться)
——————————-
📱 TG-сообщество
📱 Обучение
📱 Отзывы
На одной из первых экскурсий у нас была прекрасная женщина Lilis.
Ей под 40 лет, но выглядит она много старше и очень неплохо разговаривает на русском.
Работает гидом за небольшие деньги, а выучила русский, чтобы расширить возможности для работы, хотя русских туристов там не так и много.
Мы спрашивали её о жизни на Бали. Узнали, например, что у них много детей, и они просто дают им имена по порядковому номеру.
Putu - первый
Kadek (или Kade) - второй
Coma - третий
И так далее.
Дальше она рассказала, что у них кастовая система.
То есть если отец был врачом, то и сын должен быть врачом, если отец водитель, то и сын водитель.
Я спросил: "А как быть с другой профессией, например, если я хочу быть программистом?"
Она даже не поняла вопрос, их жизненный флоу вообще не предполагает, что можно заняться чем-то другим, ответ был всегда стандартный: нельзя при жизни изменить касту.
То есть девушка ещё может, если выйдет замуж за мужчину высшей касты, а парню - всё, труба.
Многие живут так, что после школы идут массировать ноги иностранцам, и вместо выходных они просто меняют один салон на другой. И так повсеместно. Когда мы разговаривали с девушками-массажистками 19-ти лет, про их планы после школы, то это просто сводилось к тому, чтобы выйти замуж и работать.
То есть какой там техникум или уж тем более вуз - у них даже таких мыслей в принципе нет.
И как живём мы? Где некоторые даже бесплатно не хотят учиться. Где ты можешь выбирать судьбу сам, у тебя нет внешних ограничений в виде даже не общества, а государства, которое тебе просто в зависимости от рождения в той или иной касте режет возможности.
И мы ведь этим даже не пользуемся, многие хают государство, город, родителей, да всё что угодно, только не себя, свой страх или лень. Вместо того чтобы попытаться взять от жизни то, что она может дать.
Так вот, Lilis не может изменить свою жизнь - система не даёт.
Вы можете, но не даёте себе.
Но вы не на Бали. У вас есть выбор.
Вопрос: воспользуетесь ли вы им?
P.S. Следующий пост - про то, что я понял про английский на Бали.
И это изменило моё понимание того, как нужно учиться)
——————————-
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19❤7👍3
Media is too big
VIEW IN TELEGRAM
"АНГЛИЙСКИЙ - ЭТО НЕ УЧЁБА. ЭТО ПРЕОДОЛЕНИЕ СТРАХА"
На Бали я говорил по-английски каждый день.
В кафе, на рынке, с таксистами, с гидом.
Мой английский далёк от идеала.
Я путаю времена. Забываю слова. Строю предложения, как индус код пишет 😅
Но знаете что? Меня понимали.
В начале отпуска была забавная ситуация: один австралиец услышал мой номер комнаты на баре.
И пошутил, что типа сейчас будет оформлять всю выпивку на баре на мою комнату. Я ничего не понял, жена мне перевела, я поулыбался.
В течение недели в Куте мы с ним пересекались, я просто махал ему рукой, типа привет.
В последний день я пошёл на бар, и там он сидел со своим другом. Опять мы пересеклись, я махнул рукой, он начал смеяться и рассказывать своему кенту, как он пошутил.
Потом я шёл из душа, и они крикнули: "Russian, come here!"
Я подумал: "Хера ли они там выделываются?" - и пошёл.
Дальше я сказал несколько своих коронных фраз: "май инглишь из бэд" и "ай спик инглишь э литл бит", "ай андерстенд иф ю спик слоу".
И всё пошло-поехало. Через 10 минут меня уже угощали пивом, говорили, что у меня крутой английский, потому что они по-русски вообще ничего не могут сказать. Относились с пониманием, где не хватало моих мозгов - общались жестами. В общем, поржали, выпили за дружбу между народами и, конечно же, "Za zdorovie!"
Когда я пытался пошутить, что я сгорел на солнце как "fried chicken", меня поняли, поржали, но поправили, что правильно говорить "roasted chicken". Таким образом я запоминал и понимал, как "правильно" говорить от носителей языка.
И вот что я понял.
В автоматизации тестирования - та же история.
Некоторые знают Python на базовом уровне, но просто боятся начать писать код самостоятельно или пользуются только LLM - считай, переводчиком. Это здорово, но мешает заговорить самому.
Кто-то уже хороший инженер, умеет писать код.
Но применяет знания не совсем правильно, и им нужен "носитель языка", который подскажет, как сделать так, чтобы всё выглядело круто.
Точно так же, как никто не смеялся над моим акцентом, а просто пытались меня понять и помогали сказать правильно - так и я помогаю моим студентам.
——————————-
📱 TG-сообщество
📱 Обучение
📱 Отзывы
На Бали я говорил по-английски каждый день.
В кафе, на рынке, с таксистами, с гидом.
Мой английский далёк от идеала.
Я путаю времена. Забываю слова. Строю предложения, как индус код пишет 😅
Но знаете что? Меня понимали.
В начале отпуска была забавная ситуация: один австралиец услышал мой номер комнаты на баре.
И пошутил, что типа сейчас будет оформлять всю выпивку на баре на мою комнату. Я ничего не понял, жена мне перевела, я поулыбался.
В течение недели в Куте мы с ним пересекались, я просто махал ему рукой, типа привет.
В последний день я пошёл на бар, и там он сидел со своим другом. Опять мы пересеклись, я махнул рукой, он начал смеяться и рассказывать своему кенту, как он пошутил.
Потом я шёл из душа, и они крикнули: "Russian, come here!"
Я подумал: "Хера ли они там выделываются?" - и пошёл.
Дальше я сказал несколько своих коронных фраз: "май инглишь из бэд" и "ай спик инглишь э литл бит", "ай андерстенд иф ю спик слоу".
И всё пошло-поехало. Через 10 минут меня уже угощали пивом, говорили, что у меня крутой английский, потому что они по-русски вообще ничего не могут сказать. Относились с пониманием, где не хватало моих мозгов - общались жестами. В общем, поржали, выпили за дружбу между народами и, конечно же, "Za zdorovie!"
Когда я пытался пошутить, что я сгорел на солнце как "fried chicken", меня поняли, поржали, но поправили, что правильно говорить "roasted chicken". Таким образом я запоминал и понимал, как "правильно" говорить от носителей языка.
И вот что я понял.
В автоматизации тестирования - та же история.
Некоторые знают Python на базовом уровне, но просто боятся начать писать код самостоятельно или пользуются только LLM - считай, переводчиком. Это здорово, но мешает заговорить самому.
Кто-то уже хороший инженер, умеет писать код.
Но применяет знания не совсем правильно, и им нужен "носитель языка", который подскажет, как сделать так, чтобы всё выглядело круто.
Точно так же, как никто не смеялся над моим акцентом, а просто пытались меня понять и помогали сказать правильно - так и я помогаю моим студентам.
——————————-
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍9❤3
This media is not supported in your browser
VIEW IN TELEGRAM
Настало время напомнить.
Раньше у меня был очень крутой тренинг "Автоматизация тестирования REST & gRPC API".
Он собрал очень большое количество положительных отзывов, был актуален для своего времени. Там было довольно много тем, но не хватало деталей. Тем не менее он подготовил много крутых экспертов.
После этого я решил его усилить: убрать темы, которые были даны поверхностно и требовали более детального изучения, и уделить больше времени одной фундаментальной теме - фреймворку для REST API.
На его архитектуре и подходах может строиться база любого API фреймворка независимо от типа API.
Так появились тренинги "REST API Advanced" и "REST API Professional".
REST API Advanced
🗓 Неделя 1: Введение в автоматизацию тестирования
10 уроков. Повторим основы Python, научимся генерировать простой код, рассмотрим базу API тестирования, напишем первые тесты и настроим автоматический прогон тестов в GitHub.
🗓 Неделя 2: Архитектура и работа с данными
4 урока. Научимся использовать паттерны проектирования для решения наших задач. А также научимся подготавливать тестовые данные и рассмотрим различные виды фикстур.
🗓 Неделя 3: Проверки
7 уроков. Рассмотрим все возможные виды проверок для API, научимся валидировать структуру данных и значения. Мягкие проверки, функции-чекеры, менеджеры контекста. Будем внедрять так, чтобы не засорять код и делать его более читаемым и поддерживаемым.
🗓 Неделя 4: Работа с конфигурациями и репортинг
7 уроков. Завершающая неделя: научимся собирать Docker образы, настраивать пайплайны, дорабатывать сторонние библиотеки, собирать coverage покрытия сервиса автотестами, строить красивые и информативные отчёты. Научимся отправлять отчёты о прохождении тестов в Telegram и перепишем пайплайн для GitLab CI.
Вы создадите production-ready фреймворк с архитектурой уровня энтерпрайз систем. Сможете с нуля настроить CI/CD pipeline с метриками и уведомлениями. Одного моего друга пригласили на Senior позицию, после того как он показал свой проект и рассказал, что и как он сделал.
REST API Professional
Результат: Вы научитесь создавать инструменты, которые делают работу за целые команды.
Пока другие пишут код руками, вы генерируете готовые решения одной командой. Компании будут переманивать вас не за навыки, а за инструменты, которые вы умеете создавать.
Модуль 1: Поговорим, что такое платформа и для чего она нужна
Модуль 2: Научимся управлять зависимостями как профессионалы. Перепишем код, используя асинхронную парадигму, и рассмотрим, для каких задач она применима.
Модуль 3: Научимся поддерживать стандарты и качество кода, разработаем общий пайплайн для контроля качества кода всех проектов, будем использовать линтеры и форматтеры.
Модуль 4: Рассмотрим различные инструменты для генерации структуры проекта и кода. Научимся собирать свои библиотеки и дорабатывать опенсорс инструменты, выдавая стабильный результат в отличие от использования ИИ.
Модуль 5: Соберём CLI инструмент, который генерирует всё: проект, клиенты, тесты, фикстуры.
Поток стартует уже в понедельник, кто откладывал, лучше не откладывать, это последний поток в этом году. 🚀
——————————-
📱 TG-сообщество
📱 Обучение
📱 Отзывы
Раньше у меня был очень крутой тренинг "Автоматизация тестирования REST & gRPC API".
Он собрал очень большое количество положительных отзывов, был актуален для своего времени. Там было довольно много тем, но не хватало деталей. Тем не менее он подготовил много крутых экспертов.
После этого я решил его усилить: убрать темы, которые были даны поверхностно и требовали более детального изучения, и уделить больше времени одной фундаментальной теме - фреймворку для REST API.
На его архитектуре и подходах может строиться база любого API фреймворка независимо от типа API.
Так появились тренинги "REST API Advanced" и "REST API Professional".
REST API Advanced
🗓 Неделя 1: Введение в автоматизацию тестирования
10 уроков. Повторим основы Python, научимся генерировать простой код, рассмотрим базу API тестирования, напишем первые тесты и настроим автоматический прогон тестов в GitHub.
🗓 Неделя 2: Архитектура и работа с данными
4 урока. Научимся использовать паттерны проектирования для решения наших задач. А также научимся подготавливать тестовые данные и рассмотрим различные виды фикстур.
🗓 Неделя 3: Проверки
7 уроков. Рассмотрим все возможные виды проверок для API, научимся валидировать структуру данных и значения. Мягкие проверки, функции-чекеры, менеджеры контекста. Будем внедрять так, чтобы не засорять код и делать его более читаемым и поддерживаемым.
🗓 Неделя 4: Работа с конфигурациями и репортинг
7 уроков. Завершающая неделя: научимся собирать Docker образы, настраивать пайплайны, дорабатывать сторонние библиотеки, собирать coverage покрытия сервиса автотестами, строить красивые и информативные отчёты. Научимся отправлять отчёты о прохождении тестов в Telegram и перепишем пайплайн для GitLab CI.
Вы создадите production-ready фреймворк с архитектурой уровня энтерпрайз систем. Сможете с нуля настроить CI/CD pipeline с метриками и уведомлениями. Одного моего друга пригласили на Senior позицию, после того как он показал свой проект и рассказал, что и как он сделал.
REST API Professional
Результат: Вы научитесь создавать инструменты, которые делают работу за целые команды.
Пока другие пишут код руками, вы генерируете готовые решения одной командой. Компании будут переманивать вас не за навыки, а за инструменты, которые вы умеете создавать.
Модуль 1: Поговорим, что такое платформа и для чего она нужна
Модуль 2: Научимся управлять зависимостями как профессионалы. Перепишем код, используя асинхронную парадигму, и рассмотрим, для каких задач она применима.
Модуль 3: Научимся поддерживать стандарты и качество кода, разработаем общий пайплайн для контроля качества кода всех проектов, будем использовать линтеры и форматтеры.
Модуль 4: Рассмотрим различные инструменты для генерации структуры проекта и кода. Научимся собирать свои библиотеки и дорабатывать опенсорс инструменты, выдавая стабильный результат в отличие от использования ИИ.
Модуль 5: Соберём CLI инструмент, который генерирует всё: проект, клиенты, тесты, фикстуры.
Поток стартует уже в понедельник, кто откладывал, лучше не откладывать, это последний поток в этом году. 🚀
——————————-
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7❤3
This media is not supported in your browser
VIEW IN TELEGRAM
Привет)
Регистрация уже открыта. Готовы стать архитектором фреймворков?
⏰ Через 2 дня стартует новый поток REST API Advanced и REST API Professional
Когда можно записаться и когда следующий поток?
Отвечаю: записаться можно до понедельника, 23:00 МСК
следующий поток: в ФЕВРАЛЕ!
Что вас ждёт на курсе REST API Advanced:
🎯 5 недель интенсивного обучения
• 28 уроков до production пайплайнов
• Живая обратная связь по каждому домашнему заданию
🎯 Production-ready проект в портфолио
• Фреймворк с паттернами проектирования
• Docker контейнеризация + CI/CD настройка
• Coverage метрики + Telegram уведомления
• GitLab CI пайплайн
🎯 Персональное сопровождение
• Проверяю каждое ДЗ лично
• Консультации в чате курса 24/7
• Хорошо проявившим себя студентам и освоившим программу в срок, рекомендация в OZONTECH.
💎 Для амбициозных: После Advanced можете пройти REST API Professional - научитесь создавать CLI инструменты для генерации проектов одной командой. Это уже уровень "архитектора платформы".
⚡️ Ограничения:
• Максимум 5 участников (качество > количество) .
‼️ Осталось всего 2 места. ‼️
• Для участия нужны базовые знания Python
Цель простая: за 2 месяца сделать из вас того самого QA, которого переманивают в другие компании.
Максимальный оффер одного из моих выпускников 460К.
И только положительные отзывы от моего обучения.
Готовы присоединиться к экспертам?
Регистрация уже открыта. Готовы стать архитектором фреймворков?
⏰ Через 2 дня стартует новый поток REST API Advanced и REST API Professional
Когда можно записаться и когда следующий поток?
Отвечаю: записаться можно до понедельника, 23:00 МСК
следующий поток: в ФЕВРАЛЕ!
Что вас ждёт на курсе REST API Advanced:
🎯 5 недель интенсивного обучения
• 28 уроков до production пайплайнов
• Живая обратная связь по каждому домашнему заданию
🎯 Production-ready проект в портфолио
• Фреймворк с паттернами проектирования
• Docker контейнеризация + CI/CD настройка
• Coverage метрики + Telegram уведомления
• GitLab CI пайплайн
🎯 Персональное сопровождение
• Проверяю каждое ДЗ лично
• Консультации в чате курса 24/7
• Хорошо проявившим себя студентам и освоившим программу в срок, рекомендация в OZONTECH.
💎 Для амбициозных: После Advanced можете пройти REST API Professional - научитесь создавать CLI инструменты для генерации проектов одной командой. Это уже уровень "архитектора платформы".
⚡️ Ограничения:
• Максимум 5 участников (качество > количество) .
• Для участия нужны базовые знания Python
Цель простая: за 2 месяца сделать из вас того самого QA, которого переманивают в другие компании.
Максимальный оффер одного из моих выпускников 460К.
И только положительные отзывы от моего обучения.
Готовы присоединиться к экспертам?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4❤3
Столько напрограммировал один из моих студентов на одном из своих проектов, с использованием моего подхода к построению фрейморка.
Хороший результат, который подтверждает, что подход работает и приносит свои плоды)
Но, а сейчас уже набралась новая группа и им еще многое предстоит сделать.
Кто не успел - следите за анонсами
✅ НАБОР ЗАКРЫТ
Несколько человек взяли полный пакет REST API Advanced + REST API Professional
5 мест заняли те, кто не откладывал решение на потом.
Для тех, кто не успел:
Я понимаю, что кто-то колебался, кто-то ждал "лучшего момента".
Следующий момент будет в феврале.
Что будет дальше:
🎯 Следующие 2 месяца - интенсивная работа с группой
🎯 44 урока Advanced + Professional, сотни часов практики, персональная обратная связь
🎯 К концу октября у меня будет ещё несколько экспертов уровня SDET
Анонс следующего потока будет только здесь.
Обязательно подпишитесь на уведомления канала 🔔
——————————-
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7
На фото немного невыспавшийся 🤣
В LinkedIn встретил интересный пост в стиле "опыт, который у меня есть, но который я не пишу в резюме".
Так вот, прежде чем я стал разработчиком, я успел поработать:
С 11 до 23 лет:
- был грузчиком-экспедитором, таскал коробки и сторожил товар, чтобы его не украли во время выгрузки в магазин
- красил газовые трубы, когда у нас на районе проводили газ в частный сектор
- работал в порту разнорабочим: мыли топливные баки, красили каюты, убирали мусор и прочая работа
- работал на стройке — делали новую крышу Омскому музыкальному театру. Помню, у меня тогда еще успели взять интервью в новостях, где я говорил: "Буду друзьям показывать — видели крышу музыкального театра? Я ремонтировал!" 😄
- был проводником пассажирского поезда, ездил по маршрутам Москва—Омск—Пермь—Тюмень, месяц безвылазно в вагоне
- работал консультантом по винно-водочной продукции в магазине
- один день за 500 рублей был дегустатором пива "Клинское" 🍺
- работал сборщиком на производстве пластиковых окон
- был агентом по согласованию подключения интернета в дома
- был специалистом технической поддержки в интернет-провайдере
С 23 до 35 лет:
- инженером-конструктором на заводе
- тестировщиком
- сейчас разработчик
Очень интересный путь, конечно, у меня был — где только не успел поработать.
Если честно иногда немного завидую людям, которые сразу после университета попали в IT. Но ни капли не жалею о том, что работаю с малых лет. Знаю многие стараются уберечь своих детей, сделать их жизнь лучше, чтобы им не пришлось столько работать сколько их мамки и папки. У меня конечно пока детей нет, но я почему-то считаю работу одним из лучших способов воспитания ответственности и отношения к деньгам.
А что вы думаете поделитесь своим опытом?)
Где успели поработать до IT-шки?)
——————————-
📱 TG-сообщество
📱 Обучение
📱 Отзывы
В LinkedIn встретил интересный пост в стиле "опыт, который у меня есть, но который я не пишу в резюме".
Так вот, прежде чем я стал разработчиком, я успел поработать:
С 11 до 23 лет:
- был грузчиком-экспедитором, таскал коробки и сторожил товар, чтобы его не украли во время выгрузки в магазин
- красил газовые трубы, когда у нас на районе проводили газ в частный сектор
- работал в порту разнорабочим: мыли топливные баки, красили каюты, убирали мусор и прочая работа
- работал на стройке — делали новую крышу Омскому музыкальному театру. Помню, у меня тогда еще успели взять интервью в новостях, где я говорил: "Буду друзьям показывать — видели крышу музыкального театра? Я ремонтировал!" 😄
- был проводником пассажирского поезда, ездил по маршрутам Москва—Омск—Пермь—Тюмень, месяц безвылазно в вагоне
- работал консультантом по винно-водочной продукции в магазине
- один день за 500 рублей был дегустатором пива "Клинское" 🍺
- работал сборщиком на производстве пластиковых окон
- был агентом по согласованию подключения интернета в дома
- был специалистом технической поддержки в интернет-провайдере
С 23 до 35 лет:
- инженером-конструктором на заводе
- тестировщиком
- сейчас разработчик
Очень интересный путь, конечно, у меня был — где только не успел поработать.
Если честно иногда немного завидую людям, которые сразу после университета попали в IT. Но ни капли не жалею о том, что работаю с малых лет. Знаю многие стараются уберечь своих детей, сделать их жизнь лучше, чтобы им не пришлось столько работать сколько их мамки и папки. У меня конечно пока детей нет, но я почему-то считаю работу одним из лучших способов воспитания ответственности и отношения к деньгам.
А что вы думаете поделитесь своим опытом?)
Где успели поработать до IT-шки?)
——————————-
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14💯3
QA.GURU проводят финальный вебинар для продвинутых QA-инженеров на Python ⬇️
🎙️ В четверг, 23 октября, в 20:00 по МСК.
На занятии:
– создадите API с нуля;
– разберёте FastAPI, контейнеризацию и пайплайны.
📎 Не упустите шанс прокачаться до уровня Senior+ в рамках последнего потока курса Python Advanced:
Среди преподавателей опытные автоматизаторы —
➡️ Вебинар бесплатный, регистрация обязательна!
На занятии:
– создадите API с нуля;
– разберёте FastAPI, контейнеризацию и пайплайны.
Среди преподавателей опытные автоматизаторы —
Станислав Васенков, Артём Ерошенко, Сергей Хомутинин, Дмитрий Тучс, Александр Котляр, Владислав Зингер, Валерий Меньшиков, Михаил Рубанов.
➡️ Вебинар бесплатный, регистрация обязательна!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🔥2
Выходные в коде 💻
Каждый расслабляется по-своему. Я провел выходные за любимым делом — доработкой своих open-source проектов.
Что сделано:
✅ Закрыл issue в библиотеке для генерации клиентов по Swagger-спеке
Теперь можно:
• Указывать кастомные пути для генерации кода
• Подключать свои шаблоны
• Гибко настраивать под нужды проекта
✅ Написал новые автотесты для Awesome Tests Project
Это мой демо-проект, где я собираю примеры тестирования всех современных технологий: REST API, gRPC, PostgreSQL, Redis, Kafka. Пока там только REST))
Полезные ссылки:
🔗 Библиотека для генерации REST клиентов
🔗 Библиотека для получения proto файлов генерации gRPC клиентов
🔗 Awesome Tests Project
🔗 Мой GitHub
На моем GitHub вы найдете:
• Готовые примеры тестов
• Библиотеки для генерации клиентов
• Масштабируемую архитектуру для интеграционного тестирования
Да и вообще много можно накопать)
⭐️ Если еще не поставили звездочку — самое время!
——————————-
📱 TG-сообщество
📱 Обучение
📱 Отзывы
Каждый расслабляется по-своему. Я провел выходные за любимым делом — доработкой своих open-source проектов.
Что сделано:
✅ Закрыл issue в библиотеке для генерации клиентов по Swagger-спеке
Теперь можно:
• Указывать кастомные пути для генерации кода
• Подключать свои шаблоны
• Гибко настраивать под нужды проекта
✅ Написал новые автотесты для Awesome Tests Project
Это мой демо-проект, где я собираю примеры тестирования всех современных технологий: REST API, gRPC, PostgreSQL, Redis, Kafka. Пока там только REST))
Полезные ссылки:
🔗 Библиотека для генерации REST клиентов
🔗 Библиотека для получения proto файлов генерации gRPC клиентов
🔗 Awesome Tests Project
🔗 Мой GitHub
На моем GitHub вы найдете:
• Готовые примеры тестов
• Библиотеки для генерации клиентов
• Масштабируемую архитектуру для интеграционного тестирования
Да и вообще много можно накопать)
⭐️ Если еще не поставили звездочку — самое время!
——————————-
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - ValeriyMenshikov/restcodegen: RestCodeGen is a powerful tool for automatically generating Python client libraries from…
RestCodeGen is a powerful tool for automatically generating Python client libraries from OpenAPI 3 specifications. - ValeriyMenshikov/restcodegen
🔥11👍4😁1🫡1
Что делать, если авторизационный токен в тестах протухает очень быстро?
На одном из вебинаров мне задали такой вопрос. Наверняка есть множество вариантов решения этой проблемы, я поделюсь одним из них — не самым технически сложным и вполне понятным для поста в Telegram.
Постановка задачи:
Представим, что у нас есть HTTP-клиент, в котором требуется авторизация:
Нам необходимо сделать так, чтобы при отправке запроса send_request всегда использовался актуальный токен.
Решение:
Создадим клиент, который отвечает за получение актуального токена.
Он запускает фоновый поток для обновления токена и имеет публичный метод для получения актуального значения:
Теперь доработаем наш HTTP-клиент:
Чтобы проверить работу, подготовим простой тест:
Результат:
Итого:
Мы создали клиент, который на протяжении всей тестовой сессии актуализирует токен в отдельном потоке, не блокируя выполнение тестов. Доработали HTTP-клиент так, чтобы перед запросом он получал актуальный токен. В итоге наши тесты не развалятся, если токен протухнет в процессе их выполнения.
Ставь реакцию если понравился пост)
——————————-
📱 TG-сообщество
📱 Обучение
📱 Отзывы
На одном из вебинаров мне задали такой вопрос. Наверняка есть множество вариантов решения этой проблемы, я поделюсь одним из них — не самым технически сложным и вполне понятным для поста в Telegram.
Постановка задачи:
Представим, что у нас есть HTTP-клиент, в котором требуется авторизация:
class HttpClient:
def __init__(self): ...
def send_request(self): ...
Нам необходимо сделать так, чтобы при отправке запроса send_request всегда использовался актуальный токен.
Решение:
Создадим клиент, который отвечает за получение актуального токена.
Он запускает фоновый поток для обновления токена и имеет публичный метод для получения актуального значения:
class AuthClient:
def __init__(self):
self._thread = None
self._future = Future()
self._token = None
threading.Thread(target=self._run, daemon=True).start()
def _run(self):
while True:
# Имитируем получение актуального токена,
# который меняется каждую секунду
self._token = uuid.uuid4().hex
print(f"Updating token, {self._token}")
if not self._future.done():
self._future.set_result(self._token)
time.sleep(1)
def get_token(self, timeout: int = 5):
if not self._future.done():
self._future.result(timeout=timeout)
return self._token
Теперь доработаем наш HTTP-клиент:
class HttpClient:
def __init__(self, auth: AuthClient):
self._auth = auth
def send_request(self):
headers = {"Authorization": f"Bearer {self._auth.get_token()}"}
print(f"Sending request with headers: {headers}")
Чтобы проверить работу, подготовим простой тест:
@pytest.fixture(scope="session")
def auth_client():
return AuthClient()
@pytest.fixture(scope="session")
def client(auth_client):
return HttpClient(auth_client)
def test_update_token(client: HttpClient):
for _ in range(5):
# Каждую секунду обновляется токен
# Каждые две секунды отправляем запрос
client.send_request()
time.sleep(2)
Результат:
test_update_token
Updating token, bab545305cd2489bac157a4e902f70ad
Sending request with headers: {'Authorization': 'Bearer bab545305cd2489bac157a4e902f70ad'}
Updating token, a2e00fa7a37c4717b585e448fc74c336
Sending request with headers: {'Authorization': 'Bearer a2e00fa7a37c4717b585e448fc74c336'}
...
Итого:
Мы создали клиент, который на протяжении всей тестовой сессии актуализирует токен в отдельном потоке, не блокируя выполнение тестов. Доработали HTTP-клиент так, чтобы перед запросом он получал актуальный токен. В итоге наши тесты не развалятся, если токен протухнет в процессе их выполнения.
Ставь реакцию если понравился пост)
——————————-
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23👍2
Как сделать удобно расширяемый http клиент?
Самый частый паттерн при написании логгирующей http обертки в API автотестах:
Потом добавляем allure степы:
Метод разрастается, мы опять вносим изменения в класс.
Дальше захотим добавить coverage, метрики - опять изменения.
Может быть есть способ не изменяя класс?
Решение 1: Встроенные hooks в httpx
httpx уже поддерживает event hooks.
Можем передать функции, которые вызовутся до/после запроса.
Решение 2: Своя реализация
А что если захотим свой клиент?
Систему хуков можно внедрить в любой клиент - к БД или другому ресурсу.
Рассмотрим на примере httpx, как будто там нет хуков:
Создаем колбеки:
Регистрируем и используем:
Результат:
Что получается?
Мы один раз описали интерфейс для регистрации хуков, и теперь можем добавлять сколько угодно логики, не внося изменений в класс. Код становится более стабильным и расширяемым.
——————————-
📱 TG-сообщество
📱 Обучение
📱 Отзывы
Самый частый паттерн при написании логгирующей http обертки в API автотестах:
import httpx
class LogClient(httpx.Client):
def request(self, *args, **kwargs):
print(args, kwargs)
response = super().request(*args, **kwargs)
print(response.content)
return response
Потом добавляем allure степы:
class LogClient(httpx.Client):
def request(self, *args, **kwargs):
with allure.step(f"Request {args}"):
print(args, kwargs)
allure.attach(request, name="Request")
response = super().request(*args, **kwargs)
allure.attach(response, name="Response")
return response
Метод разрастается, мы опять вносим изменения в класс.
Дальше захотим добавить coverage, метрики - опять изменения.
Может быть есть способ не изменяя класс?
Решение 1: Встроенные hooks в httpx
client = httpx.Client(
event_hooks={
'request': [log_request],
'response': [log_response]
}
)
httpx уже поддерживает event hooks.
Можем передать функции, которые вызовутся до/после запроса.
Решение 2: Своя реализация
А что если захотим свой клиент?
Систему хуков можно внедрить в любой клиент - к БД или другому ресурсу.
Рассмотрим на примере httpx, как будто там нет хуков:
from typing import Callable
import httpx
from httpx import Request, Response
class Client:
def __init__(self):
self._on_request_callbacks = []
self._on_response_callbacks = []
self._client = httpx.Client()
def add_request_hook(
self, callback: Callable[[Request], None]
) -> None:
self._on_request_callbacks.append(callback)
def add_response_hook(
self, callback: Callable[[Response], None]
) -> None:
self._on_response_callbacks.append(callback)
def _run_hooks(self, value, hooks):
for hook in hooks:
try:
hook(value)
except Exception as e:
print(f"Hook error: {e}")
def request(self, method, url, **kwargs) -> Response:
request = self._client.build_request(
method=method, url=url, **kwargs
)
self._run_hooks(request, self._on_request_callbacks)
response = self._client.send(request)
self._run_hooks(response, self._on_response_callbacks)
return response
Создаем колбеки:
def log_req(request):
print(f"→ {request.method} {request.url}")
def log_resp(response):
print(f"← {response.status_code}")
def allure_req(request):
allure.attach(str(request), name="Request")
def allure_resp(response):
allure.attach(response.text, name="Response")
Регистрируем и используем:
client = Client()
client.add_request_hook(log_req)
client.add_request_hook(allure_req)
client.add_response_hook(log_resp)
client.add_response_hook(allure_resp)
client.request("GET", "https://httpbin.org/get")
Результат:
→ GET https://httpbin.org/get
← 200
Что получается?
Мы один раз описали интерфейс для регистрации хуков, и теперь можем добавлять сколько угодно логики, не внося изменений в класс. Код становится более стабильным и расширяемым.
——————————-
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11