Аналитика тестов Xcode
Tuist Test Insights предоставляет аналитику тестов Xcode для мониторинга состояния вашего набора тестов, выявляя медленные тесты или помогая быстро понять причины сбоев в CI. По мере роста набора тестов становится всё сложнее замечать тенденции, такие как постепенное замедление тестов или периодические сбои. Tuist Test Insights даёт вам необходимую видимость для поддержания быстрого и надёжного набора тестов.
С помощью Test Insights вы можете ответить на такие вопросы, как:
- Стали ли мои тесты медленнее? Какие именно?
- Какие тесты нестабильны и требуют внимания?
- Почему мой запуск CI завершился неудачей?
Настройка#
Чтобы начать отслеживать ваши тесты, вы можете использовать команду tuist inspect test, добавив её в пост-действие теста вашей схемы:

Если вы используете Mise, вашему скрипту потребуется активировать tuist в среде пост-действия:
# -C ensures that Mise loads the configuration from the Mise configuration
# file in the project's root directory.
$HOME/.local/bin/mise x -C $SRCROOT -- tuist inspect test
Переменная окружения PATH вашей среды не наследуется пост-действием схемы, поэтому вам нужно использовать абсолютный путь к Mise, который будет зависеть от способа установки Mise. Кроме того, не забудьте наследовать настройки сборки от цели в вашем проекте, чтобы вы могли запускать Mise из директории, на которую указывает $SRCROOT.
Ваши запуски тестов теперь отслеживаются, пока вы вошли в свой аккаунт Tuist. Вы можете получить доступ к аналитике тестов в панели управления Tuist и увидеть, как они меняются со временем:

Помимо общих тенденций, вы также можете детально изучить каждый отдельный тест, например, при отладке сбоев или медленных тестов в CI:

Сгенерированные проекты#
Автосгенерированные схемы автоматически включают пост-действие tuist inspect test.
Если вы не хотите отслеживать аналитику тестов в автосгенерированных схемах, отключите её, используя опцию генерации testInsightsDisabled.
Если вы используете сгенерированные проекты с пользовательскими схемами, вы можете настроить пост-действия для аналитики тестов:
let project = Project(
name: "MyProject",
targets: [
// Your targets
],
schemes: [
.scheme(
name: "MyApp",
shared: true,
buildAction: .buildAction(targets: ["MyApp"]),
testAction: .testAction(
targets: ["MyAppTests"],
postActions: [
// Test insights: Track test duration and flakiness
.executionAction(
title: "Inspect Test",
scriptText: """
$HOME/.local/bin/mise x -C $SRCROOT -- tuist inspect test
""",
target: "MyAppTests"
)
]
),
runAction: .runAction(configuration: "Debug")
)
]
)
Если вы не используете Mise, ваши скрипты можно упростить до:
testAction: .testAction(
targets: ["MyAppTests"],
postActions: [
.executionAction(
title: "Inspect Test",
scriptText: "tuist inspect test"
)
]
)
Непрерывная интеграция#
Для отслеживания аналитики тестов в CI вам нужно убедиться, что ваш CI аутентифицирован.
Кроме того, вам потребуется либо:
- Использовать команду
tuist xcodebuildпри вызове действийxcodebuild. - Добавить
-resultBundlePathк вашему вызовуxcodebuild.
Когда xcodebuild тестирует ваш проект без -resultBundlePath, необходимые файлы пакетов результатов не генерируются. Пост-действию tuist inspect test требуются эти файлы для анализа ваших тестов.
История Git#
В CI Tuist также загружает историю коммитов checkout: SHA коммитов, их родителей, даты коммитов и ветку, в которой выполнялся запуск, а также базовую ветку pull request'а. Содержимое файлов, сообщения коммитов или авторы не загружаются. Это позволяет Tuist определить, какие коммиты попали в вашу основную ветку, например, те, которые тестировала очередь слияния. Tuist читает историю, которая уже есть в checkout, а если в checkout нет базовой ветки, запрашивает у удалённого репозитория последний коммит (git ls-remote). Вне контекста покрытия кода история не загружается.
| Переменная | Эффект |
|---|---|
TUIST_GIT_UPLOAD_ENABLED=false | Не читает и не загружает историю Git. |
TUIST_GIT_UNSHALLOW_ENABLED=false | Читает только checkout, не обращаясь к удалённому репозиторию. |