fa
Feedback
Валерий | AQA Engineer | Автотестирование на Python | REST, gRPC, GraphQL

Валерий | AQA Engineer | Автотестирование на Python | REST, gRPC, GraphQL

رفتن به کانال در Telegram

Сделаю из тебя крутого AQA инженера на Python. • Преподаю лучшие тренинги по автоматизации тестирования API • Senior Python developer | AQA lead, 7 лет в IT

نمایش بیشتر
1 505
مشترکین
+224 ساعت
اطلاعاتی وجود ندارد7 روز
-430 روز
آرشیو پست ها
Привет) Очень долго у меня просили курс по автоматизации тестирования брокеров сообщений, как говорится обещанного 3 года жду
Привет) Очень долго у меня просили курс по автоматизации тестирования брокеров сообщений, как говорится обещанного 3 года ждут. Но прошел год так что я еще уложился) Учитывая мою нагрузку к сожалению получается выдавать не более одного тренинга в год. Каждый тренинг, это проработка и разбивка материала на атомарные блоки, где каждый логично перетекает из одного в другое. Код в процессе подготовки переписывается по несколько раз, чтобы в процессе были учтены все моменты и видео было четким и лаконичным. В общем курс готов, осталось немного причесать. Что будет? Kafka, RabbitMQ, продюсеры, консюмеры, паттерны (все как я люблю), потоки, тестирование, E2E - всё то, с чем мы регулярно сталкиваемся в реальных проектах. Сразу обозначу: это не курс для начинающих. Он рассчитан на тех, кто уже умеет писать код, работал с Python и хочет глубже разобраться, как всё это живёт в реальных системах, а не только в примерах из документации. Это будет не просто «как отправить сообщение», а: • зачем вообще нужны брокеры и где их реально применяют • как с ними работать с точки зрения тестирования. • работа с многопоточным кодом • немного паттернов и архитектуры, без академического занудства. Сейчас допиливаю контент и в ближайшее время сверстаю лендинг с подробной программой и форматом участия. 👉 Старт планируется в феврале. Делаю курс таким, каким сам хотел бы видеть: практичным, честным и максимально приближенным к продакшену. Скоро расскажу больше деталей 👀

Всем привет! У кого, как и у меня, работы под конец года подвалило Я тут с подарочками) Во-первых, я закончил записывать курс
Всем привет! У кого, как и у меня, работы под конец года подвалило Я тут с подарочками) Во-первых, я закончил записывать курс по тестированию брокеров сообщений ✍️. Знаю, многие ждали - видео полностью готовы (самая сложная часть позади). Осталось залить на платформу и наваять лендинг. Так же хочу напомнить про свой опенсорс restcodegen. В последней обнове я выпилил лишние зависимости, переехал на другой парсер, так что пакет стал легче и теперь будет меньше конфликтов. pbreflect - пофиксил баги, которые были связаны с использованием annotation.proto, и библиотека стала стабильнее. Выпустил новый релиз e2efast - теперь фикстуры резолвятся автоматически и без багов (по крайней мере пока). Планирую добавить, чтобы в конфиг автоматически проливался хост, а не руками заполнять. Но для этого надо поправить парсер в restcodegen, поэтому пока всё по-старинке — хост руками. Напомню: • restcodegen - библиотека для генерации клиента к REST API по спецификации OpenAPI 3 • pbreflect - библиотека для получения протофайлов по URL с использованием gRPC-рефлексии и генерации клиентов • e2efast - фреймворк для быстрого развертывания каркаса автотестов для REST-сервисов (генерация клиентов, фикстур, тестов) В общем: пользуемся, говорим спасибо 😎 и ждём открытия продаж курса по брокерам!

