testx is a universal test runner that auto-detects your project's language and framework, runs your tests, and displays clean, unified output. Zero configuration required.
testx · Python (pytest)
────────────────────────────────────────────────────────────
✓ tests/test_math.py
✓ test_add 1ms
✓ test_subtract 0ms
✗ test_divide_by_zero 1ms
────────────────────────────────────────────────────────────
FAIL 2 passed, 1 failed (3 total) in 120ms
Features
- Auto-detection — Identifies language and test framework from project files
- 11 languages — Rust, Go, Python, JavaScript/TypeScript, Java, C/C++, Ruby, Elixir, PHP, .NET, Zig
- Multiple output formats — Pretty (default), JSON, JUnit XML, TAP
- CI sharding — Split tests across CI nodes with
--partition slice:1/4orhash:2/3 - Stress testing — Run tests N times to find flaky tests with
testx stress - Impact analysis — Only run tests affected by recent git changes with
--affected - Smart caching — Skip re-running tests when nothing changed with
--cache - Interactive picker — Fuzzy-search and pick specific tests with
testx pick - Watch mode — Re-run tests on file changes
- Retry logic — Automatically retry failing tests
- Parallel execution — Run multiple test suites concurrently
- Coverage integration — LCOV, Cobertura, JaCoCo, Go coverage
- Plugin system — Custom adapters, reporter plugins, shell hooks
- History tracking — Track test health scores and trends over time
Supported Languages
| Language | Frameworks | Package Managers |
|---|---|---|
| Rust | cargo test | — |
| Go | go test | — |
| Python | pytest, unittest, Django | uv, poetry, pdm, venv |
| JavaScript / TypeScript | Jest, Vitest, Mocha, AVA, Bun | npm, pnpm, yarn, bun |
| Java / Kotlin | Maven Surefire, Gradle | mvn, gradle |
| C / C++ | Google Test, CTest, Meson | cmake, meson |
| Ruby | RSpec, Minitest | bundler |
| Elixir | ExUnit | mix |
| PHP | PHPUnit | composer |
| C# / .NET / F# | dotnet test | dotnet |
| Zig | zig build test | — |
Installation
From source
From releases
Download a prebuilt binary from the releases page.
Shell completions
# Bash
# Zsh
# Fish
# PowerShell
Quick Start
# Run tests in the current directory
# Run tests in a specific project
# Detect framework without running tests
# Pass extra arguments to the underlying runner
Usage
Output formats
CI sharding
Split tests across parallel CI jobs:
# Slice-based (deterministic, ordered)
# Hash-based (stable across test additions)
GitHub Actions example:
jobs:
test:
strategy:
matrix:
shard:
steps:
- run: testx --partition slice:${{ matrix.shard }}/4
Flaky test detection
# Run tests 10 times (default)
# Run 50 iterations, stop on first failure
# Cap total time at 60 seconds
Output:
Stress Test Report: 10/10 iterations in 5.23s
Flaky Tests Detected:
test_network_call (7/10 passed, 70.0% pass rate, avg 12ms)
Impact analysis
Only run tests when relevant source files changed:
# Skip tests if only docs changed
# Analyze what changed without running
# Compare against a branch
Smart caching
# Skip re-running if source files haven't changed
# Clear the cache
Interactive test picker
Fuzzy-search through all discovered tests, select one or more, and run only those.
Other options
Configuration
Create a testx.toml in your project root (or run testx init):
# Override detected adapter
# adapter = "python"
# Extra arguments for the test runner
= ["-v", "--no-header"]
# Timeout in seconds (0 = no timeout)
= 60
# Environment variables
[]
= "true"
CLI flags always override config file values.
Plugin System
Custom adapters
Define custom test commands in testx.toml:
[[]]
= "my-framework"
= ["my-config.json"]
= "my-test-runner"
= ["--reporter", "json"]
= "json"
Reporter plugins
Built-in reporters:
- Markdown — Generate markdown test reports
- GitHub Actions — Annotations with
::error::/::warning:: - HTML — Standalone HTML report
- Desktop notifications — System notification on completion
Building from Source
Running the test suite
Stats
| Metric | Value |
|---|---|
| Languages supported | 11 |
| Test frameworks | 20+ |
| Source lines | ~29,000 |
| Test count | 889 (846 unit + 43 integration) |
| Binary size (release) | 2.9 MB |
| Framework detection | ~5ms |
| Rust source files | 53 |
| Dependencies | minimal (clap, serde, colored, toml, anyhow) |
| Clippy warnings | 0 |
Contributing
See CONTRIBUTING.md for guidelines.