Тема
Нестабильные тесты и карантин
DoQA по истории прогонов находит автотесты с непостоянным результатом и присваивает каждому состояние стабильности. Карантин выводит такой автотест из оценки Quality Gate, пока его не починили.
Где находится
Настройка детекции — «Автотесты» → «Настройки автотестов» → «Нестабильные тесты». Это единственный раздел настроек автотестов, который открывается без доступа к настройкам пространства: без права менять политику форма показывается заблокированной, сверху — плашка «У вас нет прав на изменение политики нестабильных тестов». Менять политику может тот, у кого есть право изменять прогоны или редактировать пространства проекта.
Состояние отдельного автотеста и кнопки карантина — в каталоге автотестов: значки «Нестабильный» и «В карантине» в строке, поля фильтра «Стабильность» и «Карантин», вкладка «Стабильность» в панели автотеста.
Состояния автотеста
| Состояние | Когда возникает |
|---|---|
| «Стабильный» | базовое состояние: ни один признак нестабильности не сработал |
| «Нестабильный» | сработал хотя бы один признак нестабильности |
| «Сломан» | доля падений высокая, смен исхода почти нет и не сработал ни один признак без порогов — автотест падает детерминированно |
| «В карантине» | карантин поставлен вручную или автоматически |
| «Исправлен» | автотест был «Нестабильным», «Сломанным» или в карантине и накопил нужное число дней без падений: в окне нет ни падений, ни смен исхода |
| «Отключён» | ставится только через API, из интерфейса недостижимо; для Quality Gate работает как карантин, но автоматикой не снимается |
Состояние «В карантине» и флаг карантина — не одно и то же, см. Особенности.
Признаки нестабильности
Автотест получает состояние «Нестабильный», если сработал любой из признаков:
| Признак | Условие |
|---|---|
| Прошёл после повтора | автотест упал и прошёл при повторе внутри того же прогона |
| Разный исход на одном коммите | на одном и том же коммите есть и успешный, и упавший результат |
| Повтор выполнил фреймворк | тестовый фреймворк сам перезапустил упавший автотест |
| Доля падений выше порога | доля падений в окне ≥ «Доля падений для пометки нестабильным, %» и в окне есть смена исхода |
| Показатель нестабильности выше порога | показатель ≥ «Порог показателя нестабильности» и в окне есть смена исхода |
| Число падений выше порога | падений в окне не меньше значения поля «Число падений для пометки (необязательно)» и в окне есть смена исхода |
Первые три признака срабатывают сразу, даже до того, как автотест накопил «Минимум прогонов до классификации»; остальные три — только после. Повышение порогов уже поставленную пометку не снимает, см. Как снимается пометка.
Элемент окна — прогон, а не строка результата: если параметризованный автотест дал в одном прогоне несколько строк, в окно идёт одна, с худшим исходом. Результаты ручных перепрохождений в окно не попадают.
Настроить детекцию
- Откройте раздел «Нестабильные тесты». Форма заполнена текущими значениями; плашка «Используются значения по умолчанию» означает, что своя политика у пространства ещё не сохранялась.
- Измените нужные поля. Внизу появляется кнопка «Сохранить».
- Нажмите «Сохранить». Появляется всплывающее уведомление «Изменения сохранены».
При ошибке текст выводится под формой, а если сервер причину не назвал — «Не удалось сохранить политику нестабильных тестов. Попробуйте ещё раз.».