Будете читать карьерный гороскоп на 2026 или пойдёте на эфир @qa_guru? Чтобы вы лишний раз не гадали, Стас Васенков — основатель школы — зовёт всех на карьерный вебинар. Вы проберётесь сквозь чащу трендов и фейлов уходящего года — прямо к прогнозам на 2026. Ну и по классике — вновь достанется соискателям на позицию QA-инженера. Будет прожарка свежих резюме: • покажут основные ошибки в составлении, • объяснят, на что обратит внимание HR, • вместе с вами разберут, как и что исправить в резюме. Занимайте место по этой ссылке и зовите коллег 🤩🤩🤩

🎆Сегодня День Рождения телеграмм каналу @protestinginfo! 5️⃣😚☺️😝! 2 декабря был день рождения аккаунту protestinginfo в не
+1
🎆Сегодня День Рождения телеграмм каналу @protestinginfo! 5️⃣😚☺️😝! 2 декабря был день рождения аккаунту protestinginfo в нельзяграме! Также присоединяйтесь. 💻 Ровно 5 лет назад я укладывала старшего сына спать (ему было 2 месяца) и думала о работе, скучала. И сейчас скучаю, хотя скоро выхожу на частичную занятость в декрете 🔥 Так вот, я думала, что начинаю забывать основы тестирования, плюс, казалось, что дни становятся однообразными, и я загорелась желанием завести блог по тестированию. Я начала придумывать, а как же назвать мой аккаунт, первое, что пришло в голову «ND_testing» (ND - Nadezhda Dudnik), потом начала смотреть какие ещё каналы по тестированию есть, и их оказалось много, и, по наблюдению, я придумала «ProTestingInfo»😉. Затем я начала думать, как же нарисовать мой первый логотип. Я изначально хотела, чтобы логотип был тёмно-синий - мой любимый цвет. В оформлении постов мне помогает и поддерживает моя сестра Любочка, и эта картинка с днем рождения оформлена ею. Я горела желанием собирать любую информацию, помогать себе и другим людям. Мне нравится придумывать тесты, проводить вебинары, а сейчас есть не только курс по подготовке к собеседованиям и мини-программы, а курсы по тестированию бэкенда, тестированию gRPC API, GraphQL API, и хочется отдельно выразить благодарность Валерию Меньшикову за наше партнерство. Занимаюсь менторской деятельностью, и более 40 менти получили оффер за 2025г, и до сих пор направляю людей, пока есть возможность. 🩷Хочу выразить благодарность коллегам-блогерам, которые рекомендуют мой блог, мне очень приятно и также ценю. 💚Также я хочу выразить огромную благодарность всем вам, что подписались на мой канал, я это очень ценю!🤗💜 ❤️Хочу поблагодарить за то, что вы со мной. Спасибо, что читаете, поддерживаете, крепко всех обнимаю.🥰 Я также буду продолжать заниматься созданием тестов, написанием полезных постов и статей! Делиться полезной информацией!😎 Спасибо за ваши отзывы. Люблю свое дело🫶. Желаю всем вам развития!❄️ Благодарю за ваши реакции, комментарии и обратную связь. Ценю. А кто недавно на моем канале, предлагаю прочитать пост про знакомство. Будем дальше закреплять наши знания ⚡️!

Привет ребят, сегодня такой завал, хотелось подвести какие-то, но наверное уже не успею) По поводу чего спросите вы? Сегодня
Привет ребят, сегодня такой завал, хотелось подвести какие-то, но наверное уже не успею) По поводу чего спросите вы? Сегодня у меня День Рождения) И вы уже сделали мне подарок, наконец-то набралось 1400 человек, ну если хотите сделать еще меня порадовать поделитесь ссылочкой на мой канал со своими коллегами. А я и дальше смогу делиться с вами хорошим техническим контентом и классными тренингами) Спасибо что в этот день вы со мной)

