Skip to content

tfs-test-runner

Convert Azure DevOps / TFS test case xlsx exports into a self-contained HTML test execution kit with screenshot capture, status tracking, observation notes, and PDF evidence export. No server, works offline, zero config. Optional GPT translation to any language.

Tests License: MIT Python 3.10+ Release

What it does

graph LR
    A[xlsx export<br/>from ADO/TFS] --> B[parse]
    B --> C[translate<br/>passthrough or LLM]
    C --> D[group by phases<br/>YAML or default]
    D --> E[render]
    E --> F[plano.html<br/>single-file]
    F --> G[Tester:<br/>paste screenshots,<br/>mark PASS/FAIL,<br/>add notes]
    G --> H[PDF per case<br/>or full plan]

Each stage is a pure function over plain dicts. Intermediate JSON dumpable via --dump-json.

Why

If your team uses Azure DevOps Test Plans or TFS (e.g. *.tfs.<company>.net), you can already export test cases to xlsx. But running them by hand and assembling evidence — screenshots per step, status, notes, packaged as a deliverable PDF — is tedious and error-prone.

tfs-test-runner takes that xlsx and produces a single HTML file you open in any browser. Testers paste screenshots step-by-step (Ctrl+V), mark PASS / FAIL / N/A, write notes, then click one button to print a clean evidence PDF.

State persists in localStorage (text/status) and IndexedDB (images). Backup/restore as JSON. Zero server, zero auth.

Get started

  • Quickstart


    Install in 30 seconds, generate your first HTML kit from the synthetic sample.

    Quickstart

  • Usage


    End-to-end walkthrough for testers running real plans.

    Usage guide

  • Configuration


    YAML phase grouping, glossaries, custom logo, LLM models.

    Configuration

  • Architecture


    Pipeline, data shapes, design choices, and trade-offs.

    Architecture

Screenshots

Overview with progress + filters Single case w/ evidence + status
Hero Case
More screenshots
Filter "Failures" PDF evidence (default)
Filter PDF
PDF with status pills (toggle ON) Mobile / narrow viewport
PDF status Narrow
Empty state Full plan (long screenshot)
Empty 03-full-plan.png

Don't have an xlsx yet?

Two options:

  1. Use the bundled synthetic samplepython examples/generate_sample.py creates a fake plan to play with.
  2. Use the blank template — download blank-template.xlsx and fill it manually. Same schema as Azure DevOps export.

Download blank template View on GitHub