{"id":48351026,"url":"https://github.com/whoisdinanath/testx","last_synced_at":"2026-04-10T14:01:39.144Z","repository":{"id":349157582,"uuid":"1201114529","full_name":"whoisdinanath/testx","owner":"whoisdinanath","description":"One command. Any language. Beautiful tests. — Universal test runner with auto-detection for 11 languages.","archived":false,"fork":false,"pushed_at":"2026-04-05T10:54:01.000Z","size":11043,"stargazers_count":52,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-04-07T11:02:19.910Z","etag":null,"topics":["cli","rust","test-runner","testing","testx","universal-test-runner"],"latest_commit_sha":null,"homepage":"https://testx-cli.readthedocs.io","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/whoisdinanath.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"whoisdinanath"}},"created_at":"2026-04-04T08:23:42.000Z","updated_at":"2026-04-07T01:24:20.000Z","dependencies_parsed_at":null,"dependency_job_id":"1c6cc9b7-dba1-4f03-9c0d-fc4317872d2f","html_url":"https://github.com/whoisdinanath/testx","commit_stats":null,"previous_names":["whoisdinanath/testx"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/whoisdinanath/testx","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whoisdinanath%2Ftestx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whoisdinanath%2Ftestx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whoisdinanath%2Ftestx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whoisdinanath%2Ftestx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/whoisdinanath","download_url":"https://codeload.github.com/whoisdinanath/testx/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whoisdinanath%2Ftestx/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31554109,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T10:21:54.569Z","status":"ssl_error","status_checked_at":"2026-04-08T10:21:38.171Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","rust","test-runner","testing","testx","universal-test-runner"],"created_at":"2026-04-05T09:00:56.712Z","updated_at":"2026-04-08T12:01:01.601Z","avatar_url":"https://github.com/whoisdinanath.png","language":"Rust","funding_links":["https://github.com/sponsors/whoisdinanath"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ch1 align=\"center\"\u003etestx\u003c/h1\u003e\n  \u003cp align=\"center\"\u003e\u003cstrong\u003eOne command. Any language. Beautiful tests.\u003c/strong\u003e\u003c/p\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://crates.io/crates/testx-cli\"\u003e\u003cimg src=\"https://img.shields.io/crates/v/testx-cli\" alt=\"crates.io\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://crates.io/crates/testx-cli\"\u003e\u003cimg src=\"https://img.shields.io/crates/d/testx-cli\" alt=\"Downloads\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/whoisdinanath/testx/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://github.com/whoisdinanath/testx/actions/workflows/ci.yml/badge.svg\" alt=\"CI\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/whoisdinanath/testx/releases/latest\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/whoisdinanath/testx?label=release\" alt=\"Release\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://testx-cli.readthedocs.io/\"\u003e\u003cimg src=\"https://img.shields.io/badge/docs-readthedocs-blue?logo=readthedocs\" alt=\"Docs\"\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-blue\" alt=\"License\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/rust-1.87+-orange?logo=rust\" alt=\"Rust 1.87+\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/languages-11-blueviolet\" alt=\"11 Languages\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/tests-1137-brightgreen\" alt=\"1137 Tests\"\u003e\n\u003c/p\u003e\n\n**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.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"demo/demo.gif\" alt=\"testx demo\" width=\"800\"\u003e\n\u003c/p\u003e\n\n## Why testx?\n\n|                     | Without testx                 | With testx              |\n| ------------------- | ----------------------------- | ----------------------- |\n| **Rust**            | `cargo test`                  | `testx`                 |\n| **Python**          | `uv run pytest -v`            | `testx`                 |\n| **Go**              | `go test -v ./...`            | `testx`                 |\n| **JavaScript**      | `npx vitest run` / `npx jest` | `testx`                 |\n| **Java**            | `mvn test` / `gradle test`    | `testx`                 |\n| **Output**          | Different per language        | Unified, beautiful      |\n| **CI sharding**     | Manual config                 | `--partition slice:1/4` |\n| **Flaky detection** | Custom scripts                | `testx stress`          |\n\n---\n\n## Features\n\n- **Auto-detection** — Identifies language and test framework from project files\n- **11 languages** — Rust, Go, Python, JavaScript/TypeScript, Java, C/C++, Ruby, Elixir, PHP, .NET, Zig\n- **Multiple output formats** — Pretty (default), JSON, JUnit XML, TAP\n- **CI sharding** — Split tests across CI nodes with `--partition slice:1/4` or `hash:2/3`\n- **Stress testing** — Run tests N times to find flaky tests with `testx stress`\n- **Impact analysis** — Only run tests affected by recent git changes with `--affected`\n- **Smart caching** — Skip re-running tests when nothing changed with `--cache`\n- **Interactive picker** — Fuzzy-search and pick specific tests with `testx pick`\n- **Watch mode** — Re-run tests on file changes\n- **Retry logic** — Automatically retry failing tests\n- **Parallel execution** — Run multiple test suites concurrently\n- **Coverage integration** — LCOV, Cobertura, JaCoCo, Go coverage\n- **Plugin system** — Custom adapters, reporter plugins, shell hooks\n- **History tracking** — Track test health scores, flaky tests, and trends over time\n- **Monorepo support** — Scan and test all projects in a workspace with `testx workspace`\n\n## Supported Languages\n\n| Language                    | Frameworks                    | Package Managers      |\n| --------------------------- | ----------------------------- | --------------------- |\n| **Rust**                    | cargo test                    | —                     |\n| **Go**                      | go test                       | —                     |\n| **Python**                  | pytest, unittest, Django      | uv, poetry, pdm, venv |\n| **JavaScript / TypeScript** | Jest, Vitest, Mocha, AVA, Bun | npm, pnpm, yarn, bun  |\n| **Java / Kotlin**           | Maven Surefire, Gradle        | mvn, gradle           |\n| **C / C++**                 | Google Test, CTest, Meson     | cmake, meson          |\n| **Ruby**                    | RSpec, Minitest               | bundler               |\n| **Elixir**                  | ExUnit                        | mix                   |\n| **PHP**                     | PHPUnit                       | composer              |\n| **C# / .NET / F#**          | dotnet test                   | dotnet                |\n| **Zig**                     | zig build test                | —                     |\n\n## Installation\n\n### From crates.io\n\n```bash\ncargo install testx-cli\n```\n\n### From source\n\n```bash\ncargo install --path .\n```\n\n### From releases\n\nDownload a prebuilt binary from the [releases page](https://github.com/whoisdinanath/testx/releases).\n\n### Shell completions\n\n```bash\n# Bash\ntestx completions bash \u003e ~/.local/share/bash-completion/completions/testx\n\n# Zsh\ntestx completions zsh \u003e ~/.local/share/zsh/site-functions/_testx\n\n# Fish\ntestx completions fish \u003e ~/.config/fish/completions/testx.fish\n\n# PowerShell\ntestx completions powershell \u003e\u003e $PROFILE\n```\n\n## Quick Start\n\n```bash\n# Run tests in the current directory\ntestx\n\n# Run tests in a specific project\ntestx -p /path/to/project\n\n# Detect framework without running tests\ntestx detect\n\n# Pass extra arguments to the underlying runner\ntestx -- --filter my_test\n```\n\n## Usage\n\n### Output formats\n\n```bash\ntestx                    # Pretty terminal output (default)\ntestx -o json            # Machine-readable JSON\ntestx -o junit \u003e report.xml  # JUnit XML for CI\ntestx -o tap             # Test Anything Protocol\n```\n\n### CI sharding\n\nSplit tests across parallel CI jobs:\n\n```bash\n# Slice-based (deterministic, ordered)\ntestx --partition slice:1/4   # Job 1 of 4\ntestx --partition slice:2/4   # Job 2 of 4\n\n# Hash-based (stable across test additions)\ntestx --partition hash:1/3\n```\n\n**GitHub Actions example:**\n\n```yaml\njobs:\n  test:\n    strategy:\n      matrix:\n        shard: [1, 2, 3, 4]\n    steps:\n      - run: testx --partition slice:${{ matrix.shard }}/4\n```\n\n### Flaky test detection\n\n```bash\n# Run tests 10 times (default)\ntestx stress\n\n# Run 50 iterations, stop on first failure\ntestx stress -n 50 --fail-fast\n\n# Cap total time at 60 seconds\ntestx stress --max-duration 60\n```\n\nOutput:\n\n```\nStress Test Report: 10/10 iterations in 5.23s\n\n  Flaky Tests Detected:\n    test_network_call (7/10 passed, 70.0% pass rate, avg 12ms)\n```\n\n### Impact analysis\n\nOnly run tests when relevant source files changed:\n\n```bash\n# Skip tests if only docs changed\ntestx --affected\n\n# Analyze what changed without running\ntestx impact\n\n# Compare against a branch\ntestx impact --mode branch:main\n```\n\n### Smart caching\n\n```bash\n# Skip re-running if source files haven't changed\ntestx --cache\n\n# Clear the cache\ntestx cache-clear\n```\n\n### Monorepo / workspace\n\nScan a monorepo and run tests across all detected projects:\n\n```bash\n# Discover and test all projects\ntestx workspace\n\n# List projects without running\ntestx workspace --list\n\n# Only test Rust and Python projects\ntestx workspace --filter rust,python\n\n# Include directories normally skipped (e.g., packages/)\ntestx workspace --include packages\n\n# Run sequentially instead of in parallel\ntestx workspace --sequential\n```\n\n### Test history \u0026 analytics\n\nTrack test health over time:\n\n```bash\n# Quick overview\ntestx history\n\n# Flaky test report\ntestx history flaky\n\n# Slowest tests trend\ntestx history slow\n\n# Health score dashboard (A–F grading)\ntestx history health\n\n# Last 50 runs\ntestx history runs --last 50\n```\n\n### Interactive test picker\n\n```bash\ntestx pick\n```\n\nFuzzy-search through all discovered tests, select one or more, and run only those.\n\n### Other options\n\n```bash\ntestx --slowest 5        # Show 5 slowest tests\ntestx --timeout 60       # Kill tests after 60 seconds\ntestx --raw              # Show raw runner output\ntestx -v                 # Verbose (show detected command)\ntestx -w                 # Watch mode — re-run on file changes\ntestx --retries 3        # Retry failed tests 3 times\ntestx --reporter github  # Activate GitHub Actions reporter\n```\n\n## Configuration\n\nCreate a `testx.toml` in your project root (or run `testx init`):\n\n```toml\n# Override detected adapter\n# adapter = \"python\"\n\n# Extra arguments for the test runner\nargs = [\"-v\", \"--no-header\"]\n\n# Timeout in seconds (0 = no timeout)\ntimeout = 60\n\n# Environment variables\n[env]\nCI = \"true\"\n```\n\nCLI flags always override config file values.\n\n## Plugin System\n\n### Custom adapters\n\nDefine custom test commands in `testx.toml`:\n\n```toml\n[[adapters]]\nname = \"my-framework\"\ndetect = [\"my-config.json\"]\ncommand = \"my-test-runner\"\nargs = [\"--reporter\", \"json\"]\noutput_format = \"json\"\n```\n\n### Reporter plugins\n\nBuilt-in reporters:\n\n- **Markdown** — Generate markdown test reports\n- **GitHub Actions** — Annotations with `::error::` / `::warning::`\n- **HTML** — Standalone HTML report\n- **Desktop notifications** — System notification on completion\n\n## Building from Source\n\n```bash\ngit clone https://github.com/whoisdinanath/testx.git\ncd testx\ncargo build --release\n```\n\n### Running the test suite\n\n```bash\ncargo test            # Run all tests (1134 tests)\ncargo clippy          # Lint (0 warnings)\ncargo fmt --check     # Format check\n```\n\n## Stats\n\n| Metric                | Value                                                |\n| --------------------- | ---------------------------------------------------- |\n| Languages supported   | 11                                                   |\n| Test frameworks       | 20+                                                  |\n| Source lines          | ~34,700                                              |\n| Test count            | 1,134 (1,080 unit + 33 CLI + 21 integration)         |\n| Binary size (release) | 3.8 MB                                               |\n| Framework detection   | ~5ms                                                 |\n| Rust source files     | 55                                                   |\n| Dependencies          | minimal (clap, serde, colored, toml, anyhow, notify) |\n| Clippy warnings       | 0                                                    |\n\n## Documentation\n\nFull documentation is available at **[testx-cli.readthedocs.io](https://testx-cli.readthedocs.io/)**.\n\n- [Getting Started](https://testx-cli.readthedocs.io/getting-started/installation/)\n- [Configuration Guide](https://testx-cli.readthedocs.io/guide/configuration/)\n- [Output Formats](https://testx-cli.readthedocs.io/guide/output-formats/)\n- [CI Sharding](https://testx-cli.readthedocs.io/guide/sharding/)\n- [Plugin System](https://testx-cli.readthedocs.io/guide/plugins/)\n- [CLI Reference](https://testx-cli.readthedocs.io/cli/)\n\n## Contributing\n\nWe welcome contributions! Please read these before getting started:\n\n- **[Contributing Guide](CONTRIBUTING.md)** — Setup, workflow, and PR process\n- **[Coding Guidelines](.github/CODING_GUIDELINES.md)** — Architecture, code style, and module design\n- **[Bug Report Template](https://github.com/whoisdinanath/testx/issues/new?template=bug_report.md)** — Report a bug\n- **[Feature Request Template](https://github.com/whoisdinanath/testx/issues/new?template=feature_request.md)** — Suggest a feature\n\nPull requests are reviewed against the [PR template](.github/PULL_REQUEST_TEMPLATE.md) checklist.\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwhoisdinanath%2Ftestx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwhoisdinanath%2Ftestx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwhoisdinanath%2Ftestx/lists"}