Привет! Как и обещал - зарелизнул первую итерацию своего фреймворка для генерации автотестов. Что он уже умеет? Берёшь свою swagger/openapi спеку, одна команда и у тебя готов: - проект с клиентами - фикстурами - тестами - конфигами. Без нейросетей, чистый, детерминированный результат. По факту: • создает проектную структуру • пишет фикстуры • пишет тесты • пишет конфигурацию • и всё это одной командой Погонять можно уже сейчас, фреймворк рабочий. А как им пользоваться - скоро запишу занятие в ступень Профешнл. С момента релиза - почти 1000 скачиваний, практически без рекламы. Если не заброшу (а я вроде не собираюсь) - кто знает, может когда-нибудь станет таким же популярным, как FastAPI. А чего нет?) Следующая итерация: gRPC + Postgres. Посмотреть пример проекта, который генерится одной командой - вот тут, достаточно только указать URL сервиса и всё взлетает 🔥

Привет, давненько меня не было. Так вот, хочу рассказать о чем. Пару лет назад у меня возникла идея разработать опенсорс-фреймворк, что-то типа Django или FastAPI. То есть, что-то, что позволит быстро и удобно разработать автотесты. У меня было несколько подходов, и я даже написал такой фреймворк, который уже есть на PyPI, но не скажу, как он называется.))) Проблема была в том, что я пытался сделать все и сразу, и было тяжело его развивать. Плюс, у меня был богатый опыт в автоматизации, но именно как разработчика опыта было мало. За последние пару лет я многому научился и разобрался. Я решил действовать более итерационно и делать инструменты так, чтобы они были полезны как тестировщикам, так и разработчикам. Так появились инструменты restcodegen, который по Swagger-спеке генерирует Python-клиенты. Эта библиотека в отрефакторенном виде сейчас присутствует в нашей Python-платформе, и я знаю, что используется некоторыми людьми в проектах за пределами Ozon. Вторая важная задача заключалась в удобной кодогенерации для gRPC. Подход к генерации gRPC-кода в виде плагина я подсмотрел в нашей же Python-платформе, но чтобы сделать это open source, разработал механизм для получения proto-файлов через gRPC-рефлексию. Теперь, зная хост или IP-адрес, можно легко получить Python-клиент для выбранного gRPC-сервиса. Так появился инструмент pbreflect, и доклад про него вы можете посмотреть здесь. Эти инструменты будут полезны любому Python-разработчику веб-приложений. Теперь настал этап интеграции этих инструментов в сам фреймворк для разработки автотестов. Уже готова часть для работы с REST API. Сколько он экономит времени, зависит от размера вашего API, ведь по одной спецификации генерируются клиенты, тесты и фикстуры. Пользователю остается только заполнить хост своего сервиса, и дальше все, в принципе, работает. Про сам инструмент расскажу позже. Что меня удивило, так это то, что за неделю количество скачиваний составило больше 600. Пока это рекорд из всех моих библиотек. Некоторым подписчикам я уже даже дал потестить, но прошу здесь не спойлерить, об этом расскажу позже!

Хочу поделиться некоторыми слайдами из своего будущего тренинга по брокерам сообщений. В частности базовых проблем которые во
+3
Хочу поделиться некоторыми слайдами из своего будущего тренинга по брокерам сообщений. В частности базовых проблем которые возникают при работе с Kafka в автоматизации тестирования. А как вы тестируете и какой подход используете? ——————————- 📱 TG-сообщество 📱 Обучение 📱 Отзывы

