JSON · Go · CDP
greedy записывает зелёный прогон Playwright-теста в JSON. Дальше этот файл гоняет Go-бинарник — напрямую в Chrome по CDP.
Ни Node, ни Playwright, ни модели в прогоне нет.
Шаги и селекторы, снятые с трассы, а не разобранные из кода теста. Операций всего шесть: 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
Один прогон логина на одном горячем 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