Тесты, которые видят живые пользователи
Не учебные скрипты на todo-листе. Задачи приходят через Quillon Jobs — реальные задачи от внешних клиентов: тест-планы, набор API-тестов, UI-регресс. Выполняешь под ревью наставника — как в настоящей команде.
Боевой стек: pytest, Playwright, Docker, GitHub Actions — закрывает 3 500+ вакансий Junior QA. Тестируешь реальные продукты Quillon Tech с первых месяцев. AI Quality Engineering (DeepEval, ragas, prompt-regression) — отдельный 12-нед аддон.
Учим современный стек автоматизации и AI-тестирование, на котором строится надёжность продуктов. Ты не кликаешь руками по формам — ты строишь конвейер тестов, который работает за тебя.
Не учебные скрипты на todo-листе. Задачи приходят через Quillon Jobs — реальные задачи от внешних клиентов: тест-планы, набор API-тестов, UI-регресс. Выполняешь под ревью наставника — как в настоящей команде.
Учим ровно то, что покупает рынок: реальные требования Junior QA из hh.ru, без устаревшего Selenium as primary. AI-тестирование (DeepEval, ragas, prompt-regression) — отдельным аддоном.
Разбирает твои тест-кейсы, объясняет нестабильные тесты, готовит к собеседованию по QA. Обучен на нашей программе.
Проектируешь и сдаёшь полную QA-стратегию для реального продукта: API + E2E + CI/CD + отчётность. Не лаб-работа — боевой артефакт для портфолио.
Готовим комплексно: хард-скиллы (тестирование API, UI, нагрузки, security; live-coding на собеседовании) и софт-скиллы (тренировочное интервью, переговоры о зарплате, нетворкинг). Резюме, которое проходит автофильтры HR-систем.
Полный доступ к материалам и Quilly AI. Не подошло — возвращаем 100% без «а почему».
Не тренажёр: пишешь код в продукты Quillon, которые уже в проде — под ревью ментора.
Видео-встречи в браузере. Web + iOS, Android, desktop.
Корпоративный мессенджер: каналы, треды, поиск. Web + iOS.
Учебная платформа: уроки, прогресс, проверка ДЗ менторами.
AI-тьютор: объясняет код и помогает разобраться в задачах.
Биржа реальных задач от внешних клиентов — под ревью ментора.
С M07 — проектная практика на продуктах студии: командная работа под ревью, как в IT-компании.
На выпуске строишь и защищаешь собственный продукт перед жюри; лучшим проектам — инвестиция до 500 000 ₽.
assert до боевого CI/CD10–12 часов в неделю · 80% практики · уроки в своём ритме + ежедневные созвоны. Каждая фаза заканчивается Демо-днём с живым проектом — не тестом на теорию.
От ручного тестирования и первых баг-репортов до 25+ автотестов на pytest и Playwright. Демо-день — защищаемый проект PulseQA v1.0.
v1.0PulseQA v1.0 · 25+ автотестов (API + интерфейс), README, зелёный CI, публичный GitHub-релиз
Продвинутые pytest и Playwright, тестирование базы данных, Docker, конвейер CI/CD, нагрузка и безопасность. Демо-день — PulseQA v2.0 + первый вклад в open-source.
PulseQA v2.0 · API + интерфейс + нагрузка + безопасность · первый принятый вклад в open-source · GitHub-релиз v2.0
Полгода в продуктовой команде Quillon по Scrum: автотесты в прод через ревью, интеграция между сервисами, нагрузка и безопасность на боевом продукте. Резюме и первый QA-аудит для заказчика.
QuillonTest · автотесты в проде Quillon + QA-отчёт за 3 месяца · сертификат об этапе
Работаешь QA-лидом на продуктах Quillon и строишь QA своего стартап-MVP с AI-тестированием. Финал — защита перед жюри, сертификат выпускника, лучшим командам — инвестиции до 500 000 ₽.
StartupQA v1.0 · стартап-MVP с AI-тестированием (API + интерфейс + нагрузка + AI) · защита перед жюри · сертификат выпускника. Лучшим командам — инвестиции до 500 000 ₽.
Полная разбивка по неделям с эволюцией проектов PulseQA → QuillonTest → StartupQA, вехами Демо-дней и контрольными точками — приходит вместе с демо-уроком на email.
Открыть демо-урокУчишься не на оторванных задачах, а ведёшь сквозные проекты, которые растут вместе с тобой. PulseQA — твой тестовый фреймворк (нед. 6–24). QuillonTest — автотесты в проде реальных продуктов Quillon (нед. 25–36). StartupQA — тестирование своего стартап-MVP с AI-тестированием (нед. 37–48).
LLM-функции в продукте сломать легко и незаметно: модель галлюцинирует, теряет контекст, реагирует на prompt-injection. Обычные тесты здесь не работают. Аддон даёт методологию и инструменты для QA AI-продуктов: eval-фреймворки, golden datasets, regression на промптах. Программу финализируем — оставь email, напишем первым.
Программа аддона финализируется — точный стек и порядок тем зафиксируем ближе к запуску.
Студенты пишут тесты для реальных продуктов и коммерческих заказчиков. Со 2-го месяца — реальные задачи через Quillon Jobs. С 7-го — проектная практика на внутренних продуктах (Meet, Quilly AI, Campus). На выпуске — дипломный 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-сервисы в проде. Ведёт спецмодуль по тестированию AI-систем: DeepEval, ragas, нагрузочное тестирование Locust.
Три типичных старта и как трек ведёт каждого к офферу. Этапы — из программы; зарплаты — ориентир рынка (данные hh.ru), не гарантия.
Старт: 21 год, 3-й курс, непрофильный вуз
Python: не было · нашёл через Telegram-канал
Первая задача Jobs — мануальный регресс мобильного приложения, под ревью (баг-репорты переделать дважды — норма).
Первый набор тестов на Playwright в портфолио. Начинаешь откликаться на вакансии.
Проектная практика в продуктовой команде — part-time.
junior QA Automation-оффер в продуктовой компании; зарплата по рынку ~130 000 ₽.
Навык, который ломает новичков, — читать падение теста медленно: сначала сам assert (например, сравнение с None), потом код.
Старт: 6 лет администратор салона
Python базовый (ютуб) · QA как вход с минимальной математикой
Первые автотесты — перелом: «я могу писать код». Пять тестов специально падали по заданию — починить за вечер.
Задача Jobs: API-регресс для SaaS-стартапа — первая неделя с реальным заказчиком, под ревью.
Проектная практика на одном из продуктов Quillon.
junior+ QA Automation-оффер в финтехе; зарплата по рынку ~160 000 ₽.
Страшно не от Python, а от ощущения «все знают это 10 лет». На 3-м месяце доходит: все гуглят — просто кто-то быстрее.
Старт: 2 года мануальный QA, аутсорс
Selenium пытался — бросил · роста нет
Фаст-трек: M01 засчитан по скринингу, стартуешь сразу с Python и pytest. За неделю пишешь больше, чем за год с Selenium.
Первый набор API-тестов по клиентскому ТЗ на текущей работе. Живой Allure-отчёт — аргумент в переговорах о повышении.
Переход на Middle QA Automation внутри компании; зарплата по рынку ~180 000 ₽.
оффер в продуктовый стартап; зарплата по рынку ~240 000 ₽.
Затык часто не в языке, а в инструменте: Playwright против Selenium — локаторы работают, async работает, CI не падает случайно.
Не видеоуроки на диване — менторы, реальные задачи и код-ревью, как в действующей студии.
1-на-1 разборы и ответ в течение дня. Не «выдача заданий», а живое сопровождение на каждом спринте.
Со 2-го месяца пишешь код в боевые продукты студии — Meet, Campus, Quilly, — а не в учебные песочницы.
Pull request, замечания, переделки — разбор кода по стандартам команды, как в настоящей разработке.
Scrum-спринты, распределённые команды и общий git-флоу — учишься не в одиночку, а в процессе.
Индивидуальное резюме, тренировочное интервью с видеоразбором и рекомендации от менторов под твой стек.
Поддержка карьерного центра не заканчивается выпуском — ведём до трудоустройства без ограничения по времени.
Quillon работает по образовательной лицензии — это даёт официальный документ и возврат 13% от стоимости.
Образовательная деятельность по лицензии — проверить в реестре →
Вернёте часть стоимости обучения. Поможем оформить документы.
Выдаём по итогам программы.
Сертификат за каждую из 4 фаз и диплом выпускника Quillon на финальном Демо-дне.
Рассрочка 0% на 24 месяца · без переплат
319 руб за час программы — дешевле, чем час с репетитором по Python (от 1 500 руб).
Если не подойдёт — вернём 100% без вопросов. Без мелкого шрифта, без «удержания за обработку».
12 месяцев программы — от 480 часов практики
Трек QA Automation — pytest, Playwright, Docker, GitHub Actions, Allure, Locust
Проектная практика на боевых продуктах Quillon с 7-го месяца
Реальные задачи через Quillon Jobs со 2-го месяца, проектная практика в команде с М07
Дипломный QA-фреймворк на Демо-дне (инвестиции лучшим до 500 000 ₽)
AI-помощник Quilly — поддержка 24/7
LaunchPad: сопровождение до первого оффера без срока давности
Модули: Prompt Engineering + AI-инструменты для QA
Сертификат QA Automation Engineer
Prompt Engineering + Vibe Coding + инструменты нового поколения. Для участников текущего набора — бесплатно.
Не ждёшь окончания программы: берёшь реальные задачи через Quillon Jobs — тест-планы, автотесты, регрессы для реального бизнеса.
Да, программа спроектирована с расчётом на ноль. Первые два месяца — Python и основы тестирования без предполагаемых знаний. За 12 месяцев новичок доходит до уровня Junior+ с боевым портфолио, а LaunchPad сопровождает до первого оффера без ограничения по времени.
Да, программа рассчитана именно на это. 10–12 часов в неделю — 2 часа в день. Уроки в плеере 24/7. Проектная практика с M07 — 8 часов/неделя, тоже совместима с full-time работой. Совмещать — стандартный сценарий, а не исключение.
Порог входа ниже: на джуна-разработчика рынок 2025 закрылся, на джуна QA Auto — открыт. 3 500+ вакансий против 6 000+, но конкуренция ниже в разы. Зарплатный потолок чуть ниже разработки на старте, через 1.5 года разница исчезает.
Для тебя есть фаст-трек: M01 засчитывается по результатам входного скрининга — стартуешь сразу с Python и pytest и экономишь месяц.
Бесплатное продление на 3 месяца с дополнительной практикой тренировочных собеседований и доступом к закрытому каналу вакансий Quillon. Без дополнительной оплаты. Сопровождаем до результата.
Playwright — современный стандарт 2024–2025: быстрее, стабильнее, async из коробки, лучше работает с SPA. Selenium даём в M06 на уровне «читай legacy» — чтобы понимать старые проекты на собеседованиях. На новых проектах в РФ 75% — Playwright.
Редкий и быстро растущий навык: тестирование LLM-функций, RAG-систем, чат-ботов. Недетерминизм моделей ломает классические подходы — нужны eval-фреймворки и golden datasets. С 2024 года добавляет 20–30к к офферу. M11 покрывает базу, аддон — углубление.
Первые 7 дней — полный доступ ко всем материалам. Если решите, что это не ваше — вернём 100% без вопросов. Без мелкого шрифта, без «удержания за обработку». Просто напишите — и деньги вернутся.
Оставь заявку — разберём твою ситуацию за 15 минут. Без оплаты, без обязательств. Подберём темп, покажем план и расчёт окупаемости.
15 минут · бесплатно · без обязательств