Latest posts

Senior Tester | Евгений Окулик
9 Sept, 13:30

Senior Tester | Евгений Окулик
9 Sept, 09:38
Писать код - стремная штука.Нужно всегда иметь в виду, что что-то пойдет не так, как ты задумал. Шаг в сторону - и твой код поломал данные или положил прод. 💥 И тогда тебе звонят среди ночи, чтобы ты срочно всё починилУжасная история, но она не про автотестеров. У нашего кода нет конечного пользователя, который нажмет давно забытую кнопку. Наш пользователь - это отчет о прогоне. Доступ в базу у нас, в основном, только на чтение. Да, можно и чтением положить окружение. Но не прод. Ведь никто в здравом уме не будет запускать автотесты на проде. Там обычно и без этого проблем хватаетПолучается очень удобная ситуация - мы пишем код, мы видим как он работает и видим пользу, которую он приносит. Но мы застрахованы от ночных разговоров с боссом и от факапов, которые могут стоить миллионы Нам всё еще нельзя ляцкать абы что под видом хорошей работы. И нам


Senior Tester | Евгений Окулик
7 Sept, 10:27
В конце прошлой недели возился с мобильным тестом на работе. И он в очередной раз выбесил меня долгим поиском каждого элемента. Хотя элемент - вот, перед носом и никуда не пропадал. Это поведение наших тестов меня давно напрягало, но ребята говорили что-то, типа "ну вот так работают таймауты в мобилках" 🤷♂️Но тест, с которым я возился, и сам был не из легких, а тут еще эти бесячие ожидания. Я заподозрил, что всё-таки что-то накривокожено. Раскопал весь код - нет, всё ок, таймаут должен срабатывать только если элемента нужно дождатьсяИ это родило окно для экспериментов. В итоге, я выяснил, что в UIAutomator (часть экосистемы Appium) есть дефолтное ожидание - пока система придет в спокойное состояние (waitForIdleTimeout). То есть каждый раз перед тем как выполнить поиск элемента, этот UIAutomator ждет пока всё успокоится: UI перестанет изменяться, доработают все фоновые запросы.


Senior Tester | Евгений Окулик
6 Sept, 14:22
Новое видео - жду ваших вопросовВыложил видео, с которым возился больше месяца: то сайт вайбкодил, то не мог добраться, чтобы доснять, то не мог до монтажа добратьсяЗа это время я уже пересел на Kilo Code и понял, что Hermes для разработки - не очень. Это как раз в какой-то степени демонстрирует как быстро всё меняется в этой сфере.Это тема, которая обязана была появиться у меня на канале и, наконец, вот онаВидео больше вводное - в нем общая информация, но она не бесполезная.❗️Как призываю там в видео, так призываю и здесь: пишите какие вопросы у вас возникают при работе с ИИ и агентами 👇YouTubeКак ИИ справится с тестами на PythonМой курс по автоматизации тестирования на Python: https://okulik.by/ ------------------------------------------------ Попробуем написать тесты с помощью ИИ агентов. В этом видео генерация кода тестов получилась полностью бесплатной. И агент справился хорошо…
Senior Tester | Евгений Окулик
3 Sept, 16:51
Туториалы не учатВы когда-нибудь учились чему-нибудь по туториалу из YouTube? Думаю, все через это проходили. Смотришь такой видео по автоматизации, - там всё настолько понятно, что просмотр видео заканчиваешь с ощущением "я научился". На радостях смотришь еще одно и еще одно.В какой-то момент настолько наполняешься мотивацией, что решаешься это всё попробовать. Открываешь редактор кода и понимаешь, что вообще не представляешь с чего начать. А сделав первые шаги, не понимаешь как разобраться почему оно не работает. Было? У меня вот точно случалосьВ этот момент мгновенно прилетает мысль "походу, это не моё - ведь там всё так просто, а я уже на первой строке застрял"Главная идея в том, что смотреть, как кто-то что-то делает и делать самому - это два разных занятия. Научиться делать можно делая. Крутая аналогия - катание на роликах. Ты можешь посмотреть сколько угодно видео о


