pytest-pvcr
A pytest plugin that records and replays commands executed with subprocess.run(), inspired by VCR.py.
Installation
pip install pytest-pvcr
Usage
Mark your tests with @pytest.mark.pvcr() and run them:
import subprocess
import pytest
@pytest.mark.pvcr()
def test_ls():
ret = subprocess.run(["ls", "/tmp"])
assert ret.returncode == 0
@pytest.mark.pvcr(wait=False)
def test_slow_command():
# On replay, pvcr won't sleep for the original command duration
ret = subprocess.run(["sleep", "10"])
assert ret.returncode == 0
pytest --pvcr-record-mode=new test_commands.py
Recordings are stored as YAML files in recordings/<module>/<test_name>.yaml.
Record modes
# Only record new commands not previously recorded (default)
pytest --pvcr-record-mode=new
# Replay only, never record
pytest --pvcr-record-mode=none
# Re-record all commands, even previously recorded ones
pytest --pvcr-record-mode=all
# Record on first run, then replay only and block unrecorded commands
pytest --pvcr-record-mode=once
The once mode is useful in CI: it records everything on the first run (when no recording file exists), then on subsequent runs it replays and raises PVCRBlockedRunException if an unrecorded command is encountered.
Block execution
Block all unrecorded subprocess calls, useful to protect test environments:
pytest --pvcr-block-run
Fuzzy matching
Fuzzy matching replaces variable parts of commands so recordings stay portable.
Via CLI (global, applies to all tests):
# Ignore `--dry-run` arguments when matching commands
pytest --pvcr-fuzzy-matcher='--dry-run'
# Keep only the filename from a path
pytest --pvcr-fuzzy-matcher='^.+\/(kubeconfig)$'
# Automatically ignore the parent directory of the test file
pytest --pvcr-auto-fuzzy-match
Via marker (per-test):
@pytest.mark.pvcr()
@pytest.mark.pvcr_fuzzy_matcher(r"^.+\/(config\.yml)$")
def test_with_fuzzy():
subprocess.run(["cat", "/some/path/config.yml"])
If a regex has no capture groups, the matched string is replaced with a placeholder. If a regex has capture groups, the captured parts are kept and the rest is replaced.
Python support
Python >= 3.12
Authors
- Fabien Dupont fab+github@kafe-in.net
Metadata
Release files for pytest-pvcr 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| pytest_pvcr-0.2.0.tar.gz | 9.7 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pytest_pvcr-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 21.3 kB
Release files / pytest_pvcr-0.2.0.tar.gz
| Download URL | pytest_pvcr-0.2.0.tar.gz |
|---|---|
| Size | 9.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
762ba702de443345d307f2049171e2e2868d6e1721883454bbcb6053cc000e37
|
|
BLAKE2b-256 checksum How to use checksums |
cf070c028dc1a534b15d7da8b56c399418a36709a2a3149c248b9e04371414f8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Jul 30, 2026.
Transparency logRelease files / pytest_pvcr-0.2.0-py3-none-any.whl
| Download URL | pytest_pvcr-0.2.0-py3-none-any.whl |
|---|---|
| Size | 11.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
236ba04fc3c4ae77f20a02ecc6cc29f464c5c61c9f9f2ebf2ddf0485c304c17d
|
|
BLAKE2b-256 checksum How to use checksums |
af3a3b9e4e68fb0d70e6774e05314b698f83e8bec47046f0acfd0206c9430387
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Jul 30, 2026.
Transparency logSecurity for pytest-pvcr 0.2.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.
Attestation for pytest_pvcr-0.2.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 Jul 30, 2026.
Transparency logA 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.