На скриншоте: 1 — плашка «Используются значения по умолчанию», 2 — значок-подсказка у поля, 3 — подпись «по умолчанию: X» под числовым полем, 4 — кнопка «Сохранить».
Основное
| Поле | По умолчанию | Что делает |
|---|---|---|
| «Определять нестабильные тесты автоматически» | включено | пока включено, DoQA пересчитывает состояния; снимите — анализ стабильности останавливается полностью, уже проставленные состояния остаются как есть |
Определение
| Поле | По умолчанию | Что делает |
|---|---|---|
| «Доля падений для пометки нестабильным, %» | 15 (0–100) | доля падений в окне, при которой автотест помечается нестабильным |
| «Доля падений для снятия пометки, %» | 5 (0–100) | доля падений, до которой автотест должен опуститься, чтобы пометка снялась |
| «Окно последних прогонов» | 50 (20–100) | сколько последних результатов автотеста анализируется; более старые выходят из окна и на вердикт не влияют |
| «Минимум прогонов до классификации» | 20 (20–100) | пока автотест не накопил столько результатов, признаки с порогами считают его стабильным |
| «Порог показателя нестабильности» | 0.2 (0–1, шаг 0.05) | показатель 0…1: как часто результат переключается между успехом и падением |
| «Число падений для пометки (необязательно)» | пусто (целое ≥ 1) | дополнительное условие по абсолютному числу падений в окне |
Два ограничения проверяются при сохранении:
- «Доля падений для снятия пометки, %» — строго меньше «Доля падений для пометки нестабильным, %», иначе форма не сохраняется: «Доля падений для снятия пометки должна быть строго меньше доли для пометки.»;
- «Окно последних прогонов» — не меньше «Минимума прогонов до классификации», иначе «Окно последних прогонов не может быть меньше минимума прогонов до классификации.».
Карантин
| Поле | По умолчанию | Что делает |
|---|---|---|
| «Автоматически отправлять нестабильные тесты в карантин» | выключено | автотест, получивший на пересчёте состояние «Нестабильный», уходит в карантин сам — условия ниже |
| «Порог показателя для авто-карантина» | 0.5 (0–1, шаг 0.05) | показатель нестабильности, начиная с которого нестабильный автотест уходит в карантин автоматически |
| «Доля падений для статуса „сломан“, %» | 90 (0–100) | начиная с этой доли падений автотест без смен исхода считается сломанным, а не нестабильным |
| «Максимум смен исхода у сломанного теста» | 1 (целое ≥ 0) | сколько смен исхода ещё допустимо, чтобы автотест считался сломанным |
Два последних поля стоят в подразделе «Сломанные тесты».
Жизненный цикл
| Поле | По умолчанию | Что делает |
|---|---|---|
| «Дней без падений до статуса „исправлен“» | 7 (1–90) | сколько дней подряд без падений нужно, чтобы автотест получил состояние «Исправлен» и вышел из карантина |
| «Считать стабильность по веткам» | включено | стабильность считается отдельно по каждой ветке в дополнение к общей цифре по всем веткам |
| «Уведомлять AQA-лидов о новых нестабильных тестах» | включено | включает уведомление «Автотест признан нестабильным» |
Как снимается пометка
Только автоматически: снять пометку нестабильности вручную нельзя. Такой кнопки в интерфейсе нет.
- Доля падений упала. Доля падений опустилась до значения «Доля падений для снятия пометки, %» и смен исхода в окне нет — автотест становится «Стабильным».
- Дни без падений. Подряд накоплено «Дней без падений до статуса „исправлен“», в окне нет ни падений, ни смен исхода — автотест становится «Исправлен»; если он был в карантине, карантин снимается.
- Детекция выключена. Тумблер «Определять нестабильные тесты автоматически» снят — состояния перестают меняться вовсе, уже проставленные пометки остаются.
Карантин
Отправить автотест в карантин
- В каталоге автотестов отметьте чек-боксами один или несколько автотестов. Внизу появляется панель массовых действий.
- Нажмите «В карантин». Появляется всплывающее уведомление «Карантин обновлён», в строке — значок «В карантине», состояние меняется на «В карантине».
Те же действия есть в меню строки («три точки») и в панели автотеста, на вкладке «История прохождения» в правой колонке. Карантин снимает кнопка «Снять карантин» там же; в панели массовых действий она появляется, если среди выбранных есть хотя бы один автотест в карантине. Без права изменять прогоны чек-боксы и кнопки не показываются.
Из каталога карантин ставится на ветку, выбранную в фильтре «Ветка»; если в фильтре «Все ветки» — сразу на все. Из панели автотеста карантин всегда ставится на все ветки.
Внимание
Снятие карантина по всем веткам снимает его и с каждой отдельной ветки, даже если в каталоге этот карантин уже не был виден. Обратной операции «снять со всех веток, оставив отдельные» нет.

