Xcode 테스트 인사이트
Tuist Test Insights는 느린 테스트를 식별하거나 실패한 CI 실행을 빠르게 파악하여 테스트 스위트의 상태를 모니터링할 수 있는 Xcode 테스트 분석 기능을 제공합니다. 테스트 스위트가 커질수록 점차 느려지는 테스트나 간헐적인 실패와 같은 추세를 파악하기가 점점 더 어려워집니다. 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의 절대 경로를 사용해야 합니다. 또한 $SRCROOT가 가리키는 디렉터리에서 Mise를 실행할 수 있도록 프로젝트의 타겟에서 빌드 설정을 상속하는 것을 잊지 마세요.
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가 인증됨인지 확인해야 합니다.
또한 다음 중 하나가 필요합니다:
xcodebuild작업을 호출할 때tuist xcodebuild명령어를 사용하세요.xcodebuild호출에-resultBundlePath를 추가하세요.
xcodebuild가 -resultBundlePath 없이 프로젝트를 테스트하면 필요한 결과 번들 파일이 생성되지 않습니다. tuist inspect test 사후 동작은 테스트를 분석하기 위해 이러한 파일이 필요합니다.
Git 히스토리#
CI에서 Tuist는 체크아웃의 커밋 히스토리(커밋 SHA, 부모 커밋, 커밋 날짜, 실행 및 해당 풀 리퀘스트의 기본 브랜치)도 업로드합니다. 파일 내용, 커밋 메시지 또는 작성자는 업로드되지 않습니다. 이는 Tuist가 머지 큐에서 테스트된 커밋과 같이 기본 브랜치에 도착한 커밋을 식별하는 데 사용됩니다. Tuist는 체크아웃에 이미 있는 히스토리를 읽으며, 체크아웃에 기본 브랜치가 없는 경우 원격 저장소에 최신 커밋(git ls-remote)을 요청합니다. 코드 커버리지를 제외한 경우에는 히스토리를 가져오지 않습니다.
| 변수 | 효과 |
|---|---|
TUIST_GIT_UPLOAD_ENABLED=false | Git 히스토리를 읽거나 업로드하지 않습니다. |
TUIST_GIT_UNSHALLOW_ENABLED=false | 원격 저장소에 연결하지 않고 체크아웃만 읽습니다. |