Миграция с Cypress на Mockarty
Вы пишете браузерные тесты на Cypress. Mockarty закрывает тот же цикл —
запись → готовый код → правка → запуск в реальном браузере → отчёт — и
добавляет то, что в Cypress приходится собирать самому:
- Запись без ручного подбора селекторов. Покликайте по приложению в браузере
расширением Mockarty Capture и получите готовый тест на своём языке —
Go, Python, Java или TypeScript (совместимо с Playwright). Никакого
cypress openс песочницей селекторов и ручногоcy.get(...). - Один отчёт на всё. Браузерный прогон ложится рядом с API-, нагрузочными,
fuzz- и контрактными — с пошаговыми скриншотами, видео, time-travel трейсом и
встроенной визуальной регрессией (не нужен плагинcypress-image-diff). - Настоящий кросс-браузерный движок. Прогоны идут на реальных Chromium,
Firefox или WebKit через общий browser-runner — без установки браузера на
каждой машине.
Кратко
| Cypress | Mockarty |
|---|---|
cypress open, ручной подбор селекторов |
Нажимаете Запись, кликаете — селекторы подбираются за вас |
cypress run (Node + браузер на машину) |
Запуск на общем browser-runner — локально ставить нечего |
Спеки *.cy.js в репозитории |
Экспорт записи в Go / Python / Java / .spec.ts, коммит |
Скриншоты + видео в cypress.config.js |
Скриншоты, видео и трейс — опции прогона |
| Визуальный diff через плагин | Визуальная регрессия встроена, с inline-подтверждением в отчёте |
Результаты в cypress/ + отдельный dashboard |
Результаты в едином отчёте |
Рабочий цикл
Цикл запись → экспорт → правка → запуск — тот же, что подробно описан для
Playwright, см. Миграция с Playwright.
Кратко:
-
Запишите расширением Mockarty Capture (или живой сессией по API). Каждая
запись сохраняется как UI-тест. -
Экспортируйте на своём языке:
mockarty ui list mockarty ui export <ui-test-id> --lang python # go | java | playwright | appium -
Правьте сгенерированный код и коммитьте рядом с приложением. Билдер SDK
реконструирует ровно тот список шагов, который Mockarty исполняет, — что
закоммитили, то и выполнится. -
Запустите на browser-runner и прочитайте вердикт:
from mockarty import MockartyClient client = MockartyClient(base_url="http://localhost:5770", api_key="mk_...") saved = client.ui_tests.create(login_flow()) run = client.ui_tests.run(saved["id"]) result = client.ui_tests.wait_for_run(run["taskId"]) print(result["status"]) # passed | failed | broken
Записанный в стиле Cypress логин — как закоммиченный Python:
from mockarty import UITest
def login_flow() -> UITest:
return (
UITest("Login flow")
.navigate("https://app.example.com/login")
.fill("#email", "user@example.com")
.fill("#pw", "secret")
.click("#login")
.assert_text("#welcome", "Welcome")
)
Соответствие команд
| Cypress | Шаг Mockarty |
|---|---|
cy.visit(url) |
navigate |
cy.get(sel).click() |
click |
cy.get(sel).dblclick() |
doubleClick |
cy.get(sel).type(v) |
type / fill |
cy.get(sel).clear() |
clear |
cy.get(sel).select(v) |
select |
cy.get(sel).check() / .uncheck() |
check / uncheck |
cy.get(sel).trigger('mouseover') |
hover |
cy.get(sel).type('{enter}') |
press |
cy.get(sel).selectFile(f) |
upload |
cy.contains(t) |
локатор text="t" |
.should('contain', t) |
assertText |
.should('be.visible') / .should('not.be.visible') |
assertVisible / assertHidden |
.should('have.value', v) |
assertValue |
.should('have.length', n) |
assertCount |
cy.url().should('include', u) |
assertURL |
cy.title().should('eq', t) |
assertTitle |
.should('be.enabled') / .should('be.disabled') |
assertEnabled / assertDisabled |
.should('be.checked') |
assertChecked |
cy.matchImageSnapshot() (плагин) |
визуальный чекпоинт (встроен) |
Селекторы
Cypress опирается на атрибуты data-cy / data-test. Mockarty записывает
именно их ([data-testid='x'], [data-cy='x'] или тот атрибут, что использует
ваше приложение), плюс text, role, id и структурный CSS — выбирая самый
стабильный и сохраняя альтернативы, чтобы прогон самозаживлялся, когда
селектор «уплыл».
Fixtures, config и retries
| Cypress | Mockarty |
|---|---|
cy.fixture() / Cypress.env() |
envVars прогона, ссылка {{name}} в URL / значениях |
baseUrl в cypress.config.js |
переменная окружения для подстановки |
cy.session() (залогиненное состояние) |
сохранённый storage-state — прогон авторизованным («войди один раз, гоняй месяц») |
retries |
пошаговые ассерты сами ждут/повторяют перед провалом |
viewportWidth / viewportHeight |
опция прогона viewport ("1280x800") |
| флаг браузера | опция прогона browser (chromium / firefox / webkit) |
run = client.ui_tests.run(saved["id"], {
"envVars": {"BASE_URL": "https://staging.example.com"},
"browser": "chromium",
"viewport": "1280x800",
})
Что вы получаете
- Без сборки плагинов — видео, скриншоты, трейс и визуальная регрессия
встроены, а не сторонние плагины на вашей поддержке. - Тесты на Go / Python / Java, не только JavaScript.
- Общий раннер — без
cypress runс Node и браузером на каждом CI-агенте. - Один отчёт для браузера + API + нагрузки + fuzz + контрактов вместо
отдельного Cypress-дашборда.