JSON · Go · CDP

greedy.guru

greedy записывает зелёный прогон Playwright-теста в JSON. Дальше этот файл гоняет Go-бинарник — напрямую в Chrome по CDP.

Ни Node, ни Playwright, ни модели в прогоне нет.

ОДИН РАЗ UI-тест на Playwright TypeScript, как обычно Зелёный прогон trace.zip greedy crystallize шаги и селекторы → JSON кристалл login.json — в git ДАЛЬШЕ — КАЖДЫЙ ПРОГОН greedy run Go, без Node Горячий Chrome уже запущен, слот Selenoid 90 мс логин, 7 шагов =

Что лежит в кристалле

Шаги и селекторы, снятые с трассы, а не разобранные из кода теста. Операций всего шесть: navigate, wait, fill, click, text, park — их хватает на логин, регистрацию и главную.

{
  "id": "login", "kind": "cdp", "version": 1,
  "steps": [
    { "op": "navigate", "url": "/login" },
    { "op": "fill", "selector": "[data-testid=login-username]", "value": "user1" },
    { "op": "click", "selector": "[data-testid=login-submit]" },
    { "op": "text", "selector": "[data-testid=home-welcome]",
      "value": "Welcome, user1!" }
  ]
}

Фрагмент кристалла. Живые лежат рядом с тестами — tests-go-cdp.

Кто решает, что кристалл рабочий

Три зелёных прогона Playwright подряд — и кейс в TestOps просится на ревью. На ревью смотрят diff, дальше approve проставляет статус в TestOps и коммитит JSON. Без ревью в Live уезжает только логин (кейс 50707); поправили тест — кристалл возвращается на ревью.

Замер

login · 90 ms · 0.09 s

2026-08-27 · tests-go-cdp/crystals/login.json · testdata/app-live · 1 hot Chrome · mode none

Один прогон логина на одном горячем Chrome. На ферме go-cdp-hot-pool к нему добавляются logout, register и home — там своя шкала, сотни миллисекунд, складывать 90×4 не надо.

greedy run --mode none \
  --cdp "$GREEDY_CDP" --base-url URL tests/go/tests-go-cdp/crystals/login.json

Рядом с run живут crystallize, validate, diff, approve и bench. CDP внутри свой и тонкий: ни chromedp, ни playwright-go.

Тесты и кристаллы — GitHub · прогоны — Jenkins · слоты Chrome — Selenoid · статусы — TestOps