Mockarty CLI
Mockarty CLI – это мощный инструмент командной строки для мокирования API, тестирования, фаззинга, нагрузочного тестирования и интеграции с CI/CD. Работает в автономном режиме (бесплатно, сервер не требуется) и в подключённом режиме (с сервером Mockarty для полного доступа к возможностям платформы).
Без зависимостей. Один бинарник. Работает офлайн. 5 форматов отчётов.
URL-адреса в примерах: Во всех примерах используется
localhost:5770как адрес Mockarty по умолчанию. Если ваш экземпляр работает на удалённом сервере, заменитеlocalhost:5770на реальный адрес (например,https://mockarty.company.comилиhttp://192.168.1.50:5770). Подробнее — в разделе Полезные функции и советы.
Установка
macOS / Linux
curl -sSL https://mockarty.ru/install.sh | sh
Homebrew
brew install mockarty/tap/mockarty-cli
Прямая загрузка
Скачайте готовый бинарник для вашей платформы со
страницы релизов и положите
его в PATH:
chmod +x mockarty-cli-* && sudo mv mockarty-cli-* /usr/local/bin/mockarty-cli
Docker
docker run --rm mockarty/cli version
Проверка установки:
mockarty-cli version
Быстрый старт
1. Запуск автономного мок-сервера
echo '{"id":"hello","http":{"route":"/hello/:name","httpMethod":"GET"},
"response":{"statusCode":200,"payload":{"message":"Hello, $.pathParam.name!","uuid":"$.fake.UUID"}}}' > mock.json
mockarty-cli serve -f mock.json --port 8080
curl http://localhost:8080/hello/World
# {"message":"Hello, World!","uuid":"a1b2c3d4-..."}
2. Запуск коллекции API-тестов
mockarty-cli run -f collection.json --reporter cli
3. Создание мока на подключённом сервере
mockarty-cli login --server https://mockarty.company.com --token mk_xxx
mockarty-cli mock create -f mock.json
Конфигурация
Настройка URL сервера
По умолчанию mockarty-cli подключается к локальному инстансу Mockarty (http://localhost:5770). Переопределить таргет — self-hosted-узел или air-gapped-развёртывание — можно одним из четырёх способов. Строки выше перебивают строки ниже.
| Источник | Пример | Сохраняется между shell’ами |
|---|---|---|
флаг --server |
mockarty-cli --server https://mockarty.internal.corp mock list |
Нет, поштучно |
env MOCKARTY_SERVER |
export MOCKARTY_SERVER=https://mockarty.internal.corp |
Да, текущая оболочка |
~/.mockarty/config.json |
mockarty-cli config set-context corp --server https://mockarty.internal.corp |
Да, все оболочки |
| Default в бинарнике | http://localhost:5770 |
— |
Старая переменная MOCKARTY_SERVER_URL по-прежнему работает как синоним MOCKARTY_SERVER — старые CI-скрипты не сломаются. Если установлены обе, побеждает MOCKARTY_SERVER.
Подробнее — в Подключение к серверу.
Аутентификация
# OAuth (рекомендуется; использует текущий URL сервера — облако по умолчанию)
mockarty-cli auth login
# API-токен (CI/CD, скрипты)
mockarty-cli login --server https://mockarty.company.com --token mk_xxx
# Логин/пароль (интерактивный режим)
mockarty-cli login --server https://mockarty.company.com --user admin --password secret
# Указать имя контекста явно
mockarty-cli login --server https://mockarty.company.com --token mk_xxx --name production
# Проверить текущий статус
mockarty-cli login --status
Переменные окружения (переопределяют конфигурацию, идеально для CI/CD):
| Переменная | Описание |
|---|---|
MOCKARTY_SERVER |
URL сервера |
MOCKARTY_TOKEN |
API-токен |
MOCKARTY_NAMESPACE |
Пространство имён по умолчанию |
MOCKARTY_OUTPUT |
Формат вывода (table, json, wide, quiet) |
NO_COLOR |
Отключить цветной вывод |
Расположение файла конфигурации: ~/.mockarty/config.json
Контексты
Контексты позволяют управлять несколькими подключениями к серверам (аналогично контекстам kubectl):
# Просмотр всех контекстов
mockarty-cli config view
# Список контекстов в виде таблицы
mockarty-cli config get-contexts
# Переключение контекста
mockarty-cli config use-context production
# Создание/обновление контекста вручную
mockarty-cli config set-context staging --server https://staging.company.com --token mk_xxx --namespace test
# Удаление контекста
mockarty-cli config delete-context old-server
Справочник команд
Мок-сервер (serve) – Автономный режим
Запуск локального мок-сервера с полноценным движком резолвера Mockarty. Сервер не требуется.
mockarty-cli serve -f mocks/ # Из директории
mockarty-cli serve -f mock.json --port 9090 # Один файл, свой порт
mockarty-cli serve --har traffic.har # Из HAR-записи
mockarty-cli serve -f mocks/ --proto protos/ --grpc-port 50051 # С gRPC
mockarty-cli serve -f mocks/ --watch # Горячая перезагрузка при изменениях
mockarty-cli serve -f mocks/ --cors=false # Отключить CORS
| Флаг | По умолчанию | Описание |
|---|---|---|
-f, --file |
Директория с мок-файлами или один файл | |
--har |
HAR-файл для раздачи моков | |
--port |
8080 | Порт HTTP-сервера |
--host |
0.0.0.0 | Адрес привязки сервера |
--watch |
false | Следить за файлами и перезагружать при изменениях |
--cors |
true | Включить CORS-заголовки |
--proto |
Путь к .proto файлам (включает gRPC) | |
--grpc-port |
50051 | Порт gRPC-сервера |
Поддерживаемые протоколы: HTTP/REST, gRPC (с --proto), SOAP, MCP
Команда serve предоставляет SDK-совместимый CRUD API по адресу /api/v1/mocks, поэтому SDK на Go, Python и Java работают как с автономным serve, так и с admin node.
Управление моками (mock) – Подключённый режим
Управление моками на удалённом сервере Mockarty.
mockarty-cli mock create -f mock.json # Создать/обновить из файла
mockarty-cli mock create -f mocks/ # Все файлы в директории
cat mock.json | mockarty-cli mock create -f - # Из stdin
mockarty-cli mock list # Список всех моков
mockarty-cli mock list -o json # Вывод в JSON
mockarty-cli mock list -o wide # Расширенная таблица
mockarty-cli mock list --protocol grpc # Фильтр по протоколу
mockarty-cli mock get <mock-id> # Получить мок по ID
mockarty-cli mock delete <mock-id> # Удалить мок
mockarty-cli mock logs <mock-id> # Просмотр последних вызовов
mockarty-cli mock export -d backup/ # Экспорт в директорию
mockarty-cli mock import -f backup/ # Импорт из файлов
mockarty-cli mock apply -f mocks/ # Декларативное создание/обновление
mockarty-cli mock apply -f mocks/ --prune # + удалить моки, которых нет в файлах
Команда apply работает как kubectl apply – создаёт новые моки, обновляет существующие, а с флагом --prune удаляет с сервера моки, отсутствующие в ваших локальных файлах.
Тестирование API (run)
Запуск коллекций API-тестов с assertions и цепочкой переменных.
mockarty-cli run -f collection.json # Формат Mockarty
mockarty-cli run -f postman-export.json # Postman v2.1 (автоопределение)
mockarty-cli run --har traffic.har # Из HAR-записи
mockarty-cli run -f tests/ # Все коллекции в директории
| Флаг | По умолчанию | Описание |
|---|---|---|
-f, --file |
Файл коллекции или директория | |
--har |
HAR-файл для запуска как тестовая коллекция | |
--env-file |
Файл окружения (JSON) | |
--env-var |
Переменная inline (KEY=VALUE, можно повторять) | |
--iterations |
1 | Количество итераций |
--delay |
0 | Задержка между запросами |
--timeout |
30s | Таймаут на один запрос |
--bail |
false | Остановиться при первой ошибке |
--reporter |
cli | Формат отчёта (можно повторять) |
--folder |
Выполнить только запросы с данным префиксом имени |
Форматы отчётов (все 5 можно использовать одновременно):
mockarty-cli run -f tests.json \
--reporter cli \
--reporter json:results.json \
--reporter junit:report.xml \
--reporter allure:allure-results
| Формат | Тип | Описание |
|---|---|---|
cli |
Терминал | Цветной вывод в терминал |
json:FILE |
JSON | Машиночитаемые результаты |
junit:FILE |
XML | JUnit XML для CI/CD |
allure:DIR |
JSON | Allure Report Server |
html:FILE |
HTML | Автономный HTML-отчёт с логотипом Mockarty |
Коды выхода: 0 = все шаги прошли и все запрошенные отчёты записаны · 1 = шаг упал, не удалось записать отчёт или не выполнился ни один шаг (опечатка в dependsOn пропускает весь манифест — «ничего не проверено» это не успех) · 2 = прогон не начался (плохой флаг, нечитаемый манифест или лимит бесплатного тарифа).
Фаззинг безопасности (fuzz)
Фаззинг API-эндпоинтов для поиска уязвимостей. Бесплатный тариф: 1 поток, максимум 2 минуты.
mockarty-cli fuzz --target http://api.com --spec openapi.yaml
mockarty-cli fuzz --target http://api.com --har traffic.har --strategy all
mockarty-cli fuzz --target http://api.com --spec openapi.yaml \
--strategy mutation --duration 5m --threads 4 \
--out json:findings.json --out junit:fuzz-report.xml
| Флаг | По умолчанию | Описание |
|---|---|---|
--target |
Целевой URL для фаззинга (обязательный) | |
--spec |
Файл спецификации OpenAPI/Swagger | |
--har |
HAR-файл с начальными запросами | |
--strategy |
security | Стратегия: security, mutation, all |
--duration |
2m | Длительность фаззинга |
--threads |
1 | Количество параллельных потоков |
--timeout |
10s | Таймаут на один запрос |
--auth |
Значение заголовка Authorization | |
--categories |
Конкретные категории: sqli, xss, command_injection, path_traversal | |
--out |
Формат вывода (можно повторять): json:FILE, junit:FILE, allure:DIR |
Стратегии:
| Стратегия | Что тестирует |
|---|---|
security |
SQL-инъекции, XSS, инъекции команд, обход путей |
mutation |
Путаница типов, граничные значения, интеллектуальная мутация значений |
all |
Все стратегии вместе |
Нагрузочное тестирование (perf)
Нагрузочное тестирование с JavaScript-сценариями. Локальный CLI без сервера допускает до 500 VU и 2 минут на прогон.
mockarty-cli perf run script.js
mockarty-cli perf run script.js --vus 50 --duration 5m
mockarty-cli perf run script.js --rps 200
mockarty-cli perf run --har traffic.har --vus 5 --duration 30s
mockarty-cli perf run script.js --out json:results.json --out html:report.html
| Флаг | По умолчанию | Описание |
|---|---|---|
--vus |
1 | Количество виртуальных пользователей |
--duration |
30s | Длительность теста |
--rps |
0 | Целевое количество запросов в секунду (0 = темп задаётся VU) |
--har |
HAR-файл для генерации нагрузочного теста | |
--out |
Формат вывода (можно повторять): json:FILE, html:FILE |
Контрактное тестирование (contract)
Валидация моков, верификация реальных сервисов, обнаружение дрейфа, проверка безопасности деплоя и управление реестром API.
# Валидация моков по спецификации (требуется подключённый сервер)
mockarty-cli contract validate --spec openapi.yaml
# Верификация живого сервиса по спецификации
mockarty-cli contract verify --spec openapi.yaml --target http://api.staging.com
mockarty-cli contract verify --spec openapi.yaml --target http://api.staging.com --timeout 120s
# Обнаружение дрейфа моков — сравнение моков с ответами реального API
mockarty-cli contract drift --target http://api.staging.com
# Проверка безопасности деплоя версии сервиса
mockarty-cli contract can-i-deploy --participant user-service --version "$GIT_SHA" --to production
mockarty-cli contract can-i-deploy --contracts contract-id-1,contract-id-2
# После успешного деплоя запишите его в леджер — can-i-deploy начнёт резолвить реальные версии
mockarty-cli contract record-deployment --service user-service --version "$GIT_SHA" --environment production
# Реестр API — список опубликованных API-спецификаций
mockarty-cli contract registry list
| Подкоманда | Описание |
|---|---|
validate |
Валидация моков по OpenAPI-спецификации (подключённый режим) |
verify |
Верификация живого сервиса по OpenAPI-спецификации |
drift |
Сравнение моков с ответами реального API для обнаружения структурных различий |
can-i-deploy |
Проверка, что все контракты потребителей проходят перед деплоем |
record-deployment |
Запись деплоя/релиза в леджер деплоев (запускайте в CI сразу после выката) |
registry list |
Список API, опубликованных в реестре |
Коды выхода: 0 = контракт валиден / безопасно деплоить · 1 = нарушения, дрейф или заблокированный деплой · 2 = проверка не выполнялась (не задан флаг, не читается спека, сервер недоступен). С -o json код тот же, что и у человекочитаемого вывода.
Хаос-инженерия (chaos) – PRO
Запуск хаос-экспериментов против Kubernetes-кластеров. Требуется PRO-лицензия и настроенный K8s-кластер.
Управление кластерами:
# Добавить K8s-кластер в конфигурацию CLI
mockarty-cli chaos cluster add --name staging --kubeconfig ~/.kube/config --context staging-ctx
mockarty-cli chaos cluster add --name prod --kubeconfig ~/.kube/prod.yaml \
--allowed-namespaces app,test --denied-namespaces kube-system
# Список, переключение, проверка, инспекция, удаление кластеров
mockarty-cli chaos cluster list
mockarty-cli chaos cluster use staging
mockarty-cli chaos cluster test
mockarty-cli chaos cluster info
mockarty-cli chaos cluster remove old-cluster
Запуск экспериментов:
# Запуск из флагов
mockarty-cli chaos run --type pod_kill --k8s-namespace app --selector app=web --duration 5m
mockarty-cli chaos run --type network_partition --deployment my-svc --k8s-namespace app --duration 2m --auto-rollback
# Запуск из YAML-файла
mockarty-cli chaos run -f experiment.yaml
# Запуск из пресета
mockarty-cli chaos preset list
mockarty-cli chaos preset run --preset chaos-monkey --k8s-namespace app --selector app=web
mockarty-cli chaos preset run --preset network-partition --k8s-namespace app --selector app=api --duration 3m
Жизненный цикл экспериментов:
mockarty-cli chaos list # Список экспериментов
mockarty-cli chaos list --status active # Фильтр по статусу
mockarty-cli chaos get <experiment-id> # Детали эксперимента
mockarty-cli chaos abort <experiment-id> # Прервать активный эксперимент
mockarty-cli chaos report <experiment-id> # JSON-отчёт
mockarty-cli chaos report <experiment-id> --format html --output report.html
Управление оператором (K8s):
mockarty-cli chaos operator install # Установить оператор хаоса
mockarty-cli chaos operator install --namespace mockarty-chaos
mockarty-cli chaos operator status # Проверить состояние оператора
mockarty-cli chaos operator uninstall # Удалить оператор
install останавливается и возвращает не ноль, если не удалось создать
предпосылку (ServiceAccount, ClusterRole, binding): оператор без своих прав
запустится и будет падать на каждом эксперименте, поэтому он вообще не
разворачивается. status возвращает не ноль, когда оператора нет или он не
готов, — на этом можно ждать в CI. uninstall возвращает не ноль, пока в
кластере остаётся хоть один объект. chaos cluster test проходит только
если отработала и проба возможностей — подключиться это лёгкая половина.
Интерактивный TUI:
mockarty-cli tui chaos # Интерактивный TUI
| Подкоманда | Описание |
|---|---|
cluster add/list/use/test/info/remove |
Управление подключениями к K8s-кластерам |
run |
Запуск эксперимента из флагов или YAML-файла |
preset list/run |
Список и запуск пресетов экспериментов |
list |
Список экспериментов (фильтр через --status) |
get |
Детали эксперимента |
abort |
Прервать активный эксперимент |
report |
Скачать отчёт (JSON или HTML) |
operator install/status/uninstall |
Управление оператором хаоса в K8s |
tui |
Интерактивный TUI-режим |
Встроенные пресеты: chaos-monkey, network-partition, scale-to-zero, resource-pressure, rolling-restart-storm, dns-disruption.
Типы сбоев: pod_kill, pod_kill_random, network_partition, network_delay, network_loss, deployment_restart, scale, node_drain, resource_stress, dns_disruption, io_chaos, time_chaos.
Управление кластером (cluster) – Подключённый режим
Управление Kubernetes-кластером Mockarty через API admin-узла.
mockarty-cli cluster status # Показать статус кластера
mockarty-cli cluster upgrade --tag 1.3.0 # Обновить все компоненты
mockarty-cli cluster scale resolver --replicas 5 # Масштабировать компонент
mockarty-cli cluster restart runner # Rolling-перезапуск
mockarty-cli cluster logs <pod-name> --tail 100 # Стриминг логов пода
mockarty-cli cluster logs <pod-name> --follow # Следить за логами
# Добавление/удаление интеграций
mockarty-cli cluster add-runner --name sandbox-runner --namespace sandbox
mockarty-cli cluster add-resolver --name shared-resolver --scope admin --replicas 2
mockarty-cli cluster remove-integration sandbox-runner
| Подкоманда | Описание |
|---|---|
status |
Общий статус кластера и состояние компонентов |
upgrade |
Обновление всех компонентов на новый тег образа |
scale |
Масштабирование компонента (admin, resolver, runner, orchestrator) |
restart |
Rolling-перезапуск компонента |
logs |
Стриминг логов конкретного пода |
add-runner |
Добавить runner-интеграцию в кластер |
add-resolver |
Добавить resolver-интеграцию в кластер |
remove-integration |
Удалить интеграцию по имени |
Генерация кода (generate)
Генерация определений моков из API-спецификаций, HAR-записей и коллекций Postman.
# Из OpenAPI (через подключённый сервер)
mockarty-cli generate openapi spec.yaml -o mocks/
mockarty-cli generate openapi spec.yaml --upload # Сгенерировать и загрузить на сервер
# Из HAR-записи (локально)
mockarty-cli generate har recording.har -o mocks/
# Из коллекции Postman (локально)
mockarty-cli generate postman collection.json -o mocks/
| Подкоманда | Описание |
|---|---|
openapi |
Генерация моков из OpenAPI/Swagger-спецификации (сервер или локально) |
har |
Генерация моков из HAR-записи (локально) |
postman |
Конвертация коллекции Postman в формат моков Mockarty (локально) |
Утилиты
Проверка здоровья:
mockarty-cli health # Проверить состояние сервера
mockarty-cli health --verbose # Подробная информация (версия, аптайм, лицензия)
mockarty-cli health --wait --timeout 60s # Ждать до состояния healthy
Ввод HTTP-матчера:
mockarty-cli matcher status # Режим, ревизия снимка и находки по пространствам имён
mockarty-cli matcher status -o json # Тот же отчёт в JSON — для пайплайна
Режим матчера выбирается при запуске через MOCKARTY_HTTP_MATCH_MODE (off,
shadow, on), поэтому команда только читает: ввод и откат разнесены на один
перезапуск. В shadow находки — это расхождения скомпилированного и старого
матчера, поэтому пространство имён без находок наблюдалось согласованным. В on
находка записывает запрос, который скомпилированный индекс не смог обслужить и
который отдал старый матчер, — так деградировавший ввод остаётся видимым. Находки
не меняют код возврата: это доказательства о миграции, а не отказ сервера.
Ожидание готовности (CI/CD):
mockarty-cli wait # Ждать healthy-статуса
mockarty-cli wait --mocks user-api,order-api # Ждать конкретных моков
mockarty-cli wait --mock-count 5 # Ждать N моков
mockarty-cli wait --timeout 120s --interval 5s # Свои таймауты
Проброс портов:
mockarty-cli tunnel --local 5770 --remote server:5770
mockarty-cli tunnel --local 50051 --remote server:50051 # gRPC
Управление хранилищами (подключённый режим):
mockarty-cli store global get # Получить все значения глобального хранилища
mockarty-cli store global set <key> <value> # Установить пару ключ-значение
mockarty-cli store global delete <key> # Удалить ключ
mockarty-cli store chain get <chain-id> # Получить значения цепочного хранилища
mockarty-cli store chain set <chain-id> <key> <value> # Установить пару ключ-значение в цепочке
mockarty-cli store chain delete <chain-id> <key> # Удалить ключ из цепочки
Управление пространствами имён (подключённый режим): (алиас: ns)
mockarty-cli namespace current # Показать текущее пространство имён
mockarty-cli namespace use <name> # Установить пространство имён по умолчанию
mockarty-cli namespace list # Список доступных пространств имён
mockarty-cli namespace create <name> # Создать новое пространство имён
# Короткая форма:
mockarty-cli ns current
Экспорт журнала аудита (admin):
# CSV-архив для compliance-аудита
mockarty-cli audit export --format csv --output audit.csv
# Syslog RFC 5424 — одна запись на строку, поток в SIEM-коллектор
mockarty-cli audit export --format syslog > audit.log
# ArcSight CEF — прямой ingestion в SIEM (Splunk/ArcSight/QRadar/MaxPatrol/KUMA/RuSIEM)
mockarty-cli audit export --format cef --output audit.cef
# Фильтры по пользователю, действию, ресурсу, namespace, временному окну (мс от эпохи)
mockarty-cli audit export --format json --user-id u-42 --action login \
--from 1712345678000 --to 1712431678000
Управление токенами (PRO):
mockarty-cli token create --name "ci-runner" --expires 90d
mockarty-cli token list
mockarty-cli token delete <token-id>
Интерактивный TUI:
mockarty-cli tui
mockarty-cli tui --server http://localhost:8080
Навигация стрелками, Enter для перехода внутрь, Esc для возврата, q для выхода. Горячие клавиши: c создать, e редактировать, d удалить, n новый тест, u загрузить, / поиск.
Сниффер трафика (PRO):
mockarty-cli sniff --target http://real-api.com --port 9090 -o traffic.har
# Направьте ваше приложение на localhost:9090, Ctrl+C для остановки и сохранения HAR
AI-агент чат (PRO):
mockarty-cli agent "create a mock for GET /api/users returning a list"
mockarty-cli agent # Интерактивный режим чата
Проверяйте самообученные наблюдения до того, как они попадут в следующие миссии:
mockarty-cli agent knowledge review list --state candidate
mockarty-cli agent knowledge review show <id>
mockarty-cli agent knowledge review decide <id> --decision publish \
--expected-version 1 --reason "Подтверждено доказательством из миссии" \
--idempotency-key review-<id>-v1
Решение принимают владельцы и администраторы пространства; обычные участники
могут изучать записи. --state published|superseded|expired|deleted открывает
историю жизненного цикла.
Если после обновления появилась восстанавливаемая история чата, созданная до внедрения привязки к пространствам имён, проверьте её явно. Команда списка показывает только метаданные; экспорт записывает историю в приватный файл и не перезаписывает его без флага --force. Исходное пространство имён неизвестно, поэтому для восстановления требуется выбрать целевое пространство и явно подтвердить это:
mockarty-cli agent sessions legacy list
mockarty-cli agent sessions legacy export <legacy-session-id> \
--file legacy-session.json
mockarty-cli agent sessions legacy claim <legacy-session-id> \
--namespace payments --acknowledge-unknown-origin
Для следующей страницы метаданных используйте --cursor, а для следующей страницы экспорта — --after-event-id, если ответ сообщает о наличии продолжения. Просматривать и восстанавливать изолированную историю может только исходная учётная запись; для восстановления также нужен доступ на запись в выбранное пространство имён.
Резервное копирование/восстановление (PRO):
mockarty-cli backup create
mockarty-cli backup list
mockarty-cli backup download <id> -o backup.tar.gz
Установка платформы (install, update, setup):
# Установка компонентов платформы
mockarty-cli install mockarty # Скачать последний бинарник
mockarty-cli install mockarty --mode docker-compose # Сгенерировать docker-compose.yml
mockarty-cli install mockarty --mode sqlite # Режим одного бинарника на SQLite
mockarty-cli install --all # Установить все компоненты
mockarty-cli install mockarty --version 1.2.3 # Конкретная версия
# Проверка обновлений
mockarty-cli update
# Сгенерировать конфигурацию развёртывания без скачивания бинарников
mockarty-cli setup docker-compose
mockarty-cli setup env
Управление лицензией:
mockarty-cli license # Показать информацию о текущей лицензии
mockarty-cli license features # Список всех возможностей и их доступность
mockarty-cli license activate <key> # Активировать PRO-ключ
Версия и выход:
mockarty-cli version # Показать версию CLI
mockarty-cli logout # Очистить сохранённые учётные данные
Автодополнение в оболочке:
mockarty-cli completion bash|zsh|fish|powershell
# Перенаправьте вывод в директорию автодополнений вашей оболочки
Интеграция с CI/CD
GitHub Actions
name: API Tests
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Установка Mockarty CLI
run: curl -sSL https://mockarty.ru/install.sh | sh
- name: Запуск мок-сервера
run: mockarty-cli serve -f mocks/ --port 8080 &
- name: Ожидание готовности сервера
run: mockarty-cli wait --server http://localhost:8080 --timeout 30s
- name: Запуск API-тестов
run: |
mockarty-cli run -f tests/ \
--reporter cli \
--reporter junit:report.xml
- name: Фаззинг безопасности
run: |
mockarty-cli fuzz --target http://localhost:8080 \
--spec openapi.yaml \
--out junit:fuzz-report.xml
- name: Загрузка результатов тестов
if: always()
uses: actions/upload-artifact@v4
with:
name: test-reports
path: |
report.xml
report.html
fuzz-report.xml
GitLab CI
api-tests:
image: mockarty/cli:latest
script:
- mockarty-cli serve -f mocks/ --port 8080 &
- mockarty-cli wait --server http://localhost:8080
- mockarty-cli run -f tests/ --reporter junit:report.xml --reporter allure:allure-results
- mockarty-cli fuzz --target http://localhost:8080 --spec openapi.yaml --out junit:fuzz-report.xml
artifacts:
when: always
reports:
junit: [report.xml, fuzz-report.xml]
paths: [allure-results/]
Коды выхода упрощают интеграцию с CI: 0 = успех · 1 = работа выполнена и провалилась · 2 = работа не выполнялась (опечатка в подкоманде, неизвестный флаг, не настроен сервер или фича не входит в лицензию). Ветвитесь по 2, чтобы отличить сломанный шаг пайплайна от красных тестов. Полная таблица: справочник команд CLI.
Запуск того, что живёт на сервере
CI обычно не носит набор в своём репозитории — коллекция и профиль нагрузки
ведутся в Mockarty, а pipeline просто их запускает:
# Запустить коллекцию, которую ведут в интерфейсе, по имени
mockarty-cli run collection "Smoke"
# Отправить сохранённый профиль нагрузки на флот раннеров и дождаться результата
mockarty-cli perf run-config "Nightly checkout" --wait
Оба принимают UUID или имя. Имя, совпавшее с двумя сущностями, отклоняется со
списком кандидатов, а не угадывается: запустить не тот набор и отчитаться об
успехе хуже, чем остановиться.
Экспорт прогона обратно в Allure
mockarty-cli testplan report выгружает завершённый прогон тест-плана с
сервера как ZIP-архив Allure — тот же артефакт, что даёт кнопка экспорта
в интерфейсе. Это путь ухода без блокировки: исторические данные никогда не
запираются внутри продукта.
# Прогон → ZIP Allure, распаковать, собрать отчёт:
mockarty-cli testplan report <run-id> --plan <plan-id> --zip ./allure.zip
unzip -q ./allure.zip -d ./allure-results
allure generate ./allure-results -o ./allure-report
allure open ./allure-report
В распакованном каталоге есть всё, что нужно Allure:
- по одному
<uuid>-result.jsonна тест, со стабильнымиhistoryIdи
testCaseId— чтобы тренды Allure сходились между прогонами; - каждое вложение отдельным файлом
<uuid>-attachment.<ext>со ссылкой
из result-JSON; categories.json,environment.propertiesиexecutor.json.
Другие форматы — та же команда отдаёт прогон в том виде, который
потребляет ваш pipeline:
# JUnit XML для Jenkins / GitLab / GitHub Actions:
mockarty-cli testplan report <run-id> --plan <plan-id> --format junit --out ./junit.xml
# Markdown-сводка, чтобы вставить в merge request:
mockarty-cli testplan report <run-id> --plan <plan-id> --format markdown
| Флаг | Назначение |
|---|---|
--plan |
Идентификатор плана-владельца (UUID или числовой) — обязателен |
--format |
zip/allure (по умолчанию), json, junit, markdown, unified, html |
--out |
Записать в этот файл (по умолчанию — stdout) |
--zip |
Сокращение для --format=zip --out=<путь> — форма для CI-артефакта |
Обратное направление — mockarty-cli allure upload ./allure-results —
загружает каталог Allure обратно в Mockarty, интеграция двусторонняя.
В CI эти команды сообщают, что произошло на самом деле. allure upload
падает, если в каталоге нет ни одного *-result.json (прогон ничего не
отчитал), если нет вложения, на которое ссылается результат или фикстура,
либо если запись прогона доехала, а крупное вложение загрузить не удалось.
При прерывании выгрузки команда также сообщает о неотправленных результатах.
allure launch close обычно последний шаг задания, поэтому он несёт настоящий итог лаунча:
код возврата не ноль, если лаунч закрыт как failed или в него не приехало ни
одного результата, в том числе при повторном закрытии старого пустого
лаунча. Внешний запуск ждёт выгрузки результатов перед завершением; для
действительно прерванного пайплайна есть --abort.
allure export падает, если записал бы пустой каталог: из такого
allure generate отчёт не соберёт.
Allure-результаты отправляются с постоянным ключом, вычисленным из UUID
результата и запуска. Если после POST оборвалось соединение или сервер вернул
5xx, CLI повторяет тот же payload и получает прежний ID прогона кейса.
Изменённый результат с прежним ключом даёт 409: новой попытке нужен новый
UUID результата. Перед использованием такого повтора обновите сервер
Mockarty: старые сборки не распознают ключ.
allurectl watch --results ./allure-results -- pytest принимает исходный
флаг каталога результатов. Watch ждёт, пока появится упомянутое вложение, и
завершается с ненулевым кодом, если после окончания тестовой команды
вложение всё ещё не удалось загрузить. Вложения фикстур, появившиеся после
результата, добавляются в его прогон по завершении тестовой команды. Пустой
каталог результатов также даёт ненулевой код.
Если тестовая команда завершилась с положительным ненулевым кодом,
allurectl watch возвращает в CI тот же код.
Команды allurectl watch и mockarty-cli allure watch по умолчанию создают
или возобновляют запуск для CI-задания, передают его ID тестовой команде,
загружают результаты и завершают запуск после доставки всех результатов и вложений.
Идентификаторы заданий GitLab и теги сборок Jenkins разделяют параллельные
задания. Локально приватный файл ключа в каталоге результатов переживает
прерывание процесса и удаляется после подтверждённого завершения. Свой
постоянный ключ задаётся через ALLURE_LAUNCH_KEY или MOCKARTY_LAUNCH_KEY.
Изменённый запрос с прежним ключом даёт 409; новому заданию нужен новый
ключ. При неполной загрузке watch оставляет запуск открытым для повтора.
Для загрузки без автоматического управления запуском используйте
--no-auto-launch с любым вариантом команды. Прежний флаг --auto-launch
также поддерживается. Если запуском управляет сам CI, сначала выполните
launch create, передайте ALLURE_LAUNCH_ID, запустите
watch --require-launch, затем завершите или отмените запуск в cleanup-шаге.
--require-launch проверяет namespace и активный статус до начала тестов;
ему нужен явный ID либо отдельный для задания ALLURE_LAUNCH_FILE, а не
общий cache-файл.
Для повторного запуска в удалённом GitLab или Jenkins команда allure rerun-failed --ci-config <id> передаёт заданию ID запуска. Если задание
запускает тесты через allurectl watch -- <команда>, CLI сам загрузит из
Mockarty план только с упавшими тестами и установит ALLURE_TESTPLAN_PATH
для дочерней команды. Заданию нужны адрес Mockarty, токен и namespace.
Если фреймворк запускается без allurectl watch, передайте в задание файл
из --out и установите там ALLURE_TESTPLAN_PATH.
Алиасы бинаря для allurectl и поддерживаемых команд testit-cli
mockarty-cli определяет имя бинаря, под которым он вызван, и
автоматически роутит в нужный subcommand. То есть CI-пайплайн,
который вызывает allurectl upload, может использовать алиас бинаря.
Алиас testit-cli направляет поддерживаемые команды, но существующие
адаптеры Test IT по-прежнему отправляют HTTP-запросы в Test IT. Как
подготовить результаты для Mockarty, описано в
руководстве Test IT:
Для каталога JUnit XML команда testit-cli results import --results ./reports
работает как алиас results upload; обе используют один импортёр результатов
Mockarty. Теги и ссылки прогона, а также HTTP-протокол официальных адаптеров
фреймворков требуют отдельного перехода.
# Symlink (Linux / macOS):
ln -s /usr/local/bin/mockarty-cli /usr/local/bin/allurectl
ln -s /usr/local/bin/mockarty-cli /usr/local/bin/testit-cli
# Или rename для герметичного образа:
cp mockarty-cli allurectl
# Или copy + rename в Dockerfile:
COPY mockarty-cli /usr/local/bin/allurectl
Дальше указываем стандартные env-vars на Mockarty-сервер и запускаем
те же команды что и раньше:
export ALLURE_ENDPOINT=https://mockarty.company.com
export ALLURE_TOKEN=mk_...
export ALLURE_PROJECT_ID=qa-team
allurectl upload ./allure-results # → 'mockarty-cli allure upload'
allurectl launch create --name "PR-42" # → 'mockarty-cli allure launch create'
Подкоманда testit принимает TMS_URL / TMS_PRIVATE_TOKEN /
TMS_PROJECT_ID как запасные настройки подключения. В них должны быть
URL Mockarty, его API-токен и пространство имён. Токен Test IT и числовой
ID проекта нельзя использовать вместо этих значений.
Если CI уже пишет JUnit XML, сохраните форму команд Test IT:
export TMS_URL=https://mockarty.company.com
export TMS_PRIVATE_TOKEN='YOUR_MOCKARTY_TOKEN'
export TMS_PROJECT_ID=qa-team
testit-cli testrun create --output ./testrun.id
testit-cli results upload -r ./junit-reports -ti "$(cat ./testrun.id)"
testit-cli testrun complete "$(cat ./testrun.id)"
Этот путь передаёт базовые результаты JUnit. Шаги, параметры и вложения
framework-адаптеров Test IT требуют более богатого адаптера либо
преобразованного JSON с файлами вложений; см.
руководство Test IT.
Распознаваемые имена (без учёта регистра, с опциональным .exe):
| Имя бинаря | Маршрутизируется в |
|---|---|
allurectl |
mockarty-cli allure … |
testit, testit-cli, testitcli, tms-cli |
mockarty-cli testit … |
TestIT — конфигурационные UUID
Загрузка результатов может указать UUID конфигурации
(--configuration-id или TMS_CONFIGURATION_ID). Он сохраняется на
каждом результате; создание ad-hoc прогона не сохраняет ID конфигурации.
Команды в поддереве testit configuration позволяют
управлять значением без TestIT admin UI. testrun complete завершится
ошибкой, если в запуск не поступило ни одного результата, в том числе при
повторном завершении старого пустого запуска:
# Сгенерировать свежий UUID4 и сразу записать в env-var:
export TMS_CONFIGURATION_ID="$(mockarty-cli testit configuration generate)"
# Показать configuration UUID'ы, уже встречавшиеся в недавних
# external-прогонах текущего namespace (сортированно, без дублей):
mockarty-cli testit configuration list
# JSON-вывод для скриптов:
mockarty-cli testit configuration list --format json
list сканирует case_context.metadata.testit.configurationId
в недавних прогонах namespace и выводит уникальные значения.
generate — оффлайн, без сетевого вызова, просто UUID4 — работает
в cold-boot CI до настройки Mockarty endpoint.
Бесплатная версия vs PRO
| Возможность | Бесплатно | PRO |
|---|---|---|
| Мок-сервер (HTTP, gRPC, SOAP, MCP) | Да | Да |
| Запуск тестов (Mockarty + Postman + HAR) | Да | Да |
| Все форматы отчётов (CLI, JSON, JUnit, Allure, HTML) | Да | Да |
| Контрактное тестирование | Да | Да |
| Интерактивный TUI | Да | Да |
| Проброс портов (tunnel) | Да | Да |
| Установщик платформы | Да | Да |
| Автодополнение в оболочке | Да | Да |
| Фаззинг (1 поток, 2 мин) | Да | Да |
| Нагрузочное тестирование (локально: 500 VU, 2 мин) | Да | Да |
| Фаззинг без ограничений (потоки, длительность) | Да | |
| Нагрузочное тестирование без ограничений (VU, длительность) | Да | |
| Сниффер трафика (экспорт HAR) | Да | |
| AI-агент чат | Да | |
| Резервное копирование / восстановление | Да | |
| Управление токенами | Да | |
| Управление моками в подключённом режиме | Да | |
| Управление кластером (K8s) | Да |
PRO активируется подключением к лицензированному серверу Mockarty или установкой переменной MOCKARTY_LICENSE_KEY.
Форматы вывода
Все команды, отображающие данные, поддерживают флаг -o:
| Формат | Флаг | Описание |
|---|---|---|
| Table | -o table |
По умолчанию. Человекочитаемые выровненные колонки |
| Wide | -o wide |
Расширенная таблица с дополнительными колонками |
| JSON | -o json |
Машиночитаемый вывод в JSON |
| Quiet | -o quiet |
Только ID, по одному на строку (для скриптов) |
Примеры:
mockarty-cli mock list -o json | jq '.[] | .id'
mockarty-cli mock list -o quiet | xargs -I{} mockarty-cli mock delete {}
mockarty-cli mock list -o wide
Установка формата по умолчанию через переменную окружения: export MOCKARTY_OUTPUT=json
Глобальные флаги
Эти флаги работают со всеми командами:
| Флаг | Переменная окружения | Описание |
|---|---|---|
--server |
MOCKARTY_SERVER |
URL сервера Mockarty |
--token |
MOCKARTY_TOKEN |
API-токен |
--namespace |
MOCKARTY_NAMESPACE |
Целевое пространство имён |
-o, --output |
MOCKARTY_OUTPUT |
Формат вывода |
--insecure |
MOCKARTY_TLS_INSECURE |
Пропустить проверку TLS |
--no-color |
NO_COLOR |
Отключить цветной вывод |
Устранение проблем
| Симптом | Причина | Решение |
|---|---|---|
mockarty-cli: command not found |
Бинарь не в PATH |
Переместите его в /usr/local/bin/ или добавьте директорию в PATH |
connection refused |
Сервер не запущен или неверный URL в --server |
Проверьте MOCKARTY_SERVER и выполните mockarty-cli health |
401 unauthorized |
Отсутствует или истёк API-токен | Выполните mockarty-cli login ещё раз или явно задайте MOCKARTY_TOKEN |
403 forbidden на пространстве имён |
Токен ограничен другим пространством | Используйте --namespace <ns> или токен с доступом к нужному пространству |
x509: certificate signed by unknown authority |
Самоподписанный сертификат на сервере | Добавьте --insecure для локальной разработки или установите CA-сертификат сервера на вашу машину |
perf run падает с «free tier limit exceeded» |
VUs, RPS или длительность выше лимитов бесплатной версии | Уменьшите значения или перейдите на PRO; см. Нагрузочное тестирование |
mock create возвращает 409 conflict |
Мок с таким ID уже существует | Удалите существующий мок через mockarty-cli mock delete <id> и пересоздайте или задайте уникальный ID |
| HAR-импорт даёт пустой результат | В HAR-файле нет HTTP/HTTPS-записей (или все отфильтрованы) | Проверьте HAR-файл в просмотрщике и пересохраните, отключив фильтры браузера |
| Установка chaos-оператора не находит kubeconfig | Не задан KUBECONFIG или файл отсутствует |
Экспортируйте KUBECONFIG=~/.kube/config или передайте --kubeconfig <путь> в mockarty-cli chaos cluster add |
Для проблем с подключением повторите команду с mockarty-cli health --verbose, чтобы увидеть полный ответ сервера, либо задайте MOCKARTY_OUTPUT=json для машинного формата.
Связанная документация
Результаты выбранных кейсов из CI
Сохранённая CI job, запущенная для выбранных кейсов, получает приватный
MOCKARTY_CI_CONTEXT. Оставляйте его внутри этой job: не печатайте и не добавляйте
в файлы окружения тестового фреймворка. allure upload и allure watch используют
зафиксированные идентификаторы кейсов и отправляют только подходящие результаты
в существующий запуск Mockarty. После отправки они сообщают итог группы; если
результаты или файлы не удалось отправить, сообщают ошибочный итог. Сервер
продолжает показывать отсутствующие результаты выбранных кейсов как отсутствующие.
В этом режиме watch создаёт локальный ALLURE_TESTPLAN_PATH для фреймворков,
поддерживающих выбор тестов Allure, и удаляет приватный контекст из окружения
дочерней команды. Чтобы не выполнять невыбранные тесты, команда должна учитывать
testplan. Результаты ждут завершения команды: файлы setup и teardown включаются
до отправки результата. Большие файлы загружаются перед результатом. После
неоднозначного ответа на отправку выбранного результата CLI не повторяет запрос
автоматически; проверьте запуск перед новой попыткой.
Без приватного контекста действуют прежние правила upload и watch. CLI использует
настроенные endpoint, token и namespace Mockarty; для этих отчётов сервер
сторонней системы управления тестированием не требуется.