Как удобно тестировать брокеры сообщений? Многие тестировщики при тестировании брокеров сообщений создают новое соединение пе
+6
Как удобно тестировать брокеры сообщений? Многие тестировщики при тестировании брокеров сообщений создают новое соединение перед каждым тестом. Если топиков в интеграционном тестировании несколько, то тесты выполняются очень долго, и каждое сообщение валидируется отдельно и последовательно в тесте. Как можно улучшить, чтобы переиспользовать соединение и при этом проводить валидацию моментально при наступлении события? При этом делать это расширяемо и удобно. Мы можем пойти немного в инженерию. А что если у нас будет один Kafka listener, который будет вычитывать Kafka топики, и несколько подписчиков, которые при получении события (например, сообщения) будут выполнять свою логику? Так мы с вами реализуем паттерн Observer. Сначала реализуем Subject или наш KaflaListener, для простоты там будет один метод publish, который и будет уведомлять подписчиков Observer о наступлении событий. Этот класс так же имеет метод регистрации подписчиков, которых можно сделать очень много.
class KafkaListener:
    def __init__(self):
        self._clients: list[Subscriber] = []
        self._is_running: bool = False

    def start(self):
        if self._is_running:
            raise RuntimeError("already running")

        self._is_running = True

    def publish(self, message: str) -> None:
        for client in self._clients:
            client.read_message(message)

    def subscribe(self, client: Subscriber) -> None:
        if self._is_running:
            raise RuntimeError("already running")

        self._clients.append(client)
Дальше опишем интерфейс наших подписчиков.
from typing import Protocol


class Subscriber(Protocol):
    def read_message(self, message: str) -> None: ...
Теперь описываем конкретные подписчики, где можем сказать что делать при выполнении read_message, например валидацию или перекладывание в очередь.

class FirstClient:
    def read_message(self, message: str) -> None:
        print(f"Get message from {self.__class__.__name__}, {message}")


class SecondClient:
    def read_message(self, message: str) -> None:
        print(f"Get message from {self.__class__.__name__}, {message}")


class ThirdClient:
    def read_message(self, message: str) -> None:
        print(f"Get message from {self.__class__.__name__}, {message}")
Теперь мы можем увидеть, что при publish от нашего listener, наше сообщение попадет сразу во все подписчики.
kafka = KafkaListener()
kafka.subscribe(FirstClient())
kafka.subscribe(SecondClient())
kafka.subscribe(ThirdClient())

for _ in range(10):
    kafka.publish(f"message {_}")
    time.sleep(2)
Получим такой результат:
Get message from FirstClient, message 0
Get message from SecondClient, message 0
Get message from ThirdClient, message 0
Get message from FirstClient, message 1
Get message from SecondClient, message 1
Get message from ThirdClient, message 1
...
Использовать такую модель можно и в кейсе с обновлением токенов, где подписчиками будут наши клиенты, и по push-модели там будет обновляться авторизация. Изучение данного паттерна уже включено в курс по брокерам сообщений, который выйдет после Нового года. А пока вы можете изучить другие паттерны, такие как Proxy, Facade, Decorator, в курсе Advanced. 🔥Напоминаю, сегодня последний день скидок!🔥 Промокод: FRIDAY20

