Skip to main content

pytest-web

PyPI version Python versions CI License: MIT

A lightweight local web UI for discovering, selecting, and running pytest suites — with real-time pass/fail status, filtering, env-var injection, and on-demand Allure reports.

Install

pip install pytest-web

Must be installed in the same Python environment as your project's pytest.

Quick start

cd your-project
pytest-web

Opens http://127.0.0.1:8000 in your browser automatically.

CLI flags

Flag Default Description
--port 8000 Port to listen on
--host 127.0.0.1 Bind host
--cwd current dir Project root (where pytest.ini lives)
--no-browser — Skip auto-opening the browser

Features

Fetch & select tests

Click Fetch Tests (or press Enter in the path/args box) to collect all tests via pytest --collect-only. Tests are grouped by file. You can:

  • Check/uncheck individual tests or entire files
  • Use Select All to toggle only what's currently visible
  • Type in the filter box to search by test name
  • Click any counter (passed / failed / skipped) to filter to that status — click again to clear

Parameterized tests

Every @pytest.mark.parametrize variant is auto-expanded as a separate, individually selectable row (e.g. test_addition[1-2-3], test_addition[10-20-30], …) — no setup needed, since pytest-web uses pytest's own collection. You can run a single combination, a few, or all of them.

Run controls

  • Workers — number of parallel workers (-n). Overrides any -n in pytest.ini addopts.
  • ▶ Run Selected — runs only checked tests that are currently visible
  • ■ Cancel — terminates the pytest process and all xdist workers cleanly

Param builder

Use the dropdown to add common pytest flags (-k, -m, --tb, -x, --maxfail, etc.) to the args bar without typing. Project-specific options from your conftest.py or installed plugins (e.g. --browser, --headed) are auto-detected and added to the dropdown.

Env vars

Inject environment variables for the test run. Type NAME=value in the Name field and it auto-splits on blur. Variables are saved to localStorage and restored on reload.

Live status

While tests run, each row shows a pulsing dot (running) that turns green/red/yellow on completion. The counters update in real time and accumulate across runs — so if you run a subset, the results from tests not in that run are preserved in the counters.

Output log

Pytest's stdout/stderr streams in a collapsible panel at the bottom. Opens automatically if stderr has output (e.g. failures). Shows all xdist worker output.

Command preview

The $ pytest ... command preview updates as you change selections, args, or workers. Click ⎘ to copy it.


Allure report (on demand)

If you use Allure for test reporting, pytest-web can generate and serve the Allure report with history tracking built in.

Requirements

Install the Allure CLI globally (separate from the Python package): https://allurereport.org/docs/v3/install/

Setup

Your project should have --alluredir in pytest.ini (or pyproject.toml):

# pytest.ini
[pytest]
addopts = --alluredir=test/allure-results --clean-alluredir

pytest-web auto-detects this path. You can also enter or override it manually in the Allure bar at the bottom of the page.

Usage

  1. Run your tests (they populate the results directory)
  2. Click Open Report in the Allure bar
  3. The report is generated and served — your browser opens automatically
  4. The URL is shown as a link in case the browser doesn't open

Click Stop to shut down the Allure server.

Every time you click Open Report, pytest-web copies the history from the previous report back into the results directory before regenerating. This means Allure's trend graphs and history tabs work automatically — no manual setup required.

The report is written to allure-report/ next to your results directory (e.g. if results are in test/allure-results, the report is at test/allure-report).

Note: The Allure server is completely independent of the test runner. You can run tests while the Allure server is up, and vice versa.


How it works

  1. Discover — pytest --collect-only -p pytest_web.plugin writes collected node IDs to a temp file and returns them to the UI.
  2. Run — pytest <selected-ids> -n <workers> -p pytest_web.plugin is launched as a subprocess. The plugin fires HTTP webhooks back to the FastAPI server at each test start/end.
  3. Stream — the server broadcasts those events over WebSocket to all connected browser tabs. The UI updates each row's status dot and counters in real time.
  4. Allure — allure generate builds the HTML report (with history), then allure open serves it on a separate port.

Your pytest.ini, conftest.py, fixtures, and plugins are all used normally — pytest-web just wraps the command.

Compatibility

  • Python 3.9 – 3.13
  • pytest 7+
  • pytest-xdist 3+ (installed automatically as a dependency)
  • Works with any pytest plugin (playwright, django, anyio, etc.)

Metadata

Release files for pytest-web 1.0.0

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

Source distribution (sdist)

Source distribution for pytest-web 1.0.0
File Size Uploaded Provenance Actions
pytest_web-1.0.0.tar.gz 300.7 kB With provenance Details for pytest_web-1.0.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for pytest-web 1.0.0
File Interpreter ABI Platform Actions
pytest_web-1.0.0-py3-none-any.whl Python 3 none any Details for pytest_web-1.0.0-py3-none-any.whl

Total release size: 343.5 kB

Release files / pytest_web-1.0.0.tar.gz

Download URL pytest_web-1.0.0.tar.gz
Size 300.7 kB
Tags Source
SHA-256 checksum
How to use checksums
cb4e29a45d26090ab9af1f1542fb670c1f46768c92bc486a4299e812280827dc
BLAKE2b-256 checksum
How to use checksums
a57ec850a96b54beda79fec7469f58254a9723c671815e0253779de189ce318b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 10, 2026.

Transparency log

Release files / pytest_web-1.0.0-py3-none-any.whl

Download URL pytest_web-1.0.0-py3-none-any.whl
Size 42.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ce32a70d778f50b98eed78beedd24e1aecb8e171540aec0d2f29a4322075efaf
BLAKE2b-256 checksum
How to use checksums
920f57431cf83757f5ca59a0bc0d1c303ae2c5eaa5f7bc903d731f6e299003c5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 10, 2026.

Transparency log

Security for pytest-web 1.0.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for pytest_web-1.0.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 10, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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