mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-18 16:49:41 +03:00
3f1168b975
Раннер регресса теперь держит пул 1С-сеансов сам, вместо накопления контекстов
между тестами и ручного закрытия в хуках. Три необязательных поля webtest.config.mjs
(без них поведение прежнее):
- maxContexts — потолок одновременно живых сеансов (null = без лимита);
- contextPolicy — 'reuse' (держать открытыми в пределах лимита) | 'strict'
(закрывать non-pinned контексты теста сразу после него);
- pinnedContexts — не вытесняются LRU (default = [defaultContext]; [] делает
default вытесняемым на тесном стенде).
Перед setup каждого теста LRU-вытеснение освобождает слот под нужды теста;
уже открытые нужные контексты переиспользуются. Default больше не вечно-pinned.
Исчерпание пула даёт внятную ошибку вместо маскирующего «Browser not connected».
- new: cli/test-runner/context-pool.mjs — чистый планировщик planEviction + LRU.
- cli/commands/test.mjs (v1.4): парсинг/валидация полей, вытеснение с фолбэк-парковкой
на нужный контекст (нельзя закрыть единственный активный), strict-закрытие, LRU-трекинг.
- Доки: regression-spec (§7/§8/глоссарий), regression-guide (рецепт), regress.md.
- Регресс дай-фудит фичу: 14-multi-context-routing роутит в 3-й контекст c,
15-multi-context-handover проверяет вытеснение c на границе; конфиг maxContexts:2.
Юнит-краёв планировщика — в debug/ (gitignored). Live-регресс: 25/25 зелёных.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
55 lines
3.9 KiB
JavaScript
55 lines
3.9 KiB
JavaScript
// Default config for tests/web-test. CLI URL still overrides defaultContext URL.
|
||
// Two contexts pointing at the same webtest publication — represent two independent
|
||
// 1C sessions (different cookies), used by multi-context tests to simulate two users.
|
||
//
|
||
// AppName `webtest-runner` отличается от интерактивной публикации `webtest` на :8081 —
|
||
// автономный стенд (см. tests/web-test/_hooks.mjs) использует свой URL, чтобы не
|
||
// конфликтовать с ручной разведкой и работать поверх отдельного Apache на :9191.
|
||
export default {
|
||
contexts: {
|
||
// `displayName` — человекочитаемое имя контекста, видно хукам через
|
||
// testInfo.contexts[name].displayName (например для showTitleSlide).
|
||
// Custom-поля любого типа пробрасываются как есть.
|
||
a: { url: 'http://localhost:9191/webtest-runner/ru_RU', displayName: 'Пользователь A' },
|
||
b: { url: 'http://localhost:9191/webtest-runner/ru_RU', displayName: 'Пользователь B' },
|
||
// c — третий контекст, задействован только 14-multi-context-routing. Под maxContexts:2
|
||
// он вытесняется на границе 14→15 (см. проверку пула в 15-multi-context-handover).
|
||
c: { url: 'http://localhost:9191/webtest-runner/ru_RU', displayName: 'Пользователь C' },
|
||
},
|
||
defaultContext: 'a',
|
||
|
||
// Пул 1С-лицензий (дай-фудим фичу на собственном регрессе). Одновременно живых сеансов —
|
||
// не больше maxContexts; LRU-вытеснение освобождает слот под нужды следующего теста.
|
||
// pinnedContexts:[] делает default `a` вытесняемым (здесь он всё равно нужен почти всем тестам,
|
||
// так что не вытесняется — но снимает жёсткий пин). Благодаря лимиту 3 контекста a/b/c
|
||
// никогда не живут одновременно: c закрывается до открытия b.
|
||
maxContexts: 2,
|
||
contextPolicy: 'reuse',
|
||
pinnedContexts: [],
|
||
// isolation: 'tab' (default) — persistent context, tabs in one window, 1С extension loads.
|
||
// Cookies are shared between tabs but scope by URL path, so different vrd-publications
|
||
// give independent auth without extra isolation.
|
||
// isolation: 'window' — separate BrowserContext per slot, full cookie isolation,
|
||
// extension may not load (Playwright limitation). Use only when really needed.
|
||
timeout: 60000,
|
||
|
||
// OS clipboard preservation: default `true`. Around every action call the engine
|
||
// saves the full clipboard contents (any MIME types via `navigator.clipboard.read()`)
|
||
// and restores them after, so a local user can copy/paste in parallel with a test run.
|
||
// Set to `false` to disable for this suite. CLI flag `--no-preserve-clipboard` overrides.
|
||
preserveClipboard: true,
|
||
|
||
// Allure severity policy: inverted map "уровень → теги, попадающие в этот уровень".
|
||
// Резолв (run.mjs:resolveSeverity):
|
||
// 1. explicit `export const severity` в тесте — выигрывает всегда;
|
||
// 2. иначе max-rank среди тегов теста (стандартное имя severity или маппинг ниже);
|
||
// 3. иначе `defaultSeverity`.
|
||
// Тег не может быть в двух bucket'ах одновременно — валидация при загрузке конфига.
|
||
severity: {
|
||
critical: ['smoke', 'multi-context'],
|
||
minor: ['recording'],
|
||
// blocker / trivial — пустые, не используем
|
||
},
|
||
defaultSeverity: 'normal',
|
||
};
|