Senior Tester | Евгений Окулик
СтатистикаВладелец канала @okulikby Канал про тестирование и автоматизацию (Python в основном) Мой YouTube: https://www.youtube.com/@SeniorTester Мой LinkedIn: https://www.linkedin.com/in/eugeneokulik/ Обучение: https://okulik.by/
- Последний пост
- 12 авг.
- Последнее чтение
- 13 авг.
- Постов за неделю
- 1
- Всего постов
- 20
- Тип
- открытый
- Язык
- русский
- В каталоге с
- 13 авг.
- 1/24сутки в ленте
- 371
- 1/48двое суток
- 425
- 1/72трое суток
- 458
Оценка по просмотрам недавних постов: пост набирает почти всё за первые сутки.
Посты
ИИ и агенты - зло Это я про обучение. Вот держите план обучения автоматизации тестирования с ИИ и с агентами 1. Забываем про существование ИИ 2. Изучаем основы Python 3. Учимся писать автотесты и оформлять их в аккуратные проекты 4. Знакомимся с тем, что вокруг: Docker, CI/CD, SQL,... 5. Начинаем использовать полученные знания 6. Вспоминаем про существование ИИ и поручаем ему мелкие задачки 7. Набираемся опыта и уверенности в своих умениях 8. Отдаем всю работу агентам Я знаю, что все понимают это, но лень иногда берет верх. Можно иногда полениться, но надо знать меру. Когда к ИИ можно сходить: Пример: На занятии мы разбирали работу с файлами и, среди прочего, научились строить путь к файлу, относительно расположения программы, чтобы у всех пользователей программа работала одинаково. И в ДЗ одним из пунктов нужно это сделать. Вот тут нудно собирать os.path.join руками - можно отдать ИИ. Всё равно это не пригодится вам на каждый день и в следующий раз вы это тоже отдадите ИИ. Как к ИИ не надо ходить: Отдать ему всё домашнее задание. Даже если вы это сделаете с пометкой "объясни мне решение" - это движение в пустоту. В пустоту в голове. Пока вы не помучаетесь сами над выдумыванием подхода, ничего не закрепится Мои ученики иногда прибегают к этому сценарию - я часто это вижу, но не всегда это комментирую 😉 Правило такое: если знаешь что должно получиться в результате, но просто лень ковыряться, отдавай это ИИ. Если не знаешь с какой стороны подойти - сиди думай сам(а), ковыряй дополнительную информацию, если надо 🤓 Мой любимый пример - это второе задание курса, где нужно сделать пуш в Github. В самом начале задания написано, что нужно мне прислать свой юзернейм в гитхабе, иначе работать не будет. Многие это пропускают - это норм. Но раньше приходили ко мне и говорили "не работает", а сейчас не приходят, а потом я обнаруживаю форк у репозитория (и это у людей, которые программирование и гит впервые видят). Они просто кинули в ИИ ошибку, которую получили при попытке пуша, а он им говорит "Так у тебя ж прав нет пушить - делай форк" и рассказывает как его сделать. Ну и правильно говорит - у него нет контекста (сути задания) А вот как я пользуюсь ИИ в учебе. Может, и вам пригодится: После изучения какой-то темы я составляю конспект. Это, кстати, даже без ИИ очень рабочий метод - часто оказывается, что то, что казалось понятным - нифига не понятно, так как не можешь это описать сам. А потом отдаю этот конспект ИИ для согласования - правильно ли я всё понял, ничего ли не упустил. Потом, бывает, спорю с ИИ, что он несет чушь и кидаю в него пруфы, а иногда узнаю, что я познакомился только с верхушкой айсберга. 👇А вы за собой замечали, как ИИ незаметно отупляет в базовых вещах, если им злоупотреблять? В какой момент вы себе говорите: "Так, стоп, это я должен написать сам"?
Аватар в самостоятельном полете уже чуть больше недели. И, в целом, справляется хорошо. Он не постит всякую банальщину. Находит интересные темы. Но и не без косяков, конечно. То, он решил, что живет в 2024 году, то решил, что умные ожидания в UI тестах - это скрытый лайфхак, а не база. А еще он косячит иногда с определением годности контента. Вот сегодняшний пост про BEHAVR - ну буллшит чистой воды 😂 Этот инструмент не перевернет мир и какой-нибудь codegen от Playwright - в разы лучшая альтернатива. Можем обсудить там в комментах Но вот читаю я его и что понимаю - это всё посты, которые я мог бы не выкладывать "от аватара", а взять и пичкать ими вас (немного причесав и убрав полную ИИшнятину). И, вполне возможно, какой-то автор, которого вы читаете, ровно так и делает. И я понял, что лучше я буду читать контент от ИИ, зная, что он от ИИ и пропуская через собственные фильтры адекватности. Чем буду читать то же самое, но как-будто от эксперта, рассчитывая на то, что в этих текстах есть экспертность Понимаю, что не каждый может отфильтровать что взять из постов, а что пропустить мимо. Поэтому призываю к обсуждению постов там в комментах, потому что, зачастую, там есть что обсудить. И как раз обсуждение может дать больше полезного контента, чем сам пост. PS Кстати, я там на YouTube вернулся и парочку видео уже выложил: раз и два
Всем привет. Думаю, вы решили, что я забил на своего ИИ аватара. Но нет - не забил. Его версия была прикольной, но скучной. Темы для его постов придумывал я, а он только сами посты генерировал 🥱 Мне это не понравилось и я ушел в поиск вдохновения на то, чтобы придумать как сделать так, чтобы он писал что-то действительно интересное Ну и вдохновение недавно было найдено и аватар снова оживет примерно через час. Теперь он сам находит интересные темы для постов и даже для меня они будут 🎁 сюрпризом (ну, почти) Счастливого ему пути. Глядишь, что-то интересное получится. Отвечать на комменты он пока не умеет, но, как придет очередная порция вдохновения, попробую сделать и это 😉
Как отучить ИИ писать сочинения Когда приходится впервые прикручивать ИИ к автоматизации или к каким-то скриптам, то обнаруживаешь, что LLM очень любит писать сочинения ✍️ и с ними очень сложно работать Но если хочешь, чтобы ИИ не просто болтал, а выдавал структурированные данные, которые твой скрипт может распарсить и использовать дальше (например, автоматически завести баг-репорт в Jira на основе лога ошибки), начинаешь выкручиваться. Пишешь в промпте: "Ответь строго в формате JSON, не пиши никакого лишнего текста, иначе я тебя уволю". Нейронка извиняется, пишет "Конечно, вот ваш JSON:", добавляет markdown-разметку ```json и ломает весь парсинг ответа. И ладно бы - всегда. Но делает она это только иногда И вот тогда начинаются костыли и регулярки для разгребания этого мусора. Но можно не париться, а использовать библиотеку instructor. Она намертво связывает LLM-модели с валидатором данных Pydantic. Вот как это выглядит в коде: import instructor from anthropic import Anthropic from pydantic import BaseModel, Field # 1. Описываем жесткую структуру, которую МЫ хотим получить от ИИ class BugReport(BaseModel): title: str = Field(description="Краткое и понятное описание бага") severity: str = Field(description="Low, Medium, High или Blocker") steps_to_reproduce: list[str] = Field(description="Пошаговые действия для воспроизведения") error_summary: str = Field(description="Суть ошибки из лога") # 2. Пакуем клиента через instructor client = instructor.from_anthropic(Anthropic()) # 3. Делаем запрос к модели bug_data = client.messages.create( model="claude-sonnet-4-6", max_tokens=1024, response_model=BugReport, # Вот тут вся магия messages=[ { "role": "user", "content": "Вот тебе кусок упавшего лога из CI/CD: [вставляем страшный traceback с таймаутом браузера]. Сделай из него нормальный репорт." } ] ) # На выходе мы получаем НЕ СТРОКУ, а готовый объект Pydantic print(bug_data.title) print(bug_data.severity) print(bug_data.steps_to_reproduce) >>>>>> Результат этого кода: Таймаут браузера в CI/CD pipeline — тест падает из-за превышения времени ожидания High ['1. Запустить CI/CD pipeline (например, через push в ветку или вручную)', '2. Дождаться этапа выполнения автотестов (browser/UI-тесты)', '3. Наблюдать падение теста с ошибкой таймаута браузера в логах'] Больше не нужно парсить строки. Переменная bug_data - это готовый объект класса BugReport. Можно сразу вызвать bug_data.model_dump() и отправить этот чистый JSON прямиком в API Джиры. Если Клод попытается сгаллюцинировать и пропустить обязательное поле или засунуть строку туда, где должен быть список, instructor под капотом сам увидит ошибку валидации Pydantic, молча пошлет повторный запрос ИИ со словами «Ты накосячил вот тут, переделай», и вернет вам идеальный результат. Для тех, кто пытается строить реальных автономных агентов для работы с инфраструктурой, а не просто балуется в чат-ботах - штука незаменимая.
Курс по ИИ-агентам Сейчас в IT прикольная картина. Менеджеры начитались постов в Линкедине и теперь требуют пихать ИИ-агентов во все щели, а инженеры судорожно ищут, где бы купить секретный курс по промпт-инжинирингу. Мне в личку тоже регулярно прилетает: "Женя, когда курс по ИИ?". Видимо, бабки жмут карман 😁 Общего курса по ИИ-агентам не будет, по крайней мере пока всё не устаканилось. Потому что продавать универсальную кнопку "сделать тесты" это, за редким исключением, отдаёт продажей воздуха. База автоматизации везде одинаковая - хорошему коду на Python плевать на специфику проекта, а фикстуры - они и в Африке фикстуры 🐒 Но как только ты пытаешься натянуть нейронку на реальный проект, вся красивая теория из презентаций лопается. Универсального способа создания агента нет. На практике, у тебя будет что-то такое: ➖Проект-единорог: есть идеальная, актуальная дока. Скормил её Claude Code, ушел пить кофе, вернулся - тесты готовы. Если работаешь на таком проекте, напиши в комменты, мы все поплачем от зависти. В дикой природе их не существует. ➖Архитектурный VIP проект: технологии переплетены так, что ты сам три дня сидишь с квадратной головой, пытаясь понять, как к этому прикрутить хотя бы один Pytest. Попытка запихать эту дичь в контекстное окно агента обычно заканчивается тем, что нейронка просто начинает сочинять на ходу. ➖Сообщество незаменимых: требований на бумаге нет в принципе. Вся логика хранится в головах двух старожилов, которые ушли в запой или в отпуск. Тут тебе нужно быть не инженером, а исследователем. И агента учить играть в детектива. Времена тупых ИИ прошли, они теперь не выдают откровенную чушь, из-за которой хочется паниковать. Хуже! Они выдают высокотехнологичный, безупречно выглядящий код, который визуально идеален, но на деле просто красиво галлюцинирует. И если ты сам не умеешь писать эти автотесты руками и по шагам дебажить фреймворк, настройка ИИ превращается в лотерею. Агент генерит тонну кода, ты ничего не понимаешь, запускаешь - оно падает, ты плачешь, агент извиняется (они это любят), генерит еще тонну мусора, круг замыкается. Вместо автоматизации ты получаешь новую унылую работу: работать нянькой у туповатого (ведь ему не сказали как надо), но очень вежливого робота. Все мои знакомые, кто реально прикрутил LLM к своим рабочим задачам, сделали это наощупь за пару вечеров (а чего бы и мне не преувеличить 😇). Без всяких курсов. У них просто была база: они четко знали, какой код должен быть на выходе, и методично заставляли железяку выдавать нужный результат. Поэтому магии не будет. Учите базу, набивайте мозоли на Playwright/Appium руками, поймите, как работает архитектура. А когда начнете выть от рутины - вы сами, без всяких курсов, за вечер настроите себе агента-помощника, потому что будете понимать, чего от него требовать. А потом шаг за шагом доведете его до идеала. Или я не прав, и кому-то реально помогло обучение лучшим командам Клода? Накидайте в комменты, если у вас был другой опыт или есть то, без чего не можете сделать первый шаг 👇
Цифровой аватар Это мой новый проект по созданию автономного ИИ-аватара. Мой эксперимент: насколько далеко может зайти нейронка, если дать ей ключи от API (с лимитом 😁) и свободу действий. И насколько возможно научить ее быть мной. Я планирую собрать цифровую копию себя, которая не только генерит текст так, чтобы я сам поверил, что его написал я, но еще и сама выполняет весь процесс: ➖Сама выбирает темы для постов. ➖Анализирует, какие посты зашли, а какие - мусор. ➖Пытается строить контент-план без моего пинка. Пока что, эта штуковина, можно сказать, в зародыше. Я подкидываю темы, а он уже сам превращает их в текст и постит. Но цель - довести его до полной автономии, вплоть до общения в комментах. А вдруг и кружочки сможет выкладывать? Он будет делать вид, что он - я, поэтому тематика канала будет такой же, как здесь. По крайней мере, в начале Первый пост от моего цифрового двойника будет через час. Посмотрим, сможет ли он представиться так, чтобы его не забанили в первую же минуту. [Ссылка на канал аватара] Пока я приглядываю за ним со стоп краном наготове, но надеюсь, не пригодится. 🛠
Где лежат все отзывы о курсе? Мне часто пишут слова благодарности в личку или в чатах. Это приятно, но такие сообщения быстро тонут в истории. Я не сторонник того, чтобы раз в неделю выкладывать "успешные кейсы". Поэтому я решил собрать всё в одном месте - в комментариях под этим постом. Чтобы и мне было удобно анализировать фидбек, и те, кто только присматривается к обучению, могли увидеть реальную картину. Если вы проходили мой курс, напишите, пожалуйста, пару слов: ➖Что было самым ценным? (Конкретные инструменты, подход к архитектуре, помощь в чате или, может, само понимание автоматизации) ➖Как это повлияло на вашу работу? (Стали увереннее, внедрили что-то новое, сменили работу/зарплату) ➖Общее впечатление Спасибо всем, кто не поленится расписать подробно. Для меня это стимул для развития и понимание, куда двигать программу дальше. Для тех, кто присматривается к моему обучению - дополнительный источник информации о нем
Когда махина наконец поехала Последние пару дней я занимался любимым делом любого автоматизатора - бодался с инфраструктурой. По уши в конфигах и логах, пытаешься заставить инструменты, которые друг друга ненавидят, работать вместе 🤯 Задача была собрать цепочку: ➖ Python, ➖ Docker, ➖ Kubernetes, ➖ моки ➖ приложение в облаке Чтобы в CI/CD всё это заводилось само: поды не дохли от нагрузки, моки подменяли ответы, а тесты понимали, куда им вообще стучаться. 🎉Сегодня оно завелось 🎉 Запушил код - и в облаке началась движуха. Контейнеры развернулись, тесты в кучу потоков погнали сценарии и через 10 минут выдали результат. Поймал тот же кайф, что и от самого первого теста, который когда-то просто сам открыл браузер. Масштаб другой, но ощущение, что ты заставил систему подчиниться - то же самое. Вот ради этих 10 минут стабильности мы и сидим часами в тупняке.
Инженерное Бинго 🎯 Закрываем рабочую неделю. Считаем, сколько пунктов вы выбили за эти 5 дней: 1. Починил тест, который упал без причины (и заработал без причины) 🕯✨ 2. Сказал на митинге «там всё не очевидно», чтобы выиграть время 🎭🤔 3. Нашел крутой баг, который оказался фичей 🤡📈 4. Потратил 2 часа на задачу, которую в итоге решил одной строчкой 🤏⚡️ 5. Ни разу за день не открыл Jira (уровень: Бог) 🧘♂️⛩ 6. Запушил сразу в main и даже не сломал ничего 🚀🔥 7. Полчаса придумывал название переменной 🧠🏷 8. Думал «какой дурак это сделал?!», глядя на свой старый код 🕵️♂️🤦♂️ 9. Узнал про Icecream от Жени 🍦🍨 У меня на этой неделе 7/9. Особенно горжусь пунктом 7 😜.
Легальный способ тупить в монитор 😵💫 Вот сегодня опять. Сижу над задачей час, два, три. Кода - ноль (ну или около того), а башка взрывается уже. Самое время для обострения синдрома самозванца. Ведь Senior должен щелкать задачки как семечки. ❗️На самом деле, всё наоборот Умение не бросать задачу, когда не идет, а позволить тупить над ней столько, сколько нужно - это и есть скилл. В эти часы, когда ты копаешь и перебираешь варианты, происходит реальное развитие. Ты не просто фиксишь баг, ты выстраиваешь в голове логические связи, которые потом позволят тебе решать подобные задачи за пять минут. Senior — это не тот, кто знает ответы на все вопросы. Это тот, кто научился не паниковать, когда ответа нет, и спокойно до него докапываться. Если ты сегодня завис над задачей или над домашкой, и она кажется неприступной стеной - дай пять! 🖐 Ты сейчас не время теряешь, а качаешь мышцы. Самое крутое решение приходит после самого долгого тупняка. Я проверял 😉 Кто сегодня в нашем клубе Senior-тормозов? Отмечайтесь в комментариях 👇
Про ИИ-агентов, джиннов и базу Чтобы не выглядеть скуфом и старовером, официально заявляю: я пользуюсь ИИ. Показал на видео 👆 всех своих питомцев: Claude Code (через свой прокси с кешем в Redis и возможностью работать с любой LLM), Cursor и Warp Сейчас мой фаворит - Warp. В нем удобнее проводить ревью, изменять что-то налету. Claude Code больше для того, чтобы пробовать всё то, что читаю в статьях о ИИ. А там сейчас везде про Claude Code. Кстати, любопытно: что потом будет популярным - ведь еще год назад все восхищались курсором, а сейчас, как-будто, и забывать начали о нем. Почему я при этом не забил канал своими экспериментами с ИИ, советами по работе с ним, навайбкоженными приложениями? Работа с AI-агентом иногда напоминает этот анекдот. Ты заказываешь у него что хочешь и, в большинстве случаев, это и получаешь. Но всегда есть риск, что он или сломал что-то другое или сделал одноразовое решение. И без знаний "физики мира" (база Python и основы автоматизации), ты не сможешь проверить, что он там сотворил и утонешь под факсами. К AI-агентам стоит относиться как к турбине. Если прикрутить её к мопеду - его размотает на первом же столбе. А если прикрутить к спорткару - он улетит в космос. 🚀 Так вот, в этом канале (и у меня на обучении) мы строим спорткар, чтобы было к чему турбину прикручивать: учимся понимать каждую строку кода и строить архитектуру.
Убийца print() Всю жизнь для быстрой отладки в коде я по старинке использовал print(). Ну, вы знаете: накидать принтов в разные места, чтобы понять, куда код вообще доходит и что там внутри переменных. А потом сидеть и гадать в консоли, какой вывод к какой строке относится 😁 Только что узнал про библиотеку icecream. Оказывается, она существует уже сто лет, но я почему-то проходил мимо. Вместо print(user_id) пишешь ic(user_id) В консоли ты получаешь не просто цифру, а сразу: ic| user_id: 42 Она сама пишет имя переменной, значение, а если вызвать её без аргументов - покажет файл и номер строки, где сработал вызов. Для быстрой отладки - пушка. Установка: pip install icecream from icecream import ic def process_order(order_id, items): # Пустой вызов — сразу видим файл, время и строку ic() total_price = sum(item['price'] for item in items) # Вывод нескольких переменных и сложных структур (словарей/списков) ic(order_id, total_price) ic(items) if total_price > 100: ic("Apply discount") # Можно и просто как print использовать return total_price * 0.9 return total_price data = [{"name": "Python Course", "price": 80}, {"name": "Book", "price": 30}] process_order("ORDER-2026", data) Результат: ic| scratch_21.py:6 in process_order() at 17:19:05.492 ic| order_id: 'ORDER-2026', total_price: 110 ic| items: [{'name': 'Python Course', 'price': 80}, {'name': 'Book', 'price': 30}] ic| 'Apply discount' Для сравнения, вот как бы выглядело с принтами ORDER-2026 110 [{'name': 'Python Course', 'price': 80}, {'name': 'Book', 'price': 30}] Apply discount Мелочь, но удобненько. Кто-то давно пользуется или тоже только узнали?
Почему ваши тесты бесят разработчиков? Недавно во время проверки домашек мне попался код, который напомнил мне о классической проблеме автотестов - информативности. Есть у нас вот такой тест с вот такой фикстурой: @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`, а после теста выполнится то, что написано в фикстуре после `yield` Фикстура выглядит идеально: мы не только создаем объект перед тестом и удаляем его после теста, но еще и проверяем, что создание и удаление отрабатывают хорошо. Но, на самом деле, мы закладываем две мины: 1. Тест-предатель Разработчик закончил работать над новой фичей и запускает тесты. Наш тест на изменение отрабатывает, а в конце, при удалении, падает. Что видит разработчик в отчете? FAILED: test_update_object Он: или два часа копается в своем коде, чтобы понять где он сломал код изменения объекта; или пишет вам, вы тратите свое время, чтобы объяснить ему что произошло; или видит ошибку "The object has not been deleted" в тесте на изменение и говорит, что тесты поломаны, ведь тест должен проверять изменение, а не удаление Как лучше поступить? Корректность удаления мы проверяем в отдельном тесте на DELETE. В фикстуре нам нужно просто "попытаться" удалить. Если не вышло - пусть лучше в базе останется лишняя запись, чем тест будет врать о причине падения 2. Текст ошибки "для себя" Текст Expected 200, but got 500 в фикстуре - это информационный шум, который ничего не говорит, но вносит неразбериху. Сравните: FAILED: test_update_object ❌ AssertionError: Expected 200, but got 500 (Изменение отрабатывает со статусом 500?) ✅ AssertionError: Failed to create test data during test set-up. Status code: 500 (Сразу понятно: тест даже не начался, проблема в окружении или эндпоинте создания). Золотое правило: Тест должен падать только по той причине, которая написана в его названии. Если падения возможны в моменте подготовки данных, пусть из ошибки будет понятно, что сам тест еще не начался
видео или голосовое, без подписи
С математикой не дружу и вам не обязательно Недавно ученик жаловался, что ему тяжело даётся задание по созданию генератора чисел фибоначчи. Он не одинок - многим тяжело даются генераторы 🤯 Но он больше переживал о другом - "Я прост с математикой сложно дружу". Очень логично, когда в такой момент появляется мысль Если я в домашке испытываю такие сложности с математикой, то что ж в работе будет? Необходимость знания математики для программирования нам вдолбили давно и прочно. В конце школы я сам выбирал, куда поступать. Очень хотелось в программирование, компы и вот это всё, но я понимал, что вступительные по математике просто не сдам. Хотя уже тогда сильно сомневался, что она действительно настолько нужна. Но способность к языкам и несколько лет курсов по английскому сами привели меня в инъяз 📚 Без поворота сюжета не обошлось - и в итоге я всё равно попал в IT, а потом и в программирование (в виде автоматизации). Вот основное, что нужно понимать: 1. Хорошие знания математики не делают вас хорошим программистом (а тем более, автоматизатором), как не делают плохим программистом плохие знания математики. Если вы можете собрать корзину в интернет магазине, то и с автоматизацией тестирования справитесь 2. Гуглить - не стыдно (не путать с бездумным копированием решений из ИИ). Многие переживают, что если они не могут придумать решение, значит - всё потеряно. А с гуглом и дурак справится. На самом деле - нет. Гугл не делает за вас, он подсказывает как действовать в конкретной ситуации. В работе за открытый поиск никто по рукам не бьет. Гуглят даже синьоры и лиды. Я вообще рекомендую делать так: сначала сделал свой вариант (пусть кривой, костыльный, но рабочий), потом поискал другие решения у ИИ или в гугле - они впечатаются в память лучше любой лекции В этом и разница: ИИ может дать ответ, но не даст понимания. А когда ты сам прошел через тупняк, чужое решение становится инсайтом, а не просто копипастой 3. Я сам тоже не выстреливаю рабочие алгоритмы автоматом. Когда я придумывал это задание про фибоначчи, я тоже сидел и думал над алгоритмом, выстраивал логику. Сеньор - это не тот, кто знает всё на свете, а тот, кто умеет докопаться до решения, даже если сначала кажется, что всё слишком сложно. Так что если у вас в школе была тройка по алгебре - выдыхайте. Для Python и автоматизации важнее упрямство и логика, чем умение вычислять логарифмы в уме.
О пользе упавших тестов Сегодня утром разбирался со своим же тестом, который казался стабильным, а со вчера начал падать 🤷♂️ Оказалось, я не до конца учел состояние данных на окружении. Можно было подкрутить настройки и просто скипать (пропускать) этот тест, если нет хороших данных. Но что-то подтолкнуло покопаться. В итоге переписал блок сбора данных так, чтобы тест сам готовил себе почву, даже если на стенде вообще нет никаких данных. В автоматизации падение теста - это не всегда косяк автора (хотя здесь - был косяк 😁). Часто это повод доработать тест. В итоге, то, что сначала выглядело как ошибка, превратилось в фикс, который сделал прогоны стабильнее. Пойду проставлю статусы задачам и домой. Вечер четверга - время замедляться. 🧘
Про бананы и автоматизацию Представьте, что вас наняли мастером по очистке бананов. 🐒 Вы профессионал, руки помнят каждое движение, вы готовы выдавать результат тоннами. Но есть нюанс: человек, который должен подносить вам бананы со склада, постоянно уходит на перекур. Или приносит не те бананы. Или вообще забывает, где склад. Сначала вы иногда идете и сами приносите ящик. Вроде несложно, дело на пять минут, да и отвлечься не помешает. Но однажды всё что могло пойти не так, идёт не так: грузчик начал прихрамывать - больше носите сами, у тележки отвалилось колесо - чините тележку. Потом выясняете, что на складе перепутали маркировку, и вместо бананов там огурцы. И вот вы уже полдня работаете грузчиком, логистом и слесарем. А вечером приходит начальник и спрашивает: - Слушай, а почему ты сегодня так мало бананов почистил? Мы же тебе за это платим. В автоматизации всё один в один. Со стороны кажется: сидишь, пишешь красивый код на Python, придумываешь алгоритмы, кайфуешь с того, как оно всё само тестируется. Обычно всё летит как по маслу, но бывают дни, когда ты 80% времени носишь бананы: ➖Разбираешься, почему задача в Jira описана так, что её понял только автор (и то не до конца). ➖Выясняешь, почему UI на стенде внезапно решил вести себя не так, как локально, хотя ничего не меняли. ➖Ищешь, куда делись тестовые данные, которые были там еще утром. ➖Объясняешь, почему нельзя вмерживать сырые тесты без спроса, а потом сам же их и чинишь. В итоге задача на час пописать код растягивается на 5 часов детективного расследования. К чему я это? Автоматизация - это не про код. Код - это верхушка айсберга, те самые 20% усилий. Настоящий скилл - это не сгореть, пока ты таскаешь эти долбанные ящики и пытаешься заставить систему работать вопреки всему. В такие дни очень хочется пойти и реализовать детскую мечту - стать таксистом. Там хотя бы понятно: сел, довез, получил результат. Кто сегодня тоже вместо работы «носил бананы»? Накидайте реакций, если жиза. Посмотрим, сколько нас таких грузчиков в IT. 🛠🍌
видео или голосовое, без подписи
Кажется, я плохой бизнесмен... 🤷♂️ На днях мне задали вопрос Почему вас интересно слушать и всё понятно, а на курсах какого-нибудь яндекса - не так? И пусть это звучит как самореклама, но вот что я ответил Просто преподаватели в крупных школах отрабатывают зарплату. А частные менторы вряд ли будут долго этим заниматься если они сами не получают удовольствие от этого Мне в помощь недавно заходил маркетолог (самые внимательные, думаю, заметили смену тематики и интонаций в постах). И пока я ему объяснял почему его подходы (воронки, прогревы, дожимы сомневающихся) мне не нравятся, сам до конца разобрался с тем почему я этим занимаюсь. Возможно, я так себе бизнесмен, но моя цель - не срубить побольше денег, а получить удовольствие от процесса и дать максимум знаний, не загоняя в кредиты. Часто, когда кто-то узнает, что я обучаю людей, спрашивают: ❓ "А не задалбывает постоянно домашки проверять?", "Это же к тебе постоянно с вопросами приходят и отвлекают". И для многих мой ответ удивителен, но, как есть: мне нравится проверять домашки, особенно когда в них есть ошибки - я вижу, что появляется возможность человека научить чему-то, объяснить что-то, что для него оказалось не очевидным. Когда ко мне приходят с вопросами - это еще круче. У меня появляется возможность объяснить что-то в живом времени и помочь здесь и сейчас. Идея этого поста не в том, чтобы затащить вас всех к себе на обучение, а в том, чтобы вы знали: ➖ Я не отдам ваши домашки на проверку ИИ, чтобы вы потом сами разбирались с его ответом. Мне не лень проверять, мне это нравится ➖ Я не буду психовать когда вы затупите на ровном месте. Если бы не тупили - сами бы уже вели такой курс. Но вы же пришли учиться. Ваша задача - иногда тупить и задавать глупые вопросы ➖ Даже после обучения мне не впадлу отвечать на ваши вопросы когда вы столкнулись с чем-то новым и не знаете как к этому подступиться. Если это не полноценная консультация, конечно Мне кажется, невозможно создать крупную школу и не потерять при этом вот этот живой контакт. А вы как думаете?
Как правильно проходить собеседование, чтобы получить приглашение и повысить оффер? Получить не 210 000₽ (2600$), а 270 000 (3300$) — как пример На это влияет то, как вы себя умеете выгодно преподносить — продавать Иначе это называется — САМОПРЕЗЕНТАЦИЯ Составил для вас короткую, но ёмкую статью. В ней описал: 😷Как за 2–3 минуты рассказать о себе так, чтобы HR захотел тебя позвать на следующий этап 😷Как правильно отвечать на вопрос HR, чтобы не создать о себе плохое впечатление 😷Как направлять технический собес в те зоны, где ты уверен — и не дать себя закопать там, где плаваешь 😷Что говорить вместо неловкого молчания, если завис на вопросе и не знаешь ответа 😷Какие 4 ошибки убивают впечатление о кандидате ещё до технических вопросов 😷Как выбивать оффер выше, чем тебе хотели предложить Читайте ➡️ ССЫЛКА НА СТАТЬЮ Потом отпишитесь, как вам