Нестабильные тесты в Rust
Tuist может обнаруживать противоречивые результаты тестов Cargo и помогать вам исследовать их в разделе Тесты → Нестабильные тесты.
- Настройте аналитику тестов Rust.
Как работает обнаружение нестабильности#
Tuist сравнивает запуски CI для одного и того же коммита. Тест, который проходит в одном запуске и падает в другом, может быть помечен как нестабильный.
Отправляйте отчет о каждом запуске с помощью обычной команды:
tuist cargo test --workspace
Cargo не повторяет упавшие тесты автоматически. Повторный запуск задачи CI на том же коммите дает еще один результат для межзапускового обнаружения.
Управление нестабильными тестами#
Автоматическая очистка#
Обнаружение и восстановление выполняются через автоматизацию проекта «Обнаружение нестабильных тестов». По умолчанию флаг нестабильности снимается через 14 дней без повторного срабатывания. Измените окно восстановления и действия в разделе Настройки → Автоматизации.
Ручное управление#
Откройте Тесты → Нестабильные тесты, чтобы просмотреть историю теста. Вы можете вручную пометить или снять пометку о нестабильности на странице деталей теста.
Карантин и стресс-тестирование#
Заглушите или пропустите тест на странице его деталей либо настройте карантин в разделе Настройки → Автоматизации. Следующий запуск tuist cargo test получит текущее состояние карантина проекта:
- Заглушенные тесты все равно выполняются и сообщают свои фактические результаты, но их сбои не приводят к падению команды. Другие сбои тестов, ошибки компиляции, краши и неполные результаты по-прежнему приводят к обычному падению.
- Пропущенные тесты исключаются из выполнения и отмечаются как пропуски из-за карантина. Сопоставление включает пакет, цель, путь модуля Rust и имя теста, поэтому тесты с похожими именами остаются независимыми.
При заглушении сохраняются выбранные пакеты рабочего пространства и возможности, а также выполняются все выбранные цели, даже если заглушенная цель падает. Пропуск по карантину требует выбора одного пакета: используйте tuist cargo test -p store вместо команды для многопакетного рабочего пространства. Tuist отклоняет пропуск нескольких пакетов, потому что сужение команды может изменить объединенные возможности зависимостей Cargo.
Карантин также применяется к разделенным запускам Cargo. Если Tuist не может получить состояние, он выдает предупреждение и выполняет запуск без карантина; сбои не подавляются. Чтобы намеренно запустить без карантина:
TUIST_TEST_SKIP_QUARANTINE=1 tuist cargo test --workspace
Для применения требуются стандартные harness-фреймворки libtest и захват вывода по умолчанию. Команды с тихим, подробным, альтернативным форматом или незахваченным выводом завершаются ошибкой, когда нужно применить карантин. Выберите точный пакет рабочего пространства с помощью -p <package>, если определение цели неоднозначно. Пользовательские harness-фреймворки, глобы имен пакетов/целей и неразрешенные выборы пакетов не поддерживаются. Doctest-тесты также можно заглушать или пропускать, но фильтрация тестов Rustdoc не может различить каждую возможную пару имен примеров. Если пропуск примера также привел бы к пропуску включенного примера или частичное исключение doctest использует --exact, Tuist завершается с диагностикой вместо выполнения пропущенного примера или молчаливого пропуска включенных тестов; используйте приведенное выше переопределение во время расследования.
Tuist не проводит стресс-тестирование новых тестов Cargo. Используйте фильтр тестов Cargo, чтобы повторить падающий тест во время его исследования:
tuist cargo test -p store rejects_invalid_token
Уведомления в Slack#
Настройте оповещения о нестабильных тестах в Slack, чтобы уведомлять вашу команду, когда тест становится нестабильным.