Rust 테스트 샤딩
Tuist는 과거 타겟 실행 시간을 기반으로 CI 워커 간에 Cargo 테스트 타겟을 분배합니다. 단위 테스트 타겟, 통합 테스트 타겟 및 각 라이브러리의 doctests는 별도의 모듈로 처리됩니다. 하나의 타겟 내 테스트는 함께 유지됩니다.
- Rust Test Insights를 구성하고 계획 작업 및 워커에서 CLI 인증을 수행하세요.
- 워크스페이스에서
-p <package>를 사용하여 단일 패키지를 선택하세요. 다중 패키지 샤딩은 지원되지 않습니다. - 모든 작업에서 동일한 리비전, Rust 툴체인, 패키지 선택, 기능 및 테스트 필터를 사용하세요.
계획 생성#
테스트를 실행하지 않고 타겟을 컴파일하고 열거하려면 --no-run에 샤드 수를 추가하세요:
TUIST_SHARD_REFERENCE=my-ci-run tuist cargo test -p store --no-run --shard-max 4
이 명령은 shard_plan_id과 0부터 시작하는 shards 배열을 포함한 JSON을 출력합니다. GitHub Actions에서는 shard-plan-id와 shards를 GITHUB_OUTPUT에도 기록합니다. 명시적 참조가 없으면 Tuist는 지원되는 CI 환경에서 참조를 파생시킵니다.
| 옵션 | 설명 |
|---|---|
--shard-max N | 최대 샤드 수 |
--shard-min N | 최소 샤드 수 |
--shard-total N | 사용 가능한 타겟 수까지의 정확한 개수 |
--shard-max-duration N | 목표 최대 샤드 지속 시간(밀리초) |
--shard-total만 단독으로 사용하거나 --shard-min와 --shard-max를 조합하세요. 과거 실행 시간이 없으면 플래너는 기본 타겟 추정치를 사용합니다. 샤딩 옵션이 없는 일반 --no-run는 빌드 전용 명령으로 남습니다.
각 샤드 실행#
각 워커에서 계획 ID와 샤드 인덱스를 설정한 후 동일한 Cargo 테스트 인수를 사용하세요:
TUIST_SHARD_PLAN_ID=<plan-id> TUIST_SHARD_INDEX=0 tuist cargo test -p store
또는 계획 ID를 전달하는 대신 TUIST_SHARD_REFERENCE를 계획 작업의 참조로 설정하세요. Tuist는 할당 정보를 가져와 Cargo가 해당 타겟만 실행하도록 요청합니다. 유효하지 않거나 호환되지 않는 할당은 모든 테스트를 실행하는 대신 명령을 실패시킵니다. 빈 할당은 테스트를 실행하지 않습니다. 워커의 결과는 Test Insights에서 계획과 연결되며, 격리는 각 샤드 내에서 적용됩니다.
제한 사항#
이는 타겟 수준 샤딩이며 한 번 빌드하여 배포하는 방식이 아닙니다. 각 워커는 소스 체크아웃이 필요하며 자체 타겟을 빌드합니다. Cargo 컴파일 캐시는 재사용 가능한 컴파일 산출물을 재활용할 수 있습니다. Tuist는 테스트 실행 파일을 업로드하거나 다른 Rust 테스트 러너를 요구하지 않습니다.
샤딩에는 선택된 단일 패키지가 필요합니다. 다중 패키지 명령을 좁히면 Cargo의 통합 의존성 기능이 변경될 수 있으므로, Tuist는 다른 기능 그래프로 테스트를 실행하는 대신 이를 거부합니다. 다중 패키지 샤딩이 지원될 때까지 각 패키지를 별도로 계획하세요.
샤딩에는 표준 libtest 하네스와 캡처된 기본 출력이 필요합니다. Quiet, verbose, alternate-format, uncaptured-output 및 custom-harness 명령은 거부됩니다. Cargo가 타겟을 고유하게 식별할 수 없는 경우 -p <package>를 사용하여 정확한 워크스페이스 패키지를 선택하세요. 의존성 패키지, 버전 한정 선택기, 패키지/타겟 이름 글롭 및 Cargo의 야간 -C 옵션은 샤딩에서 지원되지 않습니다. 계획 단계와 실행 단계 간 테스트 선택을 동일하게 유지하세요.