Senior Tester | Евгений Окулик
31 Aug, 16:50
У меня для вас историяНа работе нам выдают подписку на курсор. Но подписка лимитированная - не сильно мало, но и не разгуляешься. А ведь я хочу всякие эксперименты там ставить, гипотезы проверять. Поэтому, в основном, пользовался опенсорсными агентами и дешевыми моделями, которые сам оплачивал.Настроил всё, улучшал постепенно: скиллы, агенты, хуки. В итоге, построил мультиагентный пайплайн для написания тестов. Получилось очень хорошо. И с каждой новой задачей он дообучался и становился всё лучше. 🐒 Но, при этом, часто всё равно было что поправить после него - или его попросить или самому ручками.И я всё думал, что однажды раскошелюсь на дорогие модели - они-то вообще сделают конфетку. И вспомнил про курсор, который есть и дорогие модели там уже доступны. В общем, нашел время и перенес всё в курсор. Ну ладно, не сам. 😇 Сказал курсору, чтобы сам себя настроил - показал откуда


Senior Tester | Евгений Окулик
12 Aug, 14:28
ИИ и агенты - злоЭто я про обучение. Вот держите план обучения автоматизации тестирования с ИИ и с агентами1. Забываем про существование ИИ 2. Изучаем основы Python 3. Учимся писать автотесты и оформлять их в аккуратные проекты 4. Знакомимся с тем, что вокруг: Docker, CI/CD, SQL,... 5. Начинаем использовать полученные знания 6. Вспоминаем про существование ИИ и поручаем ему мелкие задачки 7. Набираемся опыта и уверенности в своих умениях 8. Отдаем всю работу агентамЯ знаю, что все понимают это, но лень иногда берет верх. Можно иногда полениться, но надо знать меру.Когда к ИИ можно сходить: Пример: На занятии мы разбирали работу с файлами и, среди прочего, научились строить путь к файлу, относительно расположения программы, чтобы у всех пользователей программа работала одинаково. И в ДЗ одним из пунктов нужно это сделать. Вот тут нудно собирать os.path.join руками - можно отдать


Senior Tester | Евгений Окулик
24 Jul, 09:44
Аватар в самостоятельном полете уже чуть больше недели. И, в целом, справляется хорошо. Он не постит всякую банальщину. Находит интересные темы.Но и не без косяков, конечно. То, он решил, что живет в 2024 году, то решил, что умные ожидания в UI тестах - это скрытый лайфхак, а не база. А еще он косячит иногда с определением годности контента. Вот сегодняшний пост про BEHAVR - ну буллшит чистой воды 😂 Этот инструмент не перевернет мир и какой-нибудь codegen от Playwright - в разы лучшая альтернатива. Можем обсудить там в комментахНо вот читаю я его и что понимаю - это всё посты, которые я мог бы не выкладывать "от аватара", а взять и пичкать ими вас (немного причесав и убрав полную ИИшнятину). И, вполне возможно, какой-то автор, которого вы читаете, ровно так и делает.И я понял, что лучше я буду читать контент от ИИ, зная, что он от ИИ и пропуская через собственные фильтры


Senior Tester | Евгений Окулик
16 Jul, 06:42
Всем привет.Думаю, вы решили, что я забил на своего ИИ аватара. Но нет - не забил. Его версия была прикольной, но скучной. Темы для его постов придумывал я, а он только сами посты генерировал 🥱 Мне это не понравилось и я ушел в поиск вдохновения на то, чтобы придумать как сделать так, чтобы он писал что-то действительно интересноеНу и вдохновение недавно было найдено и аватар снова оживет примерно через час. Теперь он сам находит интересные темы для постов и даже для меня они будут 🎁 сюрпризом (ну, почти)Счастливого ему пути. Глядишь, что-то интересное получится. Отвечать на комменты он пока не умеет, но, как придет очередная порция вдохновения, попробую сделать и это 😉
Senior Tester | Евгений Окулик
27 May, 14:51
Как отучить ИИ писать сочиненияКогда приходится впервые прикручивать ИИ к автоматизации или к каким-то скриптам, то обнаруживаешь, что LLM очень любит писать сочинения ✍️ и с ними очень сложно работатьНо если хочешь, чтобы ИИ не просто болтал, а выдавал структурированные данные, которые твой скрипт может распарсить и использовать дальше (например, автоматически завести баг-репорт в Jira на основе лога ошибки), начинаешь выкручиваться. Пишешь в промпте: "Ответь строго в формате JSON, не пиши никакого лишнего текста, иначе я тебя уволю". Нейронка извиняется, пишет "Конечно, вот ваш JSON:", добавляет markdown-разметку json и ломает весь парсинг ответа. И ладно бы - всегда. Но делает она это только иногдаИ вот тогда начинаются костыли и регулярки для разгребания этого мусора. Но можно не париться, а использовать библиотеку instructor. Она намертво
Senior Tester | Евгений Окулик
25 May, 13:34edited
Курс по ИИ-агентамСейчас в IT прикольная картина. Менеджеры начитались постов в Линкедине и теперь требуют пихать ИИ-агентов во все щели, а инженеры судорожно ищут, где бы купить секретный курс по промпт-инжинирингу. Мне в личку тоже регулярно прилетает: "Женя, когда курс по ИИ?". Видимо, бабки жмут карман 😁Общего курса по ИИ-агентам не будет, по крайней мере пока всё не устаканилось. Потому что продавать универсальную кнопку "сделать тесты" это, за редким исключением, отдаёт продажей воздуха.База автоматизации везде одинаковая - хорошему коду на Python плевать на специфику проекта, а фикстуры - они и в Африке фикстуры 🐒 Но как только ты пытаешься натянуть нейронку на реальный проект, вся красивая теория из презентаций лопается. Универсального способа создания агента нет. На практике, у тебя будет что-то такое:➖Проект-единорог: есть идеальная, актуальная дока. Скормил её


