До 20 000 ₽/мес за тесты, которые видят живые пользователи
Не учебные скрипты на todo-листе. Заказы приходят через Quillon Jobs — реальные задачи от внешних клиентов: тест-планы, API-suite, UI-регресс. Выполняешь с наставником, получаешь оплату.
Production-стек: pytest, Playwright, Docker, GitHub Actions — закрывает 6 000+ вакансий Junior QA. Тестируешь реальные продукты Quillon Tech с первых месяцев. AI Quality Engineering (DeepEval, ragas, prompt-regression) — отдельный 12-нед аддон.
Учим современный automation-стек и AI-тестирование, на котором строится надёжность продуктов. Ты не кликаешь руками по формам — ты строишь pipeline, который работает за тебя.
Не учебные скрипты на todo-листе. Заказы приходят через Quillon Jobs — реальные задачи от внешних клиентов: тест-планы, API-suite, UI-регресс. Выполняешь с наставником, получаешь оплату.
Учим ровно то, что покупает рынок: реальные требования Junior QA из hh.ru, без устаревшего Selenium as primary. AI-тестирование (DeepEval, ragas, prompt-regression) — отдельным аддоном.
Разбирает твои тест-кейсы, объясняет flaky-тесты, готовит к собеседованию по QA. Обучен на нашей программе.
Проектируешь и сдаёшь полную QA-стратегию для реального продукта: API + E2E + CI/CD + отчётность. Не лаб-работа — боевой артефакт для портфолио.
Готовим комплексно: hard-скилы (тестирование API, UI, нагрузки, security; live-coding на собеседовании) и soft (мок-интервью, переговоры о зарплате, нетворк). Резюме, которое проходит автофильтры HR-систем.
Полный доступ к материалам и Quilly AI. Не подошло — возвращаем 100% без «а почему».
assert до production CI/CD10–12 часов в неделю · 80% практики · async + дейлики. Каждая фаза заканчивается Demo Day с живым артефактом — не тестом на теорию.
30 автотестов на pytest к нед. 5; полный API-suite с Allure-отчётом и Demo Day к нед. 12.
v0.5QA-Pulse v0.5 · 60+ тестов, CI green, Allure-дашборд, публичный GitHub-релиз
E2E-suite на Playwright с Page Object Model, задеплоенный в CI на каждый пул-реквест. Demo Day v1.0.
QA-Pulse v1.0 · API + E2E Playwright + CI/CD · GitHub-релиз v1.0
Нагрузочный профиль на Locust, OWASP-чек-лист, стажировка на реальных продуктах Quillon со 2-й задачей через Jobs 35 000 ₽+.
QA-Pulse v1.5 · Locust-профиль + Allure · security-чек-лист · GitHub-релиз
Junior QA Automation оффер + дипломный QA-фреймворк на Demo Day. Лучшим проектам — до 500 000 ₽.
Полный QA-фреймворк (API + E2E + load + AI) · Allure-отчёт · GitHub v2.0. Лучшим проектам — до 500 000 ₽.
Полная разбивка по неделям с QA-Pulse-эволюцией, Demo Day-вехами и контрольными точками — приходит вместе с демо-уроком на email.
Открыть демо-урокQA-Pulse — твой тестовый фреймворк, который растёт вместе с программой. С нед. 4 до нед. 42 он эволюционирует от 10 простых assert-тестов до полной QA-стратегии с AI-eval. Ты ведёшь свою кодбазу и тестируешь тот же Pulse, что строят backend-студенты.
LLM-фичи в продукте сломать легко и незаметно: модель галлюцинирует, теряет контекст, реагирует на prompt-injection. Обычные тесты здесь не работают. Аддон даёт методологию и инструменты для QA AI-продуктов: eval-фреймворки, golden datasets, regression на промптах. Программу финализируем — оставь email, напишем первым.
Программа аддона финализируется — точный стек и порядок тем зафиксируем ближе к запуску.
Студенты пишут тесты для реальных продуктов и коммерческих заказчиков. Со 2-го месяца — оплачиваемые задачи через Quillon Jobs. С 7-го — стажировка на внутренних продуктах (Meet, Quilly AI, LMS). На выпуске — дипломный QA-фреймворк и гранты лучшим проектам до 500 000 ₽.
# Баг-репорт · лендинг event-агентства (фрагмент)
BUG-07 · форма заявки
шаги: отправить пустую форму
ожид.: подсветка обязательных полей
факт.: заявка уходит пустой, спам в CRM
важность: высокая
BUG-12 · мобильная вёрстка (iPhone SE)
кнопка «Заказать» уезжает за край экрана
from playwright.sync_api import Page
def test_checkout(page: Page):
page.goto("https://shop.example/catalog")
page.get_by_role("button", name="В корзину").first.click()
page.get_by_role("link", name="Оформить").click()
page.get_by_label("Телефон").fill("+7 999 000-00-00")
page.get_by_role("button", name="Оплатить").click()
assert page.get_by_text("Заказ принят").is_visible()
@pytest.mark.parametrize("payload, code", [
({"title": "Отчёт", "due": "2026-06-01"}, 201),
({"title": ""}, 422),
])
def test_create_task(client, auth, payload, code):
r = client.post("/api/tasks", json=payload, headers=auth)
assert r.status_code == code


