Документация Миграция с Cypress

Миграция с Cypress на Mockarty

Вы пишете браузерные тесты на Cypress. Mockarty закрывает тот же цикл —
запись → готовый код → правка → запуск в реальном браузере → отчёт — и
добавляет то, что в Cypress приходится собирать самому:

  1. Запись без ручного подбора селекторов. Покликайте по приложению в браузере
    расширением Mockarty Capture и получите готовый тест на своём языке —
    Go, Python, Java или TypeScript (совместимо с Playwright). Никакого
    cypress open с песочницей селекторов и ручного cy.get(...).
  2. Один отчёт на всё. Браузерный прогон ложится рядом с API-, нагрузочными,
    fuzz- и контрактными — с пошаговыми скриншотами, видео, time-travel трейсом и
    встроенной визуальной регрессией (не нужен плагин cypress-image-diff).
  3. Настоящий кросс-браузерный движок. Прогоны идут на реальных 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.
Кратко:

  1. Запишите расширением Mockarty Capture (или живой сессией по API). Каждая
    запись сохраняется как UI-тест.

  2. Экспортируйте на своём языке:

    mockarty ui list
    mockarty ui export <ui-test-id> --lang python   # go | java | playwright | appium
    
  3. Правьте сгенерированный код и коммитьте рядом с приложением. Билдер SDK
    реконструирует ровно тот список шагов, который Mockarty исполняет, — что
    закоммитили, то и выполнится.

  4. Запустите на 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-дашборда.

Связанное