Senior Tester | Евгений Окулик
12 May, 13:28
Цифровой аватарЭто мой новый проект по созданию автономного ИИ-аватара. Мой эксперимент: насколько далеко может зайти нейронка, если дать ей ключи от API (с лимитом 😁) и свободу действий. И насколько возможно научить ее быть мной.Я планирую собрать цифровую копию себя, которая не только генерит текст так, чтобы я сам поверил, что его написал я, но еще и сама выполняет весь процесс: ➖Сама выбирает темы для постов. ➖Анализирует, какие посты зашли, а какие - мусор. ➖Пытается строить контент-план без моего пинка.Пока что, эта штуковина, можно сказать, в зародыше. Я подкидываю темы, а он уже сам превращает их в текст и постит. Но цель - довести его до полной автономии, вплоть до общения в комментах. А вдруг и кружочки сможет выкладывать?Он будет делать вид, что он - я, поэтому тематика канала будет такой же, как здесь. По крайней мере, в началеПервый пост от моего цифрового


Senior Tester | Евгений Окулик
25 Apr, 13:31edited
Где лежат все отзывы о курсе?Мне часто пишут слова благодарности в личку или в чатах. Это приятно, но такие сообщения быстро тонут в истории. Я не сторонник того, чтобы раз в неделю выкладывать "успешные кейсы".Поэтому я решил собрать всё в одном месте - в комментариях под этим постом. Чтобы и мне было удобно анализировать фидбек, и те, кто только присматривается к обучению, могли увидеть реальную картину.Если вы проходили мой курс, напишите, пожалуйста, пару слов:➖Что было самым ценным? (Конкретные инструменты, подход к архитектуре, помощь в чате или, может, само понимание автоматизации)➖Как это повлияло на вашу работу? (Стали увереннее, внедрили что-то новое, сменили работу/зарплату)➖Общее впечатлениеСпасибо всем, кто не поленится расписать подробно. Для меня это стимул для развития и понимание, куда двигать программу дальше. Для тех, кто присматривается к моему обучению
1,440Open in Telegram
Senior Tester | Евгений Окулик
22 Apr, 14:09
Когда махина наконец поехалаПоследние пару дней я занимался любимым делом любого автоматизатора - бодался с инфраструктурой. По уши в конфигах и логах, пытаешься заставить инструменты, которые друг друга ненавидят, работать вместе 🤯Задача была собрать цепочку: ➖ Python, ➖ Docker, ➖ Kubernetes, ➖ моки ➖ приложение в облаке Чтобы в CI/CD всё это заводилось само: поды не дохли от нагрузки, моки подменяли ответы, а тесты понимали, куда им вообще стучаться.🎉Сегодня оно завелось 🎉Запушил код - и в облаке началась движуха. Контейнеры развернулись, тесты в кучу потоков погнали сценарии и через 10 минут выдали результат.Поймал тот же кайф, что и от самого первого теста, который когда-то просто сам открыл браузер. Масштаб другой, но ощущение, что ты заставил систему подчиниться - то же самое.Вот ради этих 10 минут стабильности мы и сидим часами в тупняке.