тест проходит ядро Quillon Meet — вход по ссылке без аккаунта, звонок и появление записи. Сценарий написал стажёр на M07: пока тесты зелёные, сломанные сборки не доходят до пользователей.
from playwright.async_api import Page
import pytest
@pytest.mark.asyncio
async def test_guest_joins_by_link(page: Page, room_url: str):
await page.goto(room_url) # ссылка-приглашение
await page.get_by_label("Ваше имя").fill("Гость")
await page.get_by_role("button", name="Войти").click()
await page.wait_for_selector(".call-stage") # попали в звонок
assert await page.locator("video").count() >= 1


тест открывает два чата и проверяет, что сообщение мгновенно доходит до второго и виден статус «в сети». Тесты написал стажёр на M08 — не пускают поломки живого чата к пользователям.
import pytest
from httpx_ws import aconnect_ws
@pytest.mark.asyncio
async def test_broadcast(app):
async with aconnect_ws("/ws/general", app) as a, \
aconnect_ws("/ws/general", app) as b:
await a.send_json({"text": "привет"})
msg = await b.receive_json()
assert msg["type"] == "message"
assert msg["text"] == "привет"
@pytest.mark.asyncio
async def test_presence(app):
async with aconnect_ws("/ws/general", app) as ws:
evt = await ws.receive_json()
assert evt["type"] == "presence"
assert evt["online"] is True


каждый ответ Quilly сверяется с набором эталонных вопросов и оценивается на точность. Проверку написал стажёр на M09 — ответы, ставшие хуже, не доходят до пользователей.
from deepeval import evaluate
from deepeval.metrics import AnswerRelevancyMetric
@pytest.mark.parametrize("question", [
"Как установить pytest?",
"Что такое fixture?",
])
def test_quilly_relevant(question, quilly_client):
actual = quilly_client.ask(question)
test_case = LLMTestCase(
input=question, actual_output=actual
)
metric = AnswerRelevancyMetric(threshold=0.8)
evaluate([test_case], [metric])


