Skip to main content

testless

AI Cost Tracking

AI Cost AI Model

This project uses AI-generated code. Total cost: $1.5000 with 10 AI commits.

Generated on 2026-06-29 using openrouter/qwen/qwen3-coder-next


testless is a Python package that sits as an analytical layer on top of your existing test suite. It analyses test value, coverage overlap, duplication, and missing gaps, then generates LLM-ready planfile tickets that describe exactly what to remove, refactor, or add.


Features

Command What it does
testless scan Run pytest with --cov-context=test and collect metadata
testless duplicates Detect duplicate tests (coverage + AST + fixture overlap)
testless missing Suggest smoke, e2e, contract, and TestQL tests
testless planfiles Generate YAML planfile tickets for an LLM
testless doctor Answer questions: "what to remove?", "what to add?"

Quick Start

pip install testless
# or with uv:
uv add --dev testless

# 1. Scan your project
testless scan

# 2. Find duplicate tests (threshold: 85 % similarity)
testless duplicates --min-overlap 0.85

# 3. Find missing smoke / service / e2e tests
testless missing --services src/myapp

# 4. Generate LLM planfiles
testless planfiles --out .planfiles/ --with-prompts

# 5. Ask doctor questions
testless doctor "which tests should I remove?"

Configuration

Create a .testless.yml in your project root:

packages:
  - myapp

test_dirs:
  - tests

min_duplicate_score: 0.85
planfiles_dir: .planfiles
coverage_dir: .coverage_data

pytest_args:
  - --tb=short

Planfile format

Each generated ticket is a self-contained YAML file that an LLM can act on:

version: "1"
kind: duplicate
id: "DUP-3A7F2C"
title: "Remove duplicate test: test_health_ok vs test_health_status_200"
goal: "Reduce test suite redundancy without losing unique coverage"
context:
  test_a: tests/api/test_health.py::test_health_ok
  test_b: tests/api/test_health.py::test_health_status_200
evidence:
  - description: "score=0.93, coverage_overlap=0.95"
    score: 0.93
impact:
  risk: low
  expected_gains:
    - shorter test run time
    - reduced maintenance burden
tasks:
  - description: Compare test_health_ok and test_health_status_200 manually
  - description: Remove the weaker/less descriptive test
  - description: Run suite and verify no coverage regression
acceptance_criteria:
  - No decrease in unique line coverage
  - All remaining tests pass
llm_hints:
  style: minimal change
  safe_refactor: true

Architecture

src/testless/
├── cli.py                  # Click CLI
├── config.py               # .testless.yml loader
├── models/
│   ├── planfile.py         # Pydantic Planfile model
│   ├── findings.py         # Finding models
│   └── coverage_map.py     # CoverageMap model
├── collect/
│   ├── pytest_runner.py    # Run pytest, collect metadata
│   ├── coverage_loader.py  # Parse coverage.json contexts
│   ├── fixture_index.py    # AST-based fixture indexer
│   └── endpoint_inventory.py  # HTTP endpoint/service scanner
├── analyze/
│   ├── duplicate_tests.py  # Duplicate detection
│   ├── dead_tests.py       # Dead test detection
│   ├── missing_tests.py    # Missing test suggestions
│   ├── service_risk.py     # Service risk scoring
│   └── refactor_candidates.py  # Refactor detection
├── suggest/
│   ├── smoke.py            # Smoke test templates
│   ├── e2e.py              # E2E test templates
│   ├── service_tests.py    # Service contract templates
│   └── testql.py           # TestQL stub generator
├── tickets/
│   ├── builder.py          # Build Planfile from findings
│   ├── serializer.py       # Write planfiles to disk
│   └── prompts.py          # Attach LLM prompts
└── reporters/
    ├── console.py          # Coloured terminal output
    ├── markdown.py         # Markdown report
    └── json.py             # JSON report

License

Licensed under Apache-2.0.

Metadata

Release files for testless 0.1.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for testless 0.1.8
File Size Uploaded
testless-0.1.8.tar.gz 31.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for testless 0.1.8
File Interpreter ABI Platform
testless-0.1.8-py3-none-any.whl Python 3 none any Details

Total release size: 64.1 kB

Release files / testless-0.1.8.tar.gz

Download URL testless-0.1.8.tar.gz
Size 31.0 kB
Tags Source
SHA-256 checksum
How to use checksums
5f6fcaabd0520bf3c2dc38c7a086d119373a4a679577341f25d348817555ef49
BLAKE2b-256 checksum
How to use checksums
09f7d2fab11a5719cc7f71c353e36b3cfbe3c6b28ec5d6f0206295f9b06e8e30
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.7

Release files / testless-0.1.8-py3-none-any.whl

Download URL testless-0.1.8-py3-none-any.whl
Size 33.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cc5b894164cb42d3a41f559cc6a6f3a91db2aaf5d752d686e64cfa62a7c1a996
BLAKE2b-256 checksum
How to use checksums
9ca30a77a0dfcccd0ded0efef23e77520545f3fbcc9ef594a524aae15803b0ae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.7

Release history Release notifications | RSS feed

This release

0.1.8 This release

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page