На скриншоте: 1 — чек-боксы строк, 2 — значок «В карантине» в столбце «Автотесты» (у другого автотеста списка), 3 — кнопка «В карантин» в нижней панели массовых действий.
Автоматический карантин
Включается тумблером «Автоматически отправлять нестабильные тесты в карантин». Работает только для автотеста, который на этом пересчёте получил состояние «Нестабильный» и ещё не в карантине, при любом из двух условий:
- показатель нестабильности ≥ «Порог показателя для авто-карантина»;
- доля падений ≥ «Доля падений для пометки нестабильным, %» и предыдущее состояние уже было «Нестабильный».
Автотесты в состоянии «Сломан» в автоматический карантин не попадают никогда. Если карантин сняли вручную и после этого автотест ни разу не падал, автоматика не ставит карантин повторно.
Автоматически карантин снимается единственным путём: переходом в «Исправлен» по дням без падений.
Что карантин меняет
- Автотест в карантине (как и в состоянии «Отключён») не участвует в оценке Quality Gate: его падения не учитываются и не роняют пайплайн. Достаточно карантина на ветке прогона или на всех ветках.
- Автотест продолжает выполняться в каждом прогоне: карантин не отключает запуск, он снимает только блокировку Quality Gate.
- Из статистики стабильности карантин не исключает: окно, доля падений и «Балл нестабильности» считаются как обычно.
Почему автотест стал нестабильным
- Откройте панель автотеста в каталоге и перейдите на вкладку «Стабильность».
- В секции «Смены состояния стабильности» посмотрите переходы: дата и время, «состояние → состояние», «Балл нестабильности» и, если есть, «Причина».
Выпадающий список «Ветка» в этой секции переключает историю между «Все ветки» и конкретной веткой.
Плитка «Состояние стабильности» показывает упрощённо: «Стабилен» — для состояний «Стабильный» и «Исправлен», «Нестабилен» — для всех остальных. Полное название состояния видно в списке переходов и в плашке в шапке панели. Текст в строке «Причина» формируется автоматически и не переводится, например: auto-quarantine: score 0.610 ≥ 0.500.

На скриншоте: 1 — плитка «Состояние стабильности», 2 — плитка «Балл нестабильности», 3 — строка перехода с «Причина» в списке «Смены состояния стабильности».
Ответственный и уведомления
- Откройте панель автотеста в каталоге — вкладка «История прохождения».
- В правой колонке выберите пользователя в селекторе ответственного: пока никто не выбран, в нём стоит «Не назначен».
Выбор сохраняется сразу. При ошибке значение возвращается прежнее и появляется всплывающее уведомление «Не удалось изменить ответственного». Ответственный назначается автотесту целиком, всем веткам сразу; отдельного ответственного за нестабильность или за отдельную ветку в интерфейсе нет.
Уведомление «Автотест признан нестабильным» получает ответственный за автотест, а если он не назначен — все, у кого есть право редактировать прогоны в пространстве. Уведомление уходит только при первом за всё время переходе автотеста в «Нестабильный» или «В карантине»; повторные переходы не уведомляют. Отправку выключает тумблер «Уведомлять AQA-лидов о новых нестабильных тестах».
Особенности
- Флаг карантина и состояние «В карантине» — разные вещи: снятие карантина гасит флаг, а состояние тут же пересчитывается по окну и может вернуться в «Нестабильный», если доля падений всё ещё высокая.
- Изменённая политика не пересчитывает состояния задним числом: автотест получает новое состояние при следующем своём прогоне.
- Пересчёт запускается по завершении прогона и по завершении авто-повтора, в фоне; пересчитываются только пары «автотест + ветка», встретившиеся в этом прогоне.
- Смена ответственного не меняет состояние автотеста и не запускает пересчёт.
Смотрите также
- Каталог автотестов — где смотреть состояния, историю и вкладку «Стабильность» каждого автотеста
- Кластеры ошибок — группировка падений по сигнатуре, в том числе падений нестабильных автотестов
- Quality Gate — как оценка прогона учитывает карантинные и отключённые автотесты
- Авто-повтор — повторный запуск упавших автотестов, после которого пересчитывается стабильность
- Уведомления — полный список событий и кто их получает