Ir al contenido

cargo-nextest - Ejecutor de Pruebas Rust de Nueva Generación Hoja de Trucos

cargo-nextest - Ejecutor de Pruebas Rust de Nueva Generación Hoja de Trucos

cargo-nextest es un ejecutor de pruebas de nueva generación para Rust. Su diferencia arquitectónica fundamental de cargo test es que ejecuta cada prueba en su propio proceso, lo que da verdadero aislamiento (una prueba no puede corromper el estado global de otra), mejor paralelismo y la capacidad de informar una prueba que bloquea el proceso en lugar de perder toda la ejecución. En la práctica es típicamente 2–3x más rápido que cargo test en suites grandes, con salida mucho más limpia, detección de pruebas inestables y particionamiento para sharding de CI.

Instalación

MétodoComando
Precompilado (más rápido)cargo install cargo-nextest --locked
Binarydescarga desde los releases de nextest
macOS (Homebrew)brew install cargo-nextest
Verificarcargo nextest --version

Uso Básico

ComandoDescripción
cargo nextest runEjecutar todas las pruebas
cargo nextest run -p mycrateUn paquete
cargo nextest run test_nameFiltrar por substring
cargo nextest listListar pruebas sin ejecutar
cargo nextest run --releasePerfil release
cargo nextest run --no-fail-fastSeguir después de fallos

Filtrado (Filtersets)

nextest tiene un lenguaje de expresión para seleccionar pruebas.

ExpresiónSelecciona
-E 'test(auth)'Pruebas cuyo nombre coincida auth
-E 'package(mycrate)'Todas las pruebas en un paquete
-E 'kind(lib)'Solo pruebas lib (unitarias)
-E 'binary(integration)'Un binario de prueba específico
-E 'test(a) + test(b)'Unión
-E 'package(x) - test(slow)'Diferencia
# Ejecutar pruebas de integración para un crate, excluyendo las lentas
cargo nextest run -E 'package(api) and kind(test) - test(slow)'

Detección de Pruebas Inestables

# Reintentar fallos hasta 3 veces; pruebas que pasan en reintento se marcan FLAKY
cargo nextest run --retries 3
ConfigEfecto
--retries NReintentar pruebas fallidas N veces
Reportado como FLAKYPasó solo después de un reintento
Overrides por pruebaConfigurar reintentos para pruebas específicas

Esta distinción importa: una prueba inestable es un problema diferente de una prueba fallida, y nextest lo expone explícitamente en lugar de ocultarlo detrás de una re-ejecución.

Configuración

# .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
SettingPropósito
retriesConteo de reintento predeterminado
slow-timeoutFlag/matar pruebas excediendo duración
threads-requiredReservar capacidad para pruebas pesadas
failure-outputCuándo imprimir detalles de fallo
Perfilescargo nextest run -P ci

Sharding de CI

# Dividir la suite en 4 máquinas de CI
cargo nextest run --partition count:1/4   # en runner 1
cargo nextest run --partition count:2/4   # en runner 2
ModoDivide por
count:N/MRound-robin por conteo de pruebas
hash:N/MHash estable (misma prueba → mismo shard)

Salida y Reporte

OpciónEfecto
--status-level allMostrar estado de cada prueba
--failure-output immediateImprimir fallos mientras suceden
--message-format libtest-jsonSalida legible para máquina
--profile ciUsar configuraciones ajustadas para CI
Salida JUnitConfigurar en nextest.toml para reporte de CI

Limitaciones

No soportadoPor qué
DoctestsEjecutar separadamente con cargo test --doc
#[bench]Usar criterion en su lugar
Algunos flags de libtestSemántica de ejecutor diferente

Un patrón común de CI es cargo nextest run && cargo test --doc.

nextest vs cargo test

Aspectocargo nextestcargo test
Modelo de procesoUno por pruebaUno por binario
AislamientoFuerteCompartido dentro de binario
Velocidad2–3x más rápido típicoLínea base
Detección flakyIntegradaNinguna
Sharding de CIIntegradoManual
DoctestsNo

Recursos