mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-18 00:29:42 +03:00
feat(web-test): управление пулом контекстов/лицензий в раннере
Раннер регресса теперь держит пул 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>
This commit is contained in:
@@ -104,7 +104,15 @@ export default async function({ кладовщик, менеджер, step, asse
|
||||
}
|
||||
```
|
||||
|
||||
Учтите ограничение по лицензиям 1С: каждый одновременно открытый пользователь — это занятая клиентская лицензия. Если в наборе много многопользовательских тестов, а на стенде лицензий впритык, прогоны начнут спотыкаться на «свободных лицензий не осталось». Модель освобождает сессии между тестами автоматически (закрывает контексты после процессного теста), но если стенд ограничен — закладывайте это в планирование набора: один-два многопользовательских сценария вместо десяти.
|
||||
Учтите ограничение по лицензиям 1С: каждый одновременно открытый пользователь — это занятая клиентская лицензия. Если в наборе много многопользовательских тестов, а на стенде лицензий впритык, прогоны начнут спотыкаться на нехватке лицензий.
|
||||
|
||||
Движок умеет держать пул сам — три поля в `webtest.config.mjs` (подробно в спецификации, раздел «Пул контекстов и лицензии»):
|
||||
|
||||
- `maxContexts` — потолок одновременно живых сеансов. При его достижении движок автоматически вытесняет наименее используемые контексты (LRU), освобождая лицензии под нужды следующего теста. Уже открытый нужный контекст переиспользуется — соседние тесты под тем же пользователем не переоткрывают сеанс.
|
||||
- `contextPolicy` — `'reuse'` (по умолчанию, держать открытыми ради скорости) или `'strict'` (закрывать контексты сразу после теста ради экономии лицензий).
|
||||
- `pinnedContexts` — что не вытеснять. По умолчанию защищён контекст по умолчанию; на тесном стенде поставьте `pinnedContexts: []`, чтобы и он мог освобождать слот.
|
||||
|
||||
Рецепт для стенда на 2 лицензии с процессными тестами на двух пользователей: `maxContexts: 2`, `pinnedContexts: []`. Если пула не хватает даже после вытеснения, движок валит тест внятной ошибкой `context pool exhausted` с подсказкой — вручную закрывать контексты в хуках больше не нужно.
|
||||
|
||||
### Воспроизведение ошибки тестом
|
||||
|
||||
|
||||
Reference in New Issue
Block a user