콘텐츠로 이동

cargo-nextest - 차세대 Rust 테스트 러너 치트시트

cargo-nextest - 차세대 Rust 테스트 러너 치트시트

cargo-nextest는 Rust를 위한 차세대 테스트 러너입니다. cargo test와의 핵심 구조적 차이는 각 테스트를 자신의 프로세스에서 실행한다는 것인데, 이는 진정한 격리(한 테스트가 다른 테스트의 글로벌 상태를 손상시킬 수 없음), 더 나은 병렬 처리, 그리고 프로세스를 충돌시키는 테스트를 보고할 수 있는 기능을 제공합니다. 실제로는 보통 2–3배 빠르며 큰 스위트의 경우 훨씬 깨끗한 출력, 불안정 테스트 감지, CI 샤딩을 위한 분할이 있습니다.

설치

방법명령
사전 제작 (가장 빠름)cargo install cargo-nextest --locked
바이너리nextest 릴리스에서 다운로드
macOS (Homebrew)brew install cargo-nextest
확인cargo nextest --version

기본 사용법

명령설명
cargo nextest run모든 테스트 실행
cargo nextest run -p mycrate한 패키지
cargo nextest run test_name부분 문자열로 필터
cargo nextest list실행하지 않고 테스트 나열
cargo nextest run --release릴리스 프로필
cargo nextest run --no-fail-fast실패 후 계속 진행

필터링 (Filtersets)

nextest는 테스트를 선택하기 위한 표현 언어를 가지고 있습니다.

표현선택
-E 'test(auth)'이름이 auth와 일치하는 테스트
-E 'package(mycrate)'패키지의 모든 테스트
-E 'kind(lib)'lib (단위) 테스트만
-E 'binary(integration)'특정 테스트 바이너리
-E 'test(a) + test(b)'합집합
-E 'package(x) - test(slow)'차집합
# 하나의 크레이트에 대한 통합 테스트 실행, 느린 것 제외
cargo nextest run -E 'package(api) and kind(test) - test(slow)'

불안정한 테스트 감지

# 실패를 3번까지 재시도; 재시도에서 통과하는 테스트는 FLAKY로 표시
cargo nextest run --retries 3
구성효과
--retries N실패한 테스트 N번 재시도
FLAKY로 보고재시도 후에만 통과
테스트별 오버라이드구성에서 특정 테스트에 대한 재시도 설정

이러한 구분이 중요합니다: 불안정한 테스트는 실패한 테스트와 다른 문제이며, nextest는 재실행 뒤에 숨기는 대신 명시적으로 표면화합니다.

구성

# .config/nextest.toml
[profile.default]
retries = 0
fail-fast = false
slow-timeout = { period = "30s", terminate-after = 2 }

[profile.ci]
retries = 2
failure-output = "immediate-final"
status-level = "skip"

[[profile.default.overrides]]
filter = 'test(integration)'
threads-required = 2
설정목적
retries기본 재시도 횟수
slow-timeout지속 기간을 초과하는 플래그/종료 테스트
threads-required무거운 테스트를 위한 예약 용량
failure-output실패 세부 사항 출력 시기
Profilescargo nextest run -P ci

CI 샤딩

# 4대의 CI 머신 간 스위트 분할
cargo nextest run --partition count:1/4   # 러너 1에서
cargo nextest run --partition count:2/4   # 러너 2에서
모드분할 기준
count:N/M테스트 수별 라운드 로빈
hash:N/M안정적 해시 (동일 테스트 → 동일 샤드)

출력 및 보고

옵션효과
--status-level all모든 테스트의 상태 표시
--failure-output immediate발생 시 실패 인쇄
--message-format libtest-json머신 가독 출력
--profile ciCI 조정 설정 사용
JUnit outputCI 보고를 위해 nextest.toml에서 구성

제한 사항

지원 안 함이유
Doctestscargo test --doc로 별도 실행
#[bench]대신 criterion 사용
일부 libtest 플래그다른 러너 의미론

일반적인 CI 패턴은 cargo nextest run && cargo test --doc입니다.

nextest vs cargo test

측면cargo nextestcargo test
프로세스 모델테스트당 하나바이너리당 하나
격리강력바이너리 내 공유
속도보통 2–3배 빠름기준선
불안정 감지기본 제공없음
CI 샤딩기본 제공수동
Doctests아니오

리소스