тесты проверяют урок перед публикацией. Проверки написал стажёр на M08 — урок с ошибками не доходит до студентов.
def test_lesson_publish_blocked_without_tests(
lesson_factory,
):
lesson = lesson_factory(blocks=[
{"type": "code", "tests": []},
])
issues = validate_lesson(lesson)
assert any(
i.code == "code_block_without_tests"
for i in issues
)
@pytest.fixture
async def client(app):
async with AsyncClient(
app=app, base_url="http://test"
) as c:
yield c
async def test_task_list_empty(client):
r = await client.get("/tasks")
assert r.status_code == 200
assert r.json() == []
class DashboardPage:
def __init__(self, page: Page):
self.page = page
self.add_btn = page.get_by_role(
"button", name="Добавить"
)
async def create_task(self, title: str) -> None:
await self.add_btn.click()
await self.page.get_by_label("Название").fill(title)
await self.page.get_by_role("button", name="Сохранить").click()
# .github/workflows/qa.yml
name: QA Pipeline
on: [push, pull_request]
jobs:
tests:
strategy:
matrix:
browser: [chromium, firefox]
steps:
- name: API tests
run: pytest tests/api -n auto
- name: E2E (${{ matrix.browser }})
run: pytest tests/e2e --browser ${{ matrix.browser }}
- name: Load (Locust headless)
run: locust --headless -u 200 -r 20 -t 60s
--screenshot в pytest-playwrightdef pytest_addoption(parser: Parser) -> None:
parser.addoption(
"--screenshot",
choices=["on", "off", "only-on-failure"],
default="off",
help="Screenshot mode for all tests",
)
# используется в conftest.py
@pytest.fixture(scope="function")
async def page(context, pytestconfig):
mode = pytestconfig.getoption("--screenshot")
page = await context.new_page()
yield page
if mode == "on":
await page.screenshot(path=f"screenshots/{page.url}.png")
allure-pytest# до фикса: повтор теста не проставлял FLAKY
def _mark_flaky(self, result: TestResult) -> None:
history = self._storage.get_history(result.test_case_id)
has_pass = any(r.status == Status.PASSED for r in history)
has_fail = any(r.status == Status.FAILED for r in history)
# фикс: включаем текущий результат в проверку
has_pass |= result.status == Status.PASSED
has_fail |= result.status == Status.FAILED
if has_pass and has_fail:
result.labels.append(Label(name="tag", value="flaky"))
deepevalfrom deepeval.metrics import GEval
from deepeval.test_case import LLMTestCaseParams
coherence_ru = GEval(
name="Связность (ru)",
criteria="Оцени связность и грамматику "
"ответа на русском языке по шкале 0–1",
evaluation_params=[
LLMTestCaseParams.ACTUAL_OUTPUT
],
threshold=0.75,
)
живой дашборд MVP · стек FastAPI + Celery + Postgres
# TestFlare · приём отчёта автотестов из CI (MVP)
from fastapi import APIRouter, UploadFile, BackgroundTasks
from .ingest import parse_and_store
router = APIRouter(prefix="/api/reports", tags=["reports"])
@router.post("/upload", status_code=202)
async def upload_report(project_id: int,
files: list[UploadFile],
bg: BackgroundTasks) -> dict:
# разбираем отчёт, считаем pass-rate и нестабильность по ветке
bg.add_task(parse_and_store, project_id, files)
return {"status": "queued", "files": len(files)}
Руководит разработкой образовательного продукта Quillon · Backend + AI-интеграции
Руководит разработкой образовательного продукта Quillon и лично проектирует 12-месячную программу. Координирует методистов, инженеров и дизайнеров, отвечает за архитектуру, дедлайны и связь бизнес-задач с инженерной реализацией. Бэкенд-разработчик с фокусом на AI-интеграциях (LLM, Realtime Speech API). 5+ лет в IT-образовании, 4 000+ проведённых занятий.
12+ лет в QA и DevOps. Построил и возглавлял команду 100+ инженеров в FinTech. Лично ведёт 12-месячную программу QA Automation.
Строит высоконагруженные AI-сервисы в production. Ведёт спецмодуль по тестированию AI-систем: DeepEval, ragas, нагрузочное тестирование Locust.
Это ориентир-сценарии: типичный путь по программе и вилки зарплат по рынку (данные hh.ru), а не гарантированный результат. Первый поток ещё учится.
Вход: 21 год, 3-й курс, непрофильный вуз
Python: не было · нашёл через Telegram-канал
Первый Jobs-заказ — мануальный регресс мобильного приложения. Переделывал баг-репорты дважды. +8 000 ₽
Первый Playwright-suite в портфолио. Начал откликаться на стажировки через LinkedIn.
Стажировка в продуктовой команде part-time. 40 000 ₽/мес.
Оффер Junior QA Automation Engineer в продуктовой компании. 130 000 ₽/мес.
На M03 три дня не мог понять, почему тест зеленый, хотя баг явно есть. Оказалось — assert сравнивал строку с None. После этого читаю падение теста медленно, сначала сам assert.
Вход: 6 лет администратор салона
Python базовый (ютуб) · выбрала QA как «вход с минимальной математикой»
Первые автотесты — переломный момент: «я могу писать код». Пять тестов специально падали по заданию — починила за вечер.
Jobs-заказ: API-регресс для SaaS-стартапа. Первая неделя с реальным заказчиком. +15 000 ₽
Стажировка в финтех-команде через партнёрскую сеть Quillon. 60 000 ₽/мес.
Оффер Junior+ QA Automation в финтехе. 160 000 ₽/мес.
Самое страшное было не питон, а ощущение что в комнате все знают это уже 10 лет. На третьем месяце поняла: никто не знает — все гуглят. Просто кто-то гуглит быстрее.
Вход: 2 года мануальный QA, аутсорс, 95 000 ₽
Selenium пытался — бросил · роста нет
Фаст-трек: M01 засчитан по скринингу, стартовал сразу с Python и pytest. За первую неделю написал больше, чем за год с Selenium.
Первый коммерческий API-suite на текущей работе. Переговоры о повышении с боссом — показал живой Allure-отчёт. +9 000 ₽ бонус
Переход внутри компании — Middle QA Automation. 180 000 ₽/мес.
Оффер в продуктовый стартап. 240 000 ₽/мес. Выбрал из трёх предложений.
Думал, у меня проблема с языком программирования. Оказалось — проблема была с Selenium. Playwright — другой мир: локаторы работают, async работает, CI не падает случайно.
Живые впечатления студентов первого потока — честно, без историй успеха «через два года».
Уже после первого месяца я почувствовал, что действительно понимаю Python, а не просто заучиваю синтаксис. Во второй месяц получил первый заказ через Quillon Jobs — Telegram-бот.
+7 000 ₽ · первый заказ
Здесь не просто дают теорию — сразу погружают в практику. Ментор всегда рядом, готов ответить на любой вопрос. Не выдача заданий, а полноценное сопровождение.
M03 · ментор-сопровождение
Здесь я открыл для себя мир тестирования. В других школах было сложно — зачастую сам разбирался в сути задач. Здесь сразу применяешь знания на реальных проектах. Это подталкивает не бросать.
M04 · реальные проекты компании
Flutter — разработка мобильных приложений, как давно я мечтала этому обучиться. Интерактивные уроки и работа на реальных проектах — это то, что нужно. Ментор помог собрать первый интерфейс.
M02 · первый UI-экран собран
Quillon Jobs — отличный способ начать зарабатывать в IT, даже если у тебя нет опыта. Сейчас работаю над собственным MVP-проектом, ментор помогает с идеями и реализацией.
M05 · MVP в разработке
Учусь четвёртый месяц. То, что ребята дают возможность попробовать свои силы в тестировании и заработать — это сильно. Сразу видна экспертность спикеров: разбираются, а не диктуют заученные лекции.
M04 · первая задача QA
Рассрочка 0% на 24 месяца · без переплат
319 руб за час программы — дешевле, чем час с репетитором по Python (от 1 500 руб).
Если не подойдёт — вернём 100% без вопросов. Без мелкого шрифта, без «удержания за обработку».
12 месяцев программы — от 480 часов практики
Трек QA Automation — pytest, Playwright, Docker, GitHub Actions, Allure, Locust
Стажировка на production-продуктах Quillon с 7-го месяца
Оплачиваемые задачи со 2-го месяца, коммерческие проекты через Quillon Jobs
Дипломный QA-фреймворк на Demo Day (гранты лучшим до 500 000 ₽)
AI-помощник Quilly — поддержка 24/7
LaunchPad: сопровождение до первого оффера без срока давности
Модули: Prompt Engineering + AI-инструменты для QA
Сертификат QA Automation Engineer
Prompt Engineering + Vibe Coding + инструменты нового поколения. Для участников текущего набора — бесплатно.
Не ждёшь окончания программы: со 2-го месяца берёшь оплачиваемые задачи через Quillon Jobs — тест-планы, автотесты, регрессы для реального бизнеса.
Да, программа спроектирована с расчётом на ноль. Первые два месяца — Python и основы тестирования без предполагаемых знаний. ~70% выпускников без опыта получают первый оффер в течение 2 месяцев после диплома.
Да, программа рассчитана именно на это. 12–15 часов в неделю — 2 часа в день. Уроки в плеере 24/7. Стажировка с M07 — 8 часов/неделя, тоже совместима с full-time работой. Совмещать — стандартный сценарий, а не исключение.
Порог входа ниже: на джуна-разработчика рынок 2025 закрылся, на джуна QA Auto — открыт. 6 000+ вакансий против 12 000+, но конкуренция ниже в разы. Зарплатный потолок чуть ниже разработки на старте, через 1.5 года разница исчезает.
Для тебя есть фаст-трек: M01 засчитывается по результатам входного скрининга, стартуешь сразу с Python и pytest. Смотри кейс #03 — это типичная траектория мануальщика у нас: оффер Middle уже к M07.
Бесплатное продление на 3 месяца с дополнительной mock-интервью практикой и доступом к закрытому каналу вакансий Quillon. Без дополнительной оплаты. Сопровождаем до результата.
Playwright — современный стандарт 2024–2025: быстрее, стабильнее, async из коробки, лучше работает с SPA. Selenium даём в M06 на уровне «читай legacy» — чтобы понимать старые проекты на собеседованиях. На новых проектах в РФ 75% — Playwright.
Редкий и быстро растущий навык: тестирование LLM-фич, RAG-систем, чат-ботов. Недетерминизм моделей ломает классические подходы — нужны eval-фреймворки и golden datasets. С 2024 года добавляет 20–30к к офферу. M11 покрывает базу, аддон — углубление.
Первые 7 дней — полный доступ ко всем материалам. Если решите, что это не ваше — вернём 100% без вопросов. Без мелкого шрифта, без «удержания за обработку». Просто напишите — и деньги вернутся.
Оставь заявку — разберём твою ситуацию за 15 минут. Без оплаты, без обязательств. Подберём темп, покажем план и расчёт окупаемости.
15 минут · бесплатно · без обязательств