From dad6da9836d9d2f18f1241caa271fd622681bb8c Mon Sep 17 00:00:00 2001 From: kseniataranov Date: Wed, 8 Apr 2026 09:30:39 +0300 Subject: [PATCH 1/8] docs(config): draft --- docs/basic-guides/configuration.mdx | 0 .../current/basic-guides/configuration.mdx | 418 ++++++++++++++++++ 2 files changed, 418 insertions(+) create mode 100644 docs/basic-guides/configuration.mdx create mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/basic-guides/configuration.mdx diff --git a/docs/basic-guides/configuration.mdx b/docs/basic-guides/configuration.mdx new file mode 100644 index 00000000..e69de29b diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/basic-guides/configuration.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/basic-guides/configuration.mdx new file mode 100644 index 00000000..6a9de73b --- /dev/null +++ b/i18n/ru/docusaurus-plugin-content-docs/current/basic-guides/configuration.mdx @@ -0,0 +1,418 @@ +import Admonition from "@theme/Admonition"; + +# Конфигурация + +// TODO: подумать про более логичную структуру статьи + +## Введение + +Testplane настраивается тремя способами: через конфигурационный файл, переменные окружения и аргументы командной строки. + +Конфигурационный файл — основной источник настроек: в нём указывают браузеры, пути к тестам, параллельность, плагины и тайм-ауты. Переменные окружения и CLI-аргументы позволяют переопределить отдельные параметры без изменения файла, это удобно для CI/CD или локальных экспериментов. + +Полный список параметров в [справочнике по конфигурации](../reference/config/main.mdx). + +## Где Testplane ищет конфигурационный файл {#config-location} // TODO: переименовать + +При запуске Testplane ищет конфигурационный файл в текущей рабочей директории. Поддерживаются следующие имена файлов (в порядке приоритета): + +- `.testplane.conf.ts` +- `.testplane.conf.js` +- `testplane.config.ts` +- `testplane.config.js` +- `testplane.config.cts` // +- `testplane.config.cjs` // +- `.hermione.conf.ts` (для обратной совместимости) // +- `.hermione.conf.js` (для обратной совместимости) // TODO: вынести в плашку + +Если нужно использовать конфиг из другого места, укажите путь через опцию `--config`: + +```bash +npx testplane --config ./configs/testplane.local.ts +``` + +## Способы задания параметров {#config-sources} + +Параметры конфигурации можно задавать тремя способами: + +1. Файл конфигурации: основной способ, подходит для большинства настроек +2. Переменные окружения: удобно для CI/CD и чувствительных данных +3. Аргументы CLI: для быстрого переопределения при запуске + +### Приоритет параметров {#priority} + +При конфликте значений применяется следующий приоритет (от высшего к низшему): + +| Приоритет | Источник | Пример | +|-----------|----------|--------| +| 1 | CLI аргумент | `--base-url http://example.com` | +| 2 | Переменная окружения | `testplane_base_url=http://example.com` | +| 3 | Файл конфигурации | `baseUrl: "http://example.com"` | +| 4 | Значение по умолчанию | — | + +### Переопределение через CLI {#cli-override} + +Любой параметр конфигурации можно переопределить через CLI-аргумент. Имя аргумента формируется из имени параметра в конфиге: + +1. Замените `camelCase` на `kebab-case` (например, `baseUrl` → `base-url`) +2. Для вложенных параметров соедините все уровни через дефис +3. Добавьте `--` в начале + +```bash +# baseUrl в конфиге → --base-url в CLI +npx testplane --base-url http://example.com + +# system.debug в конфиге → --system-debug в CLI +npx testplane --system-debug true + +# browsers.firefox.sessionsPerBrowser в конфиге → --browsers-firefox-sessions-per-browser в CLI +npx testplane --browsers-firefox-sessions-per-browser 10 +``` + +### Переопределение через переменные окружения {#env-override} + +Параметры также можно переопределить через переменные окружения: + +1. Замените `camelCase` на `snake_case` (например, `baseUrl` → `base_url`) +2. Для вложенных параметров соедините все уровни через `_` +3. Добавьте префикс `testplane_` + +```bash +# baseUrl в конфиге → testplane_base_url +testplane_base_url=http://example.com npx testplane + +# system.debug в конфиге → testplane_system_debug +testplane_system_debug=true npx testplane + +# browsers.firefox.sessionsPerBrowser в конфиге → testplane_browsers_firefox_sessions_per_browser +testplane_browsers_firefox_sessions_per_browser=10 npx testplane +``` + + + Для обратной совместимости также поддерживается префикс `hermione_`. + + +Также доступны специальные переменные окружения: // TODO: уточнить + +| Переменная | Описание | +|------------|----------| +| `TESTPLANE_SKIP_BROWSERS` | Пропустить указанные браузеры: `TESTPLANE_SKIP_BROWSERS=ie10,ie11` | +| `TESTPLANE_SETS` | Запустить только указанные сеты: `TESTPLANE_SETS=desktop,touch` | + +## Наследование параметров {#inheritance} + +Testplane поддерживает каскадное наследование параметров: настройки, заданные на корневом уровне конфига, применяются ко всем браузерам. Браузеры могут переопределять эти значения. + +### Пример наследования {#inheritance-example} + +```typescript title="testplane.config.ts" +import type { ConfigInput } from "testplane"; + +export default { + // Корневые настройки — применяются ко всем браузерам + baseUrl: "http://localhost:3000", + retry: 2, + sessionsPerBrowser: 3, + + browsers: { + chrome: { + // Наследует retry: 2 и sessionsPerBrowser: 3 + desiredCapabilities: { + browserName: "chrome", + }, + }, + firefox: { + // Переопределяет retry, наследует sessionsPerBrowser: 3 + retry: 5, + desiredCapabilities: { + browserName: "firefox", + }, + }, + }, +} satisfies ConfigInput; +``` + +В этом примере: +- Chrome получит `retry: 2` и `sessionsPerBrowser: 3` (наследование) +- Firefox получит `retry: 5` (переопределение) и `sessionsPerBrowser: 3` (наследование) + + + Единственный параметр, который нельзя вынести на корневой уровень — это `desiredCapabilities`. Он должен быть задан для каждого браузера отдельно. + + +## Базовые параметры {#basic-params} + +### Ретраи (retry) {#retry} + +Параметр `retry` определяет, сколько раз Testplane будет перезапускать упавший тест. По умолчанию: `0`. + +```typescript title="testplane.config.ts" +export default { + // Глобальное значение для всех браузеров + retry: 2, + + browsers: { + chrome: { + // Для нестабильного браузера можно увеличить + retry: 5, + desiredCapabilities: { browserName: "chrome" }, + }, + }, +}; +``` + +Типичная практика — использовать разные значения для локальной разработки и CI: + +```typescript +export default { + retry: process.env.CI ? 3 : 0, + // ... +}; +``` + +### Расположение тестовых файлов {#test-files} + +Тестовые файлы указываются в секции `sets`. Каждый сет определяет набор тестов и браузеры для их запуска: + +```typescript title="testplane.config.ts" +export default { + sets: { + desktop: { + // Пути к тестам + files: ["tests/desktop/**/*.test.ts"], + browsers: ["chrome", "firefox"], + }, + mobile: { + files: ["tests/mobile/**/*.test.ts"], + // Можно исключить файлы + ignoreFiles: ["tests/mobile/**/*.skip.ts"], + browsers: ["iphone", "android"], + }, + }, + // ... +}; +``` + +Запуск конкретного сета: + +```bash +npx testplane --set desktop +``` + +Подробнее о сетах см. в [документации по sets](../reference/config/sets). + +### Dev Server {#dev-server} + +Секция `devServer` позволяет автоматически запускать сервер разработки перед тестами: + +```typescript title="testplane.config.ts" +export default { + devServer: { + // Команда для запуска сервера + command: "npm run dev", + + // Рабочая директория (по умолчанию — директория конфига) + cwd: null, + + // Переменные окружения для сервера + env: { NODE_ENV: "test" }, + + // Аргументы командной строки + args: ["--port", "3000"], + + // Показывать логи сервера в консоли (по умолчанию: true) + logs: true, + + // Переиспользовать уже запущенный сервер (по умолчанию: false) + reuseExisting: false, + + // Проверка готовности сервера + readinessProbe: { + url: "http://localhost:3000", + // Функция проверки ответа (опционально) + isReady: (response) => response.status === 200, + timeouts: { + waitServerTimeout: 60000, // Ожидание запуска (60 сек) + probeRequestTimeout: 10000, // Тайм-аут запроса (10 сек) + probeRequestInterval: 1000, // Интервал проверки (1 сек) + }, + }, + }, + baseUrl: "http://localhost:3000", + // ... +}; +``` + + + Секция `devServer` только запускает сервер. Не забудьте также настроить `baseUrl`. + + + + При использовании `reuseExisting: true` обязательно укажите `readinessProbe.url` — Testplane проверит, запущен ли сервер, и не будет запускать новый. + + +Подробнее см. в [документации по devServer](../reference/config/dev-server). + +### Параллельность выполнения {#parallelism} + +Testplane поддерживает несколько уровней параллельности: + +| Параметр | Описание | По умолчанию | +|----------|----------|--------------| +| `sessionsPerBrowser` | Количество параллельных сессий для каждого браузера | `1` | +| `testsPerSession` | Сколько тестов запускать в одной сессии браузера | `Infinity` | +| `system.workers` | Количество воркер-процессов | `1` | +| `system.parallelLimit` | Максимум браузеров одновременно | `Infinity` | + +```typescript title="testplane.config.ts" +export default { + // Запускать 5 сессий Chrome параллельно + sessionsPerBrowser: 5, + + // Перезапускать браузер каждые 20 тестов (для стабильности) + testsPerSession: 20, + + system: { + // Использовать 4 воркера + workers: 4, + }, + // ... +}; +``` + +## Тайм-ауты {#timeouts} + +### Основные тайм-ауты {#main-timeouts} + +**waitTimeout** (по умолчанию: 3000 мс) — время ожидания появления элемента на странице. Используется в командах `waitFor*` и при поиске элементов. + +```typescript +export default { + waitTimeout: 5000, // Увеличить до 5 секунд + // ... +}; +``` + +**testTimeout** — максимальное время выполнения одного теста. Можно задать через `system.mochaOpts.timeout` (по умолчанию: 60000 мс): + +```typescript +export default { + system: { + mochaOpts: { + timeout: 120000, // 2 минуты на тест + }, + }, + // ... +}; +``` + +**httpTimeout** (по умолчанию: 30000 мс) — тайм-аут для запросов к Selenium-серверу: + +```typescript +export default { + httpTimeout: 60000, // Увеличить для медленных гридов + // ... +}; +``` + +### Другие тайм-ауты {#other-timeouts} + +| Параметр | По умолчанию | Описание | +|----------|--------------|----------| +| `waitInterval` | 500 мс | Интервал проверки условия в `waitFor*` | +| `urlHttpTimeout` | = httpTimeout | Тайм-аут для команды перехода по URL | +| `pageLoadTimeout` | 20000 мс | Тайм-аут загрузки страницы | +| `sessionRequestTimeout` | = httpTimeout | Тайм-аут создания сессии браузера | +| `sessionQuitTimeout` | 5000 мс | Тайм-аут закрытия сессии | + +Полный список тайм-аутов см. в [документации](../). // TODO: найти соответствующий материал и прикрепить ссылку + +## Подключение плагинов {#plugins} + +Плагины подключаются в секции `plugins`. + +Testplane автоматически ищет модули с префиксом `testplane-`, поэтому его можно опускать. // TODO: уточнить + +### Пример с html-reporter {#html-reporter-example} + +[html-reporter](../html-reporter/html-reporter-setup) — плагин для генерации HTML-отчётов о тестах. + +**Установка:** + +```bash +npm install html-reporter --save-dev +``` + +**Подключение:** + +```typescript title="testplane.config.ts" +export default { + plugins: { + "html-reporter": { + enabled: true, + path: "testplane-report", + defaultView: "all", + diffMode: "3-up", + }, + }, + // ... +}; +``` + +// TODO: подробнее про передачу параметров в плагины + +## Настройка дефолтов для команд {#command-defaults} + +// TODO: добавить введение про возможность менять дефолты для ряда команд + +### assertViewOpts {#assert-view-opts} + +// TODO: вместо перечисления параметров написать что-то внятное + +### expectOpts {#expect-opts} + +Настройки для [expect-матчеров](../commands/expect/overview): + +// TODO: вместо перечисления параметров написать что-то внятное + +### stateOpts {#state-opts} + +Настройки для команд работы с состоянием ([saveState](../commands/browser/saveState), [restoreState](../commands/browser/restoreState)): + +// TODO: вместо перечисления параметров написать что-то внятное + +## Полный пример конфигурации {#full-example} + +// TODO: а он вообще нужен тут, или просто сослаться на доку? + +## Советы и лучшие практики {#best-practices} + +### Разделяйте конфиги для разных окружений {#env-configs} + +Создайте базовый конфиг и расширяйте его для разных окружений: + +```typescript title="testplane.config.ts" +const baseConfig = { + baseUrl: "http://localhost:3000", + // общие настройки... +}; + +export default { + ...baseConfig, + retry: process.env.CI ? 3 : 0, + gridUrl: process.env.GRID_URL || "http://localhost:4444/wd/hub", +}; +``` + +### Выносите чувствительные данные в переменные окружения {#sensitive-data} + +Не храните пароли и токены в конфиге: + +```typescript +export default { + gridUrl: process.env.SELENIUM_GRID_URL, + // ... +}; +``` + +// TODO: что-нибудь ещё? From 44028cd5588bf3f3879597bbc0f58b9a332bd9c5 Mon Sep 17 00:00:00 2001 From: kseniataranov Date: Thu, 23 Apr 2026 00:52:05 +0300 Subject: [PATCH 2/8] docs(config): tiny todo --- .../current/basic-guides/configuration.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/basic-guides/configuration.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/basic-guides/configuration.mdx index 6a9de73b..a29d6638 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/basic-guides/configuration.mdx +++ b/i18n/ru/docusaurus-plugin-content-docs/current/basic-guides/configuration.mdx @@ -3,6 +3,7 @@ import Admonition from "@theme/Admonition"; # Конфигурация // TODO: подумать про более логичную структуру статьи +// TODO: в этой статье вы узнаете... ## Введение From b67be766fa7cc0b0613bab7f86f57681b449c5f1 Mon Sep 17 00:00:00 2001 From: kseniataranov Date: Thu, 23 Apr 2026 05:34:49 +0300 Subject: [PATCH 3/8] docs(config): write the article --- .../current/basic-guides/configuration.mdx | 306 +++++++++--------- 1 file changed, 153 insertions(+), 153 deletions(-) diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/basic-guides/configuration.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/basic-guides/configuration.mdx index a29d6638..aed651a2 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/basic-guides/configuration.mdx +++ b/i18n/ru/docusaurus-plugin-content-docs/current/basic-guides/configuration.mdx @@ -2,29 +2,39 @@ import Admonition from "@theme/Admonition"; # Конфигурация -// TODO: подумать про более логичную структуру статьи -// TODO: в этой статье вы узнаете... + + +- Где Testplane ищет конфигурационный файл +- Как переопределить настройки без изменения конфигурационного файла +- Как работает наследование настроек +- Как настроить параллельный запуск тестов и тайм-ауты +- Как подключить плагины + + ## Введение -Testplane настраивается тремя способами: через конфигурационный файл, переменные окружения и аргументы командной строки. +Testplane настраивается тремя способами: через конфигурационный файл, переменные окружения и аргументы командной строки. Конфигурационный файл — основной источник настроек: в нём указывают браузеры, пути к тестам, параллельность, плагины и тайм-ауты. Переменные окружения и CLI-аргументы позволяют переопределить отдельные параметры без изменения файла, это удобно для CI/CD или локальных экспериментов. -Полный список параметров в [справочнике по конфигурации](../reference/config/main.mdx). +Полный справочник параметров — в [документации по конфигурации](../reference/config/main.mdx). -## Где Testplane ищет конфигурационный файл {#config-location} // TODO: переименовать +## Конфигурационный файл {#config-location} При запуске Testplane ищет конфигурационный файл в текущей рабочей директории. Поддерживаются следующие имена файлов (в порядке приоритета): -- `.testplane.conf.ts` -- `.testplane.conf.js` -- `testplane.config.ts` -- `testplane.config.js` -- `testplane.config.cts` // -- `testplane.config.cjs` // -- `.hermione.conf.ts` (для обратной совместимости) // -- `.hermione.conf.js` (для обратной совместимости) // TODO: вынести в плашку +- `.testplane.conf.ts` +- `.testplane.conf.js` +- `testplane.config.ts` +- `testplane.config.js` +- `testplane.config.cts` +- `testplane.config.cjs` + + + Для обратной совместимости также поддерживаются имена файлов `.hermione.conf.ts` и + `.hermione.conf.js`. + Если нужно использовать конфиг из другого места, укажите путь через опцию `--config`: @@ -44,12 +54,12 @@ npx testplane --config ./configs/testplane.local.ts При конфликте значений применяется следующий приоритет (от высшего к низшему): -| Приоритет | Источник | Пример | -|-----------|----------|--------| -| 1 | CLI аргумент | `--base-url http://example.com` | -| 2 | Переменная окружения | `testplane_base_url=http://example.com` | -| 3 | Файл конфигурации | `baseUrl: "http://example.com"` | -| 4 | Значение по умолчанию | — | +| Приоритет | Источник | Пример | +| --------- | --------------------- | --------------------------------------- | +| 1 | CLI аргумент | `--base-url http://example.com` | +| 2 | Переменная окружения | `testplane_base_url=http://example.com` | +| 3 | Файл конфигурации | `baseUrl: "http://example.com"` | +| 4 | Значение по умолчанию | — | ### Переопределение через CLI {#cli-override} @@ -93,13 +103,6 @@ testplane_browsers_firefox_sessions_per_browser=10 npx testplane Для обратной совместимости также поддерживается префикс `hermione_`. -Также доступны специальные переменные окружения: // TODO: уточнить - -| Переменная | Описание | -|------------|----------| -| `TESTPLANE_SKIP_BROWSERS` | Пропустить указанные браузеры: `TESTPLANE_SKIP_BROWSERS=ie10,ie11` | -| `TESTPLANE_SETS` | Запустить только указанные сеты: `TESTPLANE_SETS=desktop,touch` | - ## Наследование параметров {#inheritance} Testplane поддерживает каскадное наследование параметров: настройки, заданные на корневом уровне конфига, применяются ко всем браузерам. Браузеры могут переопределять эти значения. @@ -134,20 +137,24 @@ export default { ``` В этом примере: -- Chrome получит `retry: 2` и `sessionsPerBrowser: 3` (наследование) -- Firefox получит `retry: 5` (переопределение) и `sessionsPerBrowser: 3` (наследование) + +- Chrome получит `retry: 2` и `sessionsPerBrowser: 3` (наследование) +- Firefox получит `retry: 5` (переопределение) и `sessionsPerBrowser: 3` (наследование) - Единственный параметр, который нельзя вынести на корневой уровень — это `desiredCapabilities`. Он должен быть задан для каждого браузера отдельно. + Единственный параметр, который нельзя вынести на корневой уровень — это `desiredCapabilities`. + Он должен быть задан для каждого браузера отдельно. ## Базовые параметры {#basic-params} ### Ретраи (retry) {#retry} -Параметр `retry` определяет, сколько раз Testplane будет перезапускать упавший тест. По умолчанию: `0`. +Параметр `retry` определяет, сколько раз Testplane будет перезапускать упавший тест. ```typescript title="testplane.config.ts" +import type { ConfigInput } from "testplane"; + export default { // Глобальное значение для всех браузеров retry: 2, @@ -159,23 +166,16 @@ export default { desiredCapabilities: { browserName: "chrome" }, }, }, -}; -``` - -Типичная практика — использовать разные значения для локальной разработки и CI: - -```typescript -export default { - retry: process.env.CI ? 3 : 0, - // ... -}; +} satisfies ConfigInput; ``` ### Расположение тестовых файлов {#test-files} -Тестовые файлы указываются в секции `sets`. Каждый сет определяет набор тестов и браузеры для их запуска: +Наборы тестовых файлов и браузеры для их запуска указываются в секции `sets`: ```typescript title="testplane.config.ts" +import type { ConfigInput } from "testplane"; + export default { sets: { desktop: { @@ -191,7 +191,7 @@ export default { }, }, // ... -}; +} satisfies ConfigInput; ``` Запуск конкретного сета: @@ -200,139 +200,111 @@ export default { npx testplane --set desktop ``` -Подробнее о сетах см. в [документации по sets](../reference/config/sets). +Подробнее о сетах см. в [документации по sets](../reference/config/sets.mdx). ### Dev Server {#dev-server} Секция `devServer` позволяет автоматически запускать сервер разработки перед тестами: ```typescript title="testplane.config.ts" +import type { ConfigInput } from "testplane"; + export default { devServer: { - // Команда для запуска сервера command: "npm run dev", - - // Рабочая директория (по умолчанию — директория конфига) - cwd: null, - - // Переменные окружения для сервера - env: { NODE_ENV: "test" }, - - // Аргументы командной строки - args: ["--port", "3000"], - - // Показывать логи сервера в консоли (по умолчанию: true) - logs: true, - - // Переиспользовать уже запущенный сервер (по умолчанию: false) - reuseExisting: false, - - // Проверка готовности сервера + reuseExisting: true, readinessProbe: { url: "http://localhost:3000", - // Функция проверки ответа (опционально) - isReady: (response) => response.status === 200, - timeouts: { - waitServerTimeout: 60000, // Ожидание запуска (60 сек) - probeRequestTimeout: 10000, // Тайм-аут запроса (10 сек) - probeRequestInterval: 1000, // Интервал проверки (1 сек) - }, }, }, baseUrl: "http://localhost:3000", // ... -}; +} satisfies ConfigInput; ``` +Testplane запустит команду и дождётся готовности сервера по указанному URL. + Секция `devServer` только запускает сервер. Не забудьте также настроить `baseUrl`. - При использовании `reuseExisting: true` обязательно укажите `readinessProbe.url` — Testplane проверит, запущен ли сервер, и не будет запускать новый. + При использовании `reuseExisting: true` обязательно укажите `readinessProbe.url`: Testplane + проверит, запущен ли сервер, и не будет запускать новый. -Подробнее см. в [документации по devServer](../reference/config/dev-server). +Подробнее см. в [документации по devServer](../reference/config/dev-server.mdx). ### Параллельность выполнения {#parallelism} -Testplane поддерживает несколько уровней параллельности: +Testplane запускает тесты параллельно, что значительно ускоряет прогон. Для настройки параллельности используются два основных параметра: `sessionsPerBrowser` и `workers`. -| Параметр | Описание | По умолчанию | -|----------|----------|--------------| -| `sessionsPerBrowser` | Количество параллельных сессий для каждого браузера | `1` | -| `testsPerSession` | Сколько тестов запускать в одной сессии браузера | `Infinity` | -| `system.workers` | Количество воркер-процессов | `1` | -| `system.parallelLimit` | Максимум браузеров одновременно | `Infinity` | +- `sessionsPerBrowser` определяет максимальное число параллельных браузерных сессий для каждого браузера +- `workers` определяет число воркер-процессов Node.js для параллельного выполнения тестов ```typescript title="testplane.config.ts" -export default { - // Запускать 5 сессий Chrome параллельно - sessionsPerBrowser: 5, - - // Перезапускать браузер каждые 20 тестов (для стабильности) - testsPerSession: 20, +import type { ConfigInput } from "testplane"; +export default { + browsers: { + chrome: { + sessionsPerBrowser: 5, + desiredCapabilities: { + browserName: "chrome", + }, + }, + firefox: { + sessionsPerBrowser: 3, + desiredCapabilities: { + browserName: "firefox", + }, + }, + }, system: { - // Использовать 4 воркера workers: 4, }, // ... -}; +} satisfies ConfigInput; ``` -## Тайм-ауты {#timeouts} +В этом примере Testplane может запустить до 5 параллельных сессий Chrome и до 3 сессий Firefox, распределяя тесты между 4 воркер-процессами. -### Основные тайм-ауты {#main-timeouts} +Для тонкой настройки параллельности доступны дополнительные опции: `testsPerSession`, `testsPerWorker` и `parallelLimit`. Подробнее см. в [документации](../). // TODO: найти соответствующий материал и прикрепить ссылку -**waitTimeout** (по умолчанию: 3000 мс) — время ожидания появления элемента на странице. Используется в командах `waitFor*` и при поиске элементов. +## Тайм-ауты {#timeouts} -```typescript -export default { - waitTimeout: 5000, // Увеличить до 5 секунд - // ... -}; -``` +Testplane позволяет настроить тайм-ауты для для контроля времени выполнения операций: -**testTimeout** — максимальное время выполнения одного теста. Можно задать через `system.mochaOpts.timeout` (по умолчанию: 60000 мс): +- `httpTimeout` — тайм-аут HTTP-запросов к WebDriver +- `testTimeout` — максимальное время выполнения одного теста +- `pageLoadTimeout` — тайм-аут загрузки страницы в браузере +- `waitTimeout` — тайм-аут для команд ожидания (`waitFor*`) + +```typescript title="testplane.config.ts" +import type { ConfigInput } from "testplane"; -```typescript export default { - system: { - mochaOpts: { - timeout: 120000, // 2 минуты на тест + // Глобальные тайм-ауты + pageLoadTimeout: 20000, + httpTimeout: 20000, + testTimeout: 90000, + browsers: { + chrome: { + // Тайм-ауты можно переопределить для конкретного браузера + pageLoadTimeout: 30000, + waitTimeout: 5000, + desiredCapabilities: { browserName: "chrome" }, }, }, // ... -}; -``` - -**httpTimeout** (по умолчанию: 30000 мс) — тайм-аут для запросов к Selenium-серверу: - -```typescript -export default { - httpTimeout: 60000, // Увеличить для медленных гридов - // ... -}; +} satisfies ConfigInput; ``` -### Другие тайм-ауты {#other-timeouts} - -| Параметр | По умолчанию | Описание | -|----------|--------------|----------| -| `waitInterval` | 500 мс | Интервал проверки условия в `waitFor*` | -| `urlHttpTimeout` | = httpTimeout | Тайм-аут для команды перехода по URL | -| `pageLoadTimeout` | 20000 мс | Тайм-аут загрузки страницы | -| `sessionRequestTimeout` | = httpTimeout | Тайм-аут создания сессии браузера | -| `sessionQuitTimeout` | 5000 мс | Тайм-аут закрытия сессии | - -Полный список тайм-аутов см. в [документации](../). // TODO: найти соответствующий материал и прикрепить ссылку +Полный список тайм-аутов и их описание см. в [документации](../). // TODO: найти соответствующий материал и прикрепить ссылку ## Подключение плагинов {#plugins} -Плагины подключаются в секции `plugins`. - -Testplane автоматически ищет модули с префиксом `testplane-`, поэтому его можно опускать. // TODO: уточнить +Плагины подключаются и настраиваются в секции `plugins` в конфигурационном файле. Каждый ключ — это имя npm-пакета плагина, а значение — объект с его параметрами. ### Пример с html-reporter {#html-reporter-example} @@ -347,6 +319,8 @@ npm install html-reporter --save-dev **Подключение:** ```typescript title="testplane.config.ts" +import type { ConfigInput } from "testplane"; + export default { plugins: { "html-reporter": { @@ -357,63 +331,89 @@ export default { }, }, // ... -}; +} satisfies ConfigInput; ``` -// TODO: подробнее про передачу параметров в плагины +Параметры плагина можно переопределить через переменные окружения: -## Настройка дефолтов для команд {#command-defaults} +```bash +# Отключить плагин +testplane_plugins_testplane_retry_progressive='false' -// TODO: добавить введение про возможность менять дефолты для ряда команд +# Передать объект с параметрами +testplane_plugins_testplane_retry_progressive='{"enabled": true, "extraRetry": 10}' +``` -### assertViewOpts {#assert-view-opts} +Аналогично можно передать параметры через командную строку: -// TODO: вместо перечисления параметров написать что-то внятное +```bash +# Отключить плагин +npx testplane --plugins-testplane-retry-progressive false -### expectOpts {#expect-opts} +# Передать объект с параметрами +npx testplane --plugins-testplane-retry-progressive '{"enabled": true, "extraRetry": 10}' +``` -Настройки для [expect-матчеров](../commands/expect/overview): +Если параметр указан в нескольких местах, применяется значение с наивысшим приоритетом: -// TODO: вместо перечисления параметров написать что-то внятное +1. CLI — высший приоритет +2. Переменные окружения +3. Конфигурационный файл — низший приоритет -### stateOpts {#state-opts} +Это позволяет гибко управлять поведением плагинов в CI/CD без изменения конфига. -Настройки для команд работы с состоянием ([saveState](../commands/browser/saveState), [restoreState](../commands/browser/restoreState)): +## Настройка дефолтов для команд {#command-defaults} -// TODO: вместо перечисления параметров написать что-то внятное +Testplane позволяет задать значения по умолчанию для параметров некоторых команд. Вместо того чтобы передавать одни и те же опции при каждом вызове, можно указать их один раз в конфигурации. -## Полный пример конфигурации {#full-example} +### assertViewOpts {#assert-view-opts} -// TODO: а он вообще нужен тут, или просто сослаться на доку? +Настройки по умолчанию для скриншотного тестирования. Позволяют задать, какие элементы игнорировать, допустимую разницу в пикселях, задержку перед снимком и другие параметры сравнения скриншотов. -## Советы и лучшие практики {#best-practices} +```typescript +export default { + assertViewOpts: { + ignoreElements: [".ads", ".dynamic-banner"], + ignoreDiffPixelCount: "0.5%", + }, + // ... +}; +``` -### Разделяйте конфиги для разных окружений {#env-configs} +Полный список параметров см. в документации [assertView](../commands/browser/assertView.mdx). -Создайте базовый конфиг и расширяйте его для разных окружений: +### expectOpts {#expect-opts} -```typescript title="testplane.config.ts" -const baseConfig = { - baseUrl: "http://localhost:3000", - // общие настройки... -}; +Настройки для асинхронных проверок с ожиданием. +```typescript export default { - ...baseConfig, - retry: process.env.CI ? 3 : 0, - gridUrl: process.env.GRID_URL || "http://localhost:4444/wd/hub", + system: { + expectOpts: { + wait: 5000, // макс. время ожидания (мс) + interval: 200, // интервал проверок (мс) + }, + }, + // ... }; ``` -### Выносите чувствительные данные в переменные окружения {#sensitive-data} +Полный список параметров см. в документации по [expect-матчерам](../commands/expect/overview.mdx). -Не храните пароли и токены в конфиге: +### stateOpts {#state-opts} + +Настройки для команд сохранения и восстановления состояния браузера. Определяют, что сохранять (cookies, localStorage, sessionStorage), куда сохранять, и нужно ли удалять файл после тестов. ```typescript export default { - gridUrl: process.env.SELENIUM_GRID_URL, + stateOpts: { + path: "./tmp/auth-state.json", + cookies: true, + localStorage: true, + sessionStorage: false, + }, // ... }; ``` -// TODO: что-нибудь ещё? +Полный список параметров см. в документации по [saveState](../commands/browser/saveState.mdx) и [restoreState](../commands/browser/restoreState.mdx). From 2ac21b3a44dc1867c0841f2589049aa5a77cbc7c Mon Sep 17 00:00:00 2001 From: kseniataranov Date: Fri, 24 Apr 2026 07:55:26 +0300 Subject: [PATCH 4/8] docs(config): some fixes --- .../current/basic-guides/configuration.mdx | 115 ++++++++---------- 1 file changed, 48 insertions(+), 67 deletions(-) diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/basic-guides/configuration.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/basic-guides/configuration.mdx index aed651a2..23eb5486 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/basic-guides/configuration.mdx +++ b/i18n/ru/docusaurus-plugin-content-docs/current/basic-guides/configuration.mdx @@ -18,23 +18,11 @@ Testplane настраивается тремя способами: через Конфигурационный файл — основной источник настроек: в нём указывают браузеры, пути к тестам, параллельность, плагины и тайм-ауты. Переменные окружения и CLI-аргументы позволяют переопределить отдельные параметры без изменения файла, это удобно для CI/CD или локальных экспериментов. -Полный справочник параметров — в [документации по конфигурации](../reference/config/main.mdx). +Полный справочник параметров см. в [документации по конфигурации](../reference/config/main.mdx). ## Конфигурационный файл {#config-location} -При запуске Testplane ищет конфигурационный файл в текущей рабочей директории. Поддерживаются следующие имена файлов (в порядке приоритета): - -- `.testplane.conf.ts` -- `.testplane.conf.js` -- `testplane.config.ts` -- `testplane.config.js` -- `testplane.config.cts` -- `testplane.config.cjs` - - - Для обратной совместимости также поддерживаются имена файлов `.hermione.conf.ts` и - `.hermione.conf.js`. - +При запуске Testplane ищет конфигурационный файл в текущей рабочей директории. Если нужно использовать конфиг из другого места, укажите путь через опцию `--config`: @@ -44,64 +32,54 @@ npx testplane --config ./configs/testplane.local.ts ## Способы задания параметров {#config-sources} -Параметры конфигурации можно задавать тремя способами: +Параметры конфигурации Testplane можно задавать тремя способами: 1. Файл конфигурации: основной способ, подходит для большинства настроек 2. Переменные окружения: удобно для CI/CD и чувствительных данных 3. Аргументы CLI: для быстрого переопределения при запуске -### Приоритет параметров {#priority} +### Переопределение через переменные окружения {#env-override} -При конфликте значений применяется следующий приоритет (от высшего к низшему): +Любой параметр конфигурации можно переопределить через переменные окружения. Имя переменной формируется из имени параметра в конфиге: -| Приоритет | Источник | Пример | -| --------- | --------------------- | --------------------------------------- | -| 1 | CLI аргумент | `--base-url http://example.com` | -| 2 | Переменная окружения | `testplane_base_url=http://example.com` | -| 3 | Файл конфигурации | `baseUrl: "http://example.com"` | -| 4 | Значение по умолчанию | — | +1. Замените `camelCase` на `snake_case` (например, `baseUrl` → `base_url`) +2. Для вложенных параметров соедините все уровни через `_` +3. Добавьте префикс `testplane_` + +```bash +# gridUrl в конфиге → testplane_grid_url +testplane_grid_url=local npx testplane + +# browsers.firefox.headless в конфиге → testplane_browsers_firefox_headless +testplane_browsers_firefox_headless=false npx testplane +``` ### Переопределение через CLI {#cli-override} -Любой параметр конфигурации можно переопределить через CLI-аргумент. Имя аргумента формируется из имени параметра в конфиге: +Параметры также можно переопределить через CLI-аргумент: 1. Замените `camelCase` на `kebab-case` (например, `baseUrl` → `base-url`) 2. Для вложенных параметров соедините все уровни через дефис 3. Добавьте `--` в начале ```bash -# baseUrl в конфиге → --base-url в CLI -npx testplane --base-url http://example.com - -# system.debug в конфиге → --system-debug в CLI -npx testplane --system-debug true +# gridUrl в конфиге → --grid-url в CLI +npx testplane --grid-url local -# browsers.firefox.sessionsPerBrowser в конфиге → --browsers-firefox-sessions-per-browser в CLI -npx testplane --browsers-firefox-sessions-per-browser 10 +# browsers.firefox.headless в конфиге → --browsers-firefox-headless в CLI +npx testplane --browsers-firefox-headless false ``` -### Переопределение через переменные окружения {#env-override} - -Параметры также можно переопределить через переменные окружения: - -1. Замените `camelCase` на `snake_case` (например, `baseUrl` → `base_url`) -2. Для вложенных параметров соедините все уровни через `_` -3. Добавьте префикс `testplane_` - -```bash -# baseUrl в конфиге → testplane_base_url -testplane_base_url=http://example.com npx testplane - -# system.debug в конфиге → testplane_system_debug -testplane_system_debug=true npx testplane +### Приоритет параметров {#priority} -# browsers.firefox.sessionsPerBrowser в конфиге → testplane_browsers_firefox_sessions_per_browser -testplane_browsers_firefox_sessions_per_browser=10 npx testplane -``` +При конфликте значений применяется следующий приоритет (от высшего к низшему): - - Для обратной совместимости также поддерживается префикс `hermione_`. - +| Приоритет | Источник | Пример | +| --------- | --------------------- | --------------------------------------- | +| 1 | CLI аргумент | `--base-url http://example.com` | +| 2 | Переменная окружения | `testplane_base_url=http://example.com` | +| 3 | Файл конфигурации | `baseUrl: "http://example.com"` | +| 4 | Значение по умолчанию | — | ## Наследование параметров {#inheritance} @@ -117,7 +95,6 @@ export default { baseUrl: "http://localhost:3000", retry: 2, sessionsPerBrowser: 3, - browsers: { chrome: { // Наследует retry: 2 и sessionsPerBrowser: 3 @@ -133,6 +110,7 @@ export default { }, }, }, + // ... } satisfies ConfigInput; ``` @@ -150,7 +128,7 @@ export default { ### Ретраи (retry) {#retry} -Параметр `retry` определяет, сколько раз Testplane будет перезапускать упавший тест. +Параметр [`retry`](../reference/config/browsers.mdx#retry) определяет, сколько раз Testplane будет перезапускать упавший тест. ```typescript title="testplane.config.ts" import type { ConfigInput } from "testplane"; @@ -158,7 +136,6 @@ import type { ConfigInput } from "testplane"; export default { // Глобальное значение для всех браузеров retry: 2, - browsers: { chrome: { // Для нестабильного браузера можно увеличить @@ -166,6 +143,7 @@ export default { desiredCapabilities: { browserName: "chrome" }, }, }, + // ... } satisfies ConfigInput; ``` @@ -209,12 +187,15 @@ npx testplane --set desktop ```typescript title="testplane.config.ts" import type { ConfigInput } from "testplane"; +const SERVER_PORT = 3000; + export default { devServer: { command: "npm run dev", + env: { PORT: SERVER_PORT }, reuseExisting: true, readinessProbe: { - url: "http://localhost:3000", + url: `http://localhost:${SERVER_PORT}/health`, }, }, baseUrl: "http://localhost:3000", @@ -269,7 +250,7 @@ export default { В этом примере Testplane может запустить до 5 параллельных сессий Chrome и до 3 сессий Firefox, распределяя тесты между 4 воркер-процессами. -Для тонкой настройки параллельности доступны дополнительные опции: `testsPerSession`, `testsPerWorker` и `parallelLimit`. Подробнее см. в [документации](../). // TODO: найти соответствующий материал и прикрепить ссылку +Для тонкой настройки параллельности доступны дополнительные опции: `testsPerSession`, `testsPerWorker` и `parallelLimit`. Подробнее см. в [документации](../). ## Тайм-ауты {#timeouts} @@ -300,7 +281,7 @@ export default { } satisfies ConfigInput; ``` -Полный список тайм-аутов и их описание см. в [документации](../). // TODO: найти соответствующий материал и прикрепить ссылку +Полный список тайм-аутов и их описание см. в [документации](../reference/config/browsers.mdx#timeouts). ## Подключение плагинов {#plugins} @@ -308,7 +289,7 @@ export default { ### Пример с html-reporter {#html-reporter-example} -[html-reporter](../html-reporter/html-reporter-setup) — плагин для генерации HTML-отчётов о тестах. +[html-reporter](../html-reporter/html-reporter-setup.mdx) — плагин для генерации HTML-отчётов о тестах. **Установка:** @@ -323,11 +304,11 @@ import type { ConfigInput } from "testplane"; export default { plugins: { - "html-reporter": { + "html-reporter/testplane": { enabled: true, path: "testplane-report", defaultView: "all", - diffMode: "3-up", + diffMode: "3-up-scaled", }, }, // ... @@ -338,20 +319,20 @@ export default { ```bash # Отключить плагин -testplane_plugins_testplane_retry_progressive='false' +html_reporter_enabled=false npx testplane -# Передать объект с параметрами -testplane_plugins_testplane_retry_progressive='{"enabled": true, "extraRetry": 10}' +# Изменить путь к отчёту +html_reporter_path=./custom-report npx testplane ``` Аналогично можно передать параметры через командную строку: ```bash -# Отключить плагин -npx testplane --plugins-testplane-retry-progressive false +# Изменить путь к отчёту +npx testplane --html-reporter-path=./custom-report -# Передать объект с параметрами -npx testplane --plugins-testplane-retry-progressive '{"enabled": true, "extraRetry": 10}' +# Изменить режим отображения diff +npx testplane --html-reporter-diff_mode=only-diff ``` Если параметр указан в нескольких местах, применяется значение с наивысшим приоритетом: From bd851a6f74c26d96f6fa4dab95de6da792c321de Mon Sep 17 00:00:00 2001 From: kseniataranov Date: Fri, 24 Apr 2026 08:02:18 +0300 Subject: [PATCH 5/8] docs(config): remove broken link --- .../current/basic-guides/configuration.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/basic-guides/configuration.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/basic-guides/configuration.mdx index 23eb5486..1bac7a61 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/basic-guides/configuration.mdx +++ b/i18n/ru/docusaurus-plugin-content-docs/current/basic-guides/configuration.mdx @@ -250,7 +250,7 @@ export default { В этом примере Testplane может запустить до 5 параллельных сессий Chrome и до 3 сессий Firefox, распределяя тесты между 4 воркер-процессами. -Для тонкой настройки параллельности доступны дополнительные опции: `testsPerSession`, `testsPerWorker` и `parallelLimit`. Подробнее см. в [документации](../). +Для тонкой настройки параллельности доступны дополнительные опции: `testsPerSession`, `testsPerWorker` и `parallelLimit`. ## Тайм-ауты {#timeouts} From d2439b0b5f871e6b6ac541cb3dabbd3403a0c124 Mon Sep 17 00:00:00 2001 From: kseniataranov Date: Fri, 24 Apr 2026 08:04:29 +0300 Subject: [PATCH 6/8] docs(config): reformat --- .../current/basic-guides/configuration.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/basic-guides/configuration.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/basic-guides/configuration.mdx index 1bac7a61..3d5b07de 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/basic-guides/configuration.mdx +++ b/i18n/ru/docusaurus-plugin-content-docs/current/basic-guides/configuration.mdx @@ -250,7 +250,7 @@ export default { В этом примере Testplane может запустить до 5 параллельных сессий Chrome и до 3 сессий Firefox, распределяя тесты между 4 воркер-процессами. -Для тонкой настройки параллельности доступны дополнительные опции: `testsPerSession`, `testsPerWorker` и `parallelLimit`. +Для тонкой настройки параллельности доступны дополнительные опции: `testsPerSession`, `testsPerWorker` и `parallelLimit`. ## Тайм-ауты {#timeouts} From 2cf571c1052e4284fb7796834d5e377d2672403f Mon Sep 17 00:00:00 2001 From: kseniataranov Date: Mon, 4 May 2026 13:45:00 +0300 Subject: [PATCH 7/8] docs(config): minor fixes --- .../current/basic-guides/configuration.mdx | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/basic-guides/configuration.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/basic-guides/configuration.mdx index 3d5b07de..51c7307e 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/basic-guides/configuration.mdx +++ b/i18n/ru/docusaurus-plugin-content-docs/current/basic-guides/configuration.mdx @@ -22,7 +22,14 @@ Testplane настраивается тремя способами: через ## Конфигурационный файл {#config-location} -При запуске Testplane ищет конфигурационный файл в текущей рабочей директории. +При запуске Testplane ищет конфигурационный файл в текущей рабочей директории. Поддерживаются следующие имена файлов (в порядке приоритета): + +- `.testplane.conf.ts` +- `.testplane.conf.js` +- `testplane.config.ts` +- `testplane.config.js` +- `testplane.config.cts` +- `testplane.config.cjs` Если нужно использовать конфиг из другого места, укажите путь через опцию `--config`: @@ -250,8 +257,6 @@ export default { В этом примере Testplane может запустить до 5 параллельных сессий Chrome и до 3 сессий Firefox, распределяя тесты между 4 воркер-процессами. -Для тонкой настройки параллельности доступны дополнительные опции: `testsPerSession`, `testsPerWorker` и `parallelLimit`. - ## Тайм-ауты {#timeouts} Testplane позволяет настроить тайм-ауты для для контроля времени выполнения операций: From 66ddeb302a0d51b14be7d73c94aebe7d8ab00372 Mon Sep 17 00:00:00 2001 From: kseniataranov Date: Mon, 4 May 2026 15:05:53 +0300 Subject: [PATCH 8/8] docs(config): translation --- docs/basic-guides/configuration.mdx | 405 ++++++++++++++++++++++++++++ 1 file changed, 405 insertions(+) diff --git a/docs/basic-guides/configuration.mdx b/docs/basic-guides/configuration.mdx index e69de29b..a0ac827c 100644 --- a/docs/basic-guides/configuration.mdx +++ b/docs/basic-guides/configuration.mdx @@ -0,0 +1,405 @@ +import Admonition from "@theme/Admonition"; + +# Configuration + + + +- Where Testplane looks for the configuration file +- How to override settings without modifying the configuration file +- How settings inheritance works +- How to configure parallel test execution and timeouts +- How to connect plugins + + + +## Introduction + +Testplane is configured in three ways: through a configuration file, environment variables, and command-line arguments. + +The configuration file is the primary source of settings: it specifies browsers, test paths, parallelism, plugins, and timeouts. Environment variables and CLI arguments allow you to override individual parameters without modifying the file, which is convenient for CI/CD or local experiments. + +For a complete reference of parameters, see the [configuration documentation](../reference/config/main.mdx). + +## Configuration file {#config-location} + +When launched, Testplane looks for a configuration file in the current working directory. The following file names are supported (in order of priority): + +- `.testplane.conf.ts` +- `.testplane.conf.js` +- `testplane.config.ts` +- `testplane.config.js` +- `testplane.config.cts` +- `testplane.config.cjs` + +If you need to use a config from a different location, specify the path using the `--config` option: + +```bash +npx testplane --config ./configs/testplane.local.ts +``` + +## Setting parameters {#config-sources} + +Testplane configuration parameters can be set in three ways: + +1. Configuration file: the primary method, suitable for most settings +2. Environment variables: convenient for CI/CD and sensitive data +3. CLI arguments: for quick overrides at runtime + +### Overriding via environment variables {#env-override} + +Any configuration parameter can be overridden via environment variables. The variable name is formed from the parameter name in the config: + +1. Replace `camelCase` with `snake_case` (e.g., `baseUrl` → `base_url`) +2. For nested parameters, join all levels with `_` +3. Add the `testplane_` prefix + +```bash +# gridUrl in config → testplane_grid_url +testplane_grid_url=local npx testplane + +# browsers.firefox.headless in config → testplane_browsers_firefox_headless +testplane_browsers_firefox_headless=false npx testplane +``` + +### Overriding via CLI {#cli-override} + +Parameters can also be overridden via CLI arguments: + +1. Replace `camelCase` with `kebab-case` (e.g., `baseUrl` → `base-url`) +2. For nested parameters, join all levels with hyphens +3. Add `--` at the beginning + +```bash +# gridUrl in config → --grid-url in CLI +npx testplane --grid-url local + +# browsers.firefox.headless in config → --browsers-firefox-headless in CLI +npx testplane --browsers-firefox-headless false +``` + +### Parameter priority {#priority} + +When values conflict, the following priority applies (from highest to lowest): + +| Priority | Source | Example | +| -------- | -------------------- | --------------------------------------- | +| 1 | CLI argument | `--base-url http://example.com` | +| 2 | Environment variable | `testplane_base_url=http://example.com` | +| 3 | Configuration file | `baseUrl: "http://example.com"` | +| 4 | Default value | — | + +## Parameter inheritance {#inheritance} + +Testplane supports cascading parameter inheritance: settings defined at the root level of the config apply to all browsers. Browsers can override these values. + +### Inheritance example {#inheritance-example} + +```typescript title="testplane.config.ts" +import type { ConfigInput } from "testplane"; + +export default { + // Root settings — apply to all browsers + baseUrl: "http://localhost:3000", + retry: 2, + sessionsPerBrowser: 3, + browsers: { + chrome: { + // Inherits retry: 2 and sessionsPerBrowser: 3 + desiredCapabilities: { + browserName: "chrome", + }, + }, + firefox: { + // Overrides retry, inherits sessionsPerBrowser: 3 + retry: 5, + desiredCapabilities: { + browserName: "firefox", + }, + }, + }, + // ... +} satisfies ConfigInput; +``` + +In this example: + +- Chrome will get `retry: 2` and `sessionsPerBrowser: 3` (inheritance) +- Firefox will get `retry: 5` (override) and `sessionsPerBrowser: 3` (inheritance) + + + The only parameter that cannot be moved to the root level is `desiredCapabilities`. It must be + defined for each browser separately. + + +## Basic parameters {#basic-params} + +### Retries (retry) {#retry} + +The [`retry`](../reference/config/browsers.mdx#retry) parameter determines how many times Testplane will restart a failed test. + +```typescript title="testplane.config.ts" +import type { ConfigInput } from "testplane"; + +export default { + // Global value for all browsers + retry: 2, + browsers: { + chrome: { + // Can be increased for an unstable browser + retry: 5, + desiredCapabilities: { browserName: "chrome" }, + }, + }, + // ... +} satisfies ConfigInput; +``` + +### Test file locations {#test-files} + +Test file sets and browsers for running them are specified in the `sets` section: + +```typescript title="testplane.config.ts" +import type { ConfigInput } from "testplane"; + +export default { + sets: { + desktop: { + // Paths to tests + files: ["tests/desktop/**/*.test.ts"], + browsers: ["chrome", "firefox"], + }, + mobile: { + files: ["tests/mobile/**/*.test.ts"], + // Files can be excluded + ignoreFiles: ["tests/mobile/**/*.skip.ts"], + browsers: ["iphone", "android"], + }, + }, + // ... +} satisfies ConfigInput; +``` + +Running a specific set: + +```bash +npx testplane --set desktop +``` + +For more details about sets, see the [sets documentation](../reference/config/sets.mdx). + +### Dev Server {#dev-server} + +The `devServer` section allows you to automatically start a development server before tests: + +```typescript title="testplane.config.ts" +import type { ConfigInput } from "testplane"; + +const SERVER_PORT = 3000; + +export default { + devServer: { + command: "npm run dev", + env: { PORT: SERVER_PORT }, + reuseExisting: true, + readinessProbe: { + url: `http://localhost:${SERVER_PORT}/health`, + }, + }, + baseUrl: "http://localhost:3000", + // ... +} satisfies ConfigInput; +``` + +Testplane will run the command and wait for the server to be ready at the specified URL. + + + The `devServer` section only starts the server. Don't forget to also configure `baseUrl`. + + + + When using `reuseExisting: true`, be sure to specify `readinessProbe.url`: Testplane will check + if the server is running and won't start a new one. + + +For more details, see the [devServer documentation](../reference/config/dev-server.mdx). + +### Execution parallelism {#parallelism} + +Testplane runs tests in parallel, which significantly speeds up the test run. Two main parameters are used to configure parallelism: `sessionsPerBrowser` and `workers`. + +- `sessionsPerBrowser` determines the maximum number of parallel browser sessions for each browser +- `workers` determines the number of Node.js worker processes for parallel test execution + +```typescript title="testplane.config.ts" +import type { ConfigInput } from "testplane"; + +export default { + browsers: { + chrome: { + sessionsPerBrowser: 5, + desiredCapabilities: { + browserName: "chrome", + }, + }, + firefox: { + sessionsPerBrowser: 3, + desiredCapabilities: { + browserName: "firefox", + }, + }, + }, + system: { + workers: 4, + }, + // ... +} satisfies ConfigInput; +``` + +In this example, Testplane can run up to 5 parallel Chrome sessions and up to 3 Firefox sessions, distributing tests among 4 worker processes. + +## Timeouts {#timeouts} + +Testplane allows you to configure timeouts to control operation execution time: + +- `httpTimeout` — timeout for HTTP requests to WebDriver +- `testTimeout` — maximum execution time for a single test +- `pageLoadTimeout` — page load timeout in the browser +- `waitTimeout` — timeout for wait commands (`waitFor*`) + +```typescript title="testplane.config.ts" +import type { ConfigInput } from "testplane"; + +export default { + // Global timeouts + pageLoadTimeout: 20000, + httpTimeout: 20000, + testTimeout: 90000, + browsers: { + chrome: { + // Timeouts can be overridden for a specific browser + pageLoadTimeout: 30000, + waitTimeout: 5000, + desiredCapabilities: { browserName: "chrome" }, + }, + }, + // ... +} satisfies ConfigInput; +``` + +For a complete list of timeouts and their descriptions, see the [documentation](../reference/config/browsers.mdx#timeouts). + +## Connecting plugins {#plugins} + +Plugins are connected and configured in the `plugins` section of the configuration file. Each key is the npm package name of the plugin, and the value is an object with its parameters. + +### Example with html-reporter {#html-reporter-example} + +[html-reporter](../html-reporter/html-reporter-setup.mdx) is a plugin for generating HTML test reports. + +**Installation:** + +```bash +npm install html-reporter --save-dev +``` + +**Connection:** + +```typescript title="testplane.config.ts" +import type { ConfigInput } from "testplane"; + +export default { + plugins: { + "html-reporter/testplane": { + enabled: true, + path: "testplane-report", + defaultView: "all", + diffMode: "3-up-scaled", + }, + }, + // ... +} satisfies ConfigInput; +``` + +Plugin parameters can be overridden via environment variables: + +```bash +# Disable the plugin +html_reporter_enabled=false npx testplane + +# Change the report path +html_reporter_path=./custom-report npx testplane +``` + +Similarly, parameters can be passed via command line: + +```bash +# Change the report path +npx testplane --html-reporter-path=./custom-report + +# Change the diff display mode +npx testplane --html-reporter-diff_mode=only-diff +``` + +If a parameter is specified in multiple places, the value with the highest priority is applied: + +1. CLI — highest priority +2. Environment variables +3. Configuration file — lowest priority + +This allows flexible control of plugin behavior in CI/CD without modifying the config. + +## Setting defaults for commands {#command-defaults} + +Testplane allows you to set default values for parameters of certain commands. Instead of passing the same options with each call, you can specify them once in the configuration. + +### assertViewOpts {#assert-view-opts} + +Default settings for screenshot testing. Allows you to specify which elements to ignore, acceptable pixel difference, delay before capture, and other screenshot comparison parameters. + +```typescript +export default { + assertViewOpts: { + ignoreElements: [".ads", ".dynamic-banner"], + ignoreDiffPixelCount: "0.5%", + }, + // ... +}; +``` + +For a complete list of parameters, see the [assertView](../commands/browser/assertView.mdx) documentation. + +### expectOpts {#expect-opts} + +Settings for asynchronous assertions with waiting. + +```typescript +export default { + system: { + expectOpts: { + wait: 5000, // max wait time (ms) + interval: 200, // check interval (ms) + }, + }, + // ... +}; +``` + +For a complete list of parameters, see the [expect matchers](../commands/expect/overview.mdx) documentation. + +### stateOpts {#state-opts} + +Settings for browser state save and restore commands. Defines what to save (cookies, localStorage, sessionStorage), where to save, and whether to delete the file after tests. + +```typescript +export default { + stateOpts: { + path: "./tmp/auth-state.json", + cookies: true, + localStorage: true, + sessionStorage: false, + }, + // ... +}; +``` + +For a complete list of parameters, see the [saveState](../commands/browser/saveState.mdx) and [restoreState](../commands/browser/restoreState.mdx) documentation.