Senior Tester | Евгений Окулик
17 Apr, 13:45
Инженерное Бинго 🎯Закрываем рабочую неделю. Считаем, сколько пунктов вы выбили за эти 5 дней:1. Починил тест, который упал без причины (и заработал без причины) 🕯✨ 2. Сказал на митинге «там всё не очевидно», чтобы выиграть время 🎭🤔 3. Нашел крутой баг, который оказался фичей 🤡📈 4. Потратил 2 часа на задачу, которую в итоге решил одной строчкой 🤏⚡️ 5. Ни разу за день не открыл Jira (уровень: Бог) 🧘♂️⛩ 6. Запушил сразу в main и даже не сломал ничего 🚀🔥 7. Полчаса придумывал название переменной 🧠🏷 8. Думал «какой дурак это сделал?!», глядя на свой старый код 🕵️♂️🤦♂️ 9. Узнал про Icecream от Жени 🍦🍨У меня на этой неделе 7/9. Особенно горжусь пунктом 7 😜.


Senior Tester | Евгений Окулик
16 Apr, 15:47
Легальный способ тупить в монитор 😵💫Вот сегодня опять. Сижу над задачей час, два, три. Кода - ноль (ну или около того), а башка взрывается уже. Самое время для обострения синдрома самозванца. Ведь Senior должен щелкать задачки как семечки.❗️На самом деле, всё наоборотУмение не бросать задачу, когда не идет, а позволить тупить над ней столько, сколько нужно - это и есть скилл. В эти часы, когда ты копаешь и перебираешь варианты, происходит реальное развитие. Ты не просто фиксишь баг, ты выстраиваешь в голове логические связи, которые потом позволят тебе решать подобные задачи за пять минут.Senior — это не тот, кто знает ответы на все вопросы. Это тот, кто научился не паниковать, когда ответа нет, и спокойно до него докапываться.Если ты сегодня завис над задачей или над домашкой, и она кажется неприступной стеной - дай пять! 🖐 Ты сейчас не


Senior Tester | Евгений Окулик
15 Apr, 14:36
Про ИИ-агентов, джиннов и базуЧтобы не выглядеть скуфом и старовером, официально заявляю: я пользуюсь ИИ. Показал на видео 👆 всех своих питомцев: Claude Code (через свой прокси с кешем в Redis и возможностью работать с любой LLM), Cursor и WarpСейчас мой фаворит - Warp. В нем удобнее проводить ревью, изменять что-то налету. Claude Code больше для того, чтобы пробовать всё то, что читаю в статьях о ИИ. А там сейчас везде про Claude Code. Кстати, любопытно: что потом будет популярным - ведь еще год назад все восхищались курсором, а сейчас, как-будто, и забывать начали о нем.Почему я при этом не забил канал своими экспериментами с ИИ, советами по работе с ним, навайбкоженными приложениями?Работа с AI-агентом иногда напоминает этот анекдот. Ты заказываешь у него что хочешь и, в большинстве случаев, это и получаешь. Но всегда есть риск, что он или сломал что-то другое или сделал
Senior Tester | Евгений Окулик
14 Apr, 14:34edited
Убийца print()Всю жизнь для быстрой отладки в коде я по старинке использовал print(). Ну, вы знаете: накидать принтов в разные места, чтобы понять, куда код вообще доходит и что там внутри переменных. А потом сидеть и гадать в консоли, какой вывод к какой строке относится 😁Только что узнал про библиотеку icecream. Оказывается, она существует уже сто лет, но я почему-то проходил мимо.Вместо print(user_id) пишешь ic(user_id) В консоли ты получаешь не просто цифру, а сразу: ic| user_id: 42Она сама пишет имя переменной, значение, а если вызвать её без аргументов - покажет файл и номер строки, где сработал вызов. Для быстрой отладки - пушка.Установка: pip install icecreamfrom icecream import icdef process_order(order_id, items): # Пустой вызов — сразу видим файл, время и строку ic() total_price = sum(item['price'] for item in items)


Senior Tester | Евгений Окулик
13 Apr, 13:37
Почему ваши тесты бесят разработчиков?Недавно во время проверки домашек мне попался код, который напомнил мне о классической проблеме автотестов - информативности. Есть у нас вот такой тест с вот такой фикстурой: @pytest.fixture() def new_object(): # ... создание объекта ... response = requests.post(url, json=body) assert response.status_code == 200, f"Expected 200, but got {response.status_code}"yield object_id# ... удаление объекта ... response = requests.delete(url_with_id) assert response.status_code in [200, 204, 404], "The object has not been deleted"def test_update_object(new_object): # ... готовим данные для отправки ... response = requests.put(url, new_object, json=updated_data) Коротко: здесь у нас тест test_update_object, который использует фикстуру new_object. Это значит, что перед тестом выполнится то, что написано в фикстуре перед yield, а после теста выполнится


Senior Tester | Евгений Окулик
11 Apr, 08:05
Related Channels
Other channels in the same section of the catalogue.