Чёрная Пятница уже здесь! Только до пятницы — скидка 20% на мои авторские курсы по API‑тестированию: 📚 REST API Advanced (4
Чёрная Пятница уже здесь! Только до пятницы — скидка 20% на мои авторские курсы по API‑тестированию: 📚 REST API Advanced (4 недели, 28 уроков) 📚 REST API Professional (5 модулей, продвинутый уровень) 🚀 Успей прокачать навыки и внедрить лучшие практики интеграционного и автоматизированного тестирования API. 💳 Промокод: BLACK20 ⏳ Действует до 23:59 пятницы. ——————————- 📱 TG-сообщество 📱 Обучение 📱 Отзывы

В чёрной-чёрной комнате, В чёрную-чёрную пятницу... 👻 Проснулась пугающе большая скидка — 30% на все курсы школы QA-инженеров QA.GURU! 🛍 Только 2 дня (11 и 12 ноября): скидка до 30% на всё ⬇ - Вход в IT - Java - Java Advanced - Python - JavaScript + Playwright - Kotlin 🔥 Выбирайте курсы по автоматизации тестирования, пока скидка не растаяла! Не знаете, что выбрать? Ребята помогут — напишите им здесь!

В чёрной-чёрной комнате, В чёрную-чёрную пятницу... 👻 Проснулась пугающе большая скидка — 30% на все курсы школы QA-инженеров QA.GURU! 🛍 Только 2 дня (11 и 12 ноября): скидка до 30% на всё ⬇ - Вход в IT - Java - Java Advanced - Python - JavaScript + Playwright - Kotlin 🔥 Выбирайте курсы по автоматизации тестирования, пока скидка не растаяла! Не знаете, что выбрать? Ребята помогут — напишите им здесь!

Как сделать удобно расширяемый http клиент? Самый частый паттерн при написании логгирующей http обертки в API автотестах: imp
+6
Как сделать удобно расширяемый http клиент? Самый частый паттерн при написании логгирующей 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
Что получается? Мы один раз описали интерфейс для регистрации хуков, и теперь можем добавлять сколько угодно логики, не внося изменений в класс. Код становится более стабильным и расширяемым. ——————————- 📱 TG-сообщество 📱 Обучение 📱 Отзывы

😆От клика до чека — пишем автотест на оформление заказа в Java на вебинаре QA.GURU 6 ноября в 19:00 (МСК) Участие бесплатное, регистрация обязательна
Вместе с наставником курса Java — Никитой Старковым: напишете тест, который проверяет полный путь пользователя в интернет-магазине — от авторизации до оформления заказа.
Узнаете на занятии: - как выстроить логику сквозного теста; - какие ошибки чаще всего встречаются в таких сценариях; - как сделать код чище и тесты надёжнее. Карьерный консультант школы Маргарита Головко расскажет, как усилить резюме, чтобы попасть в топ-компании уже в ближайший сезон найма ⭐ 💃 Прокачайте свои навыки! Регистрация по ссылке 😎

Что делать, если авторизационный токен в тестах протухает очень быстро? На одном из вебинаров мне задали такой вопрос. Наверн
+4
Что делать, если авторизационный токен в тестах протухает очень быстро? На одном из вебинаров мне задали такой вопрос. Наверняка есть множество вариантов решения этой проблемы, я поделюсь одним из них — не самым технически сложным и вполне понятным для поста в 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-клиент так, чтобы перед запросом он получал актуальный токен. В итоге наши тесты не развалятся, если токен протухнет в процессе их выполнения. Ставь реакцию если понравился пост) ——————————- 📱 TG-сообщество 📱 Обучение 📱 Отзывы

Выходные в коде 💻 Каждый расслабляется по-своему. Я провел выходные за любимым делом — доработкой своих open-source проектов. Что сделано: ✅ Закрыл issue в библиотеке для генерации клиентов по Swagger-спеке Теперь можно: • Указывать кастомные пути для генерации кода • Подключать свои шаблоны • Гибко настраивать под нужды проекта ✅ Написал новые автотесты для Awesome Tests Project Это мой демо-проект, где я собираю примеры тестирования всех современных технологий: REST API, gRPC, PostgreSQL, Redis, Kafka. Пока там только REST)) Полезные ссылки: 🔗 Библиотека для генерации REST клиентов 🔗 Библиотека для получения proto файлов генерации gRPC клиентов 🔗 Awesome Tests Project 🔗 Мой GitHub На моем GitHub вы найдете: • Готовые примеры тестов • Библиотеки для генерации клиентов • Масштабируемую архитектуру для интеграционного тестирования Да и вообще много можно накопать) ⭐️ Если еще не поставили звездочку — самое время! ——————————- 📱 TG-сообщество 📱 Обучение 📱 Отзывы

QA.GURU проводят финальный вебинар для продвинутых QA-инженеров на Python ⬇️ 🎙️ В четверг, 23 октября, в 20:00 по МСК. На за
QA.GURU проводят финальный вебинар для продвинутых QA-инженеров на Python ⬇️ 🎙️ В четверг, 23 октября, в 20:00 по МСК. На занятии: – создадиде API с нуля; – разберёте FastAPI, контейнеризацию и пайплайны. 📎 Не упустите шанс прокачаться до уровня Senior+ в рамках последнего потока курса Python Advanced: Среди преподавателей опытные автоматизаторы —
Станислав Васенков, Артём Ерошенко, Сергей Хомутинин, Дмитрий Тучс, Александр Котляр, Владислав Зингер, Валерий Меньшиков, Михаил Рубанов.
➡️ Вебинар бесплатный, регистрация обязательна!

В LinkedIn встретил интересный пост в стиле "опыт, который у меня есть, но который я не пишу в резюме". Так вот, прежде чем я
В LinkedIn встретил интересный пост в стиле "опыт, который у меня есть, но который я не пишу в резюме". Так вот, прежде чем я стал разработчиком, я успел поработать: С 11 до 23 лет: - был грузчиком-экспедитором, таскал коробки и сторожил товар, чтобы его не украли во время выгрузки в магазин - красил газовые трубы, когда у нас на районе проводили газ в частный сектор - работал в порту разнорабочим: мыли топливные баки, красили каюты, убирали мусор и прочая работа - работал на стройке — делали новую крышу Омскому музыкальному театру. Помню, у меня тогда еще успели взять интервью в новостях, где я говорил: "Буду друзьям показывать — видели крышу музыкального театра? Я ремонтировал!" 😄 - был проводником пассажирского поезда, ездил по маршрутам Москва—Омск—Пермь—Тюмень, месяц безвылазно в вагоне - работал консультантом по винно-водочной продукции в магазине - один день за 500 рублей был дегустатором пива "Клинское" 🍺 - работал сборщиком на производстве пластиковых окон - был агентом по согласованию подключения интернета в дома - был специалистом технической поддержки в интернет-провайдере С 23 до 35 лет: - инженером-конструктором на заводе - тестировщиком - сейчас разработчик Очень интересный путь, конечно, у меня был — где только не успел поработать. Если честно иногда немного завидую людям, которые сразу после университета попали в IT. Но ни капли не жалею о том, что работаю с малых лет. Знаю многие стараются уберечь своих детей, сделать их жизнь лучше, чтобы им не пришлось столько работать сколько их мамки и папки. У меня конечно пока детей нет, но я почему-то считаю работу одним из лучших способов воспитания ответственности и отношения к деньгам. А что вы думаете поделитесь своим опытом?) Где успели поработать до IT-шки?) ——————————- 📱 TG-сообщество 📱 Обучение 📱 Отзывы

‼️ 44 000 СТРОК КОДА ‼️ Столько напрограммировал один из моих студентов на одном из своих проектов, с использованием моего по
‼️ 44 000 СТРОК КОДА ‼️ Столько напрограммировал один из моих студентов на одном из своих проектов, с использованием моего подхода к построению фрейморка. Хороший результат, который подтверждает, что подход работает и приносит свои плоды) Но, а сейчас уже набралась новая группа и им еще многое предстоит сделать. Кто не успел - следите за анонсами ✅ НАБОР ЗАКРЫТ Несколько человек взяли полный пакет REST API Advanced + REST API Professional 5 мест заняли те, кто не откладывал решение на потом. Для тех, кто не успел: Я понимаю, что кто-то колебался, кто-то ждал "лучшего момента". Следующий момент будет в феврале. Что будет дальше: 🎯 Следующие 2 месяца - интенсивная работа с группой 🎯 44 урока Advanced + Professional, сотни часов практики, персональная обратная связь 🎯 К концу октября у меня будет ещё несколько экспертов уровня SDET Анонс следующего потока будет только здесь. Обязательно подпишитесь на уведомления канала 🔔 ——————————- 📱 TG-сообщество 📱 Обучение 📱 Отзывы

Привет) Регистрация уже открыта. Готовы стать архитектором фреймворков? ⏰ Через 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К. И только положительные отзывы от моего обучения. Готовы присоединиться к экспертам?