pytest-snapcheck


Namepytest-snapcheck JSON
Version 0.1.5 PyPI version JSON
download
home_pageNone
SummaryMinimal deterministic test-run snapshot capture for pytest.
upload_time2025-09-07 00:26:16
maintainerNone
docs_urlNone
authorCyril Rikh
requires_python>=3.9
licenseNone
keywords pytest testing snapshot regression
VCS
bugtrack_url
requirements pytest
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # pytest-snap

Minimal deterministic snapshot capture of a pytest run: per-test outcome +
duration (ns) stored in a JSON file. Intended as a small foundation for
optional future diff / perf / gating features.

Current scope:
* Pytest plugin auto‑loaded (entry point `snap`).
* `--snap` flag enables capture.
* `--snap-out PATH` chooses output file (default `.snap/current.json`).
* CLI wrapper for repeated labeled runs (`pytest-snap run`, `pytest-snap all`).

PyPi: https://pypi.org/project/pytest-snapcheck/#description

## Installation

```bash
pip install pytest-snapcheck
```
---

## Quick Start

Install:

```bash
pip install pytest-snapcheck
```

Run tests with snapshot capture:

```bash
pytest --snap
```

Result written to `.snap/current.json` (create the directory if needed). Change
destination:

```bash
pytest --snap --snap-out my_run.json
```

Use the helper CLI for labeled runs (writes `.artifacts/snap_<label>.json`):

```bash
pytest-snap run v1
pytest-snap run v2
# or
pytest-snapcheck run v1
```

Generate several labels in sequence:

```bash
pytest-snap all               # default labels v1 v2 v3
```

### Using a custom tests folder

By default, the CLI runs your repo's `./tests` directory if it exists. To target a different folder, file, or a single test (node id), pass `--tests`:

```bash
# A specific directory
pytest-snap run v1 --tests ./path/to/tests

# A subfolder of your test tree
pytest-snap run v1 --tests tests/integration

# A single file or a single test node
pytest-snap run v1 --tests tests/test_api.py
pytest-snap run v1 --tests tests/test_api.py::test_happy_path

# Add regular pytest filters (forwarded as-is)
pytest-snap run v1 --tests tests/integration -k "smoke" -m "not flaky"
```

Prefer using plain pytest? The plugin doesn't change discovery; just supply paths as usual and add the flags:

```bash
pytest --snap --snap-out .artifacts/snap.json ./path/to/tests
# If plugin autoload is disabled:
pytest -p pytest_snap.plugin --snap --snap-out .artifacts/snap.json ./path/to/tests
```

### Artifacts and outputs

Where results are written by default and how to change it:

- Pure pytest (plugin)
	- Default file: `.snap/current.json`
	- Override with `--snap-out PATH`.
	- Example:
		```bash
		pytest --snap --snap-out .artifacts/snap_v1.json tests/
		```

- CLI (pytest-snap)
	- Default directory: `.artifacts`
	- Files created per run:
		- `.artifacts/snap_<label>.json` (always)
		- `.artifacts/run_<label>.html` (only with `--html` and pytest-html installed)
	- Change directory with `--artifacts DIR`.
	- Examples:
		```bash
		# Default outputs
		pytest-snap run v1

		# Custom output directory
		pytest-snap run v1 --artifacts out/snapshots

		# Diff reads from the same directory
		pytest-snap diff v1 v2 --artifacts out/snapshots
		```

- Housekeeping helpers
	```bash
	pytest-snap list                # list available snapshots
	pytest-snap show v1            # show summary for a snapshot
	pytest-snap clean              # remove the artifacts directory
	# (all accept --artifacts DIR)
	```

---

## Snapshot Schema (v0.1.0)

```json
{
	"started_ns": 1234567890,
	"finished_ns": 1234569999,
	"env": {"pytest_version": "8.x"},
	"results": [
		{"nodeid": "tests/test_example.py::test_ok", "outcome": "passed", "dur_ns": 10423}
	]
}
```

## Future Roadmap (High Level)
Planned incremental additions (subject to change):
1. Baseline diff & change bucket summarization.
2. Slower test detection & perf thresholds.
3. Budget YAML support and gating.
4. Historical flake scoring.
5. Rich diff / timeline CLI views.

Early adopters should pin minor versions if depending on emerging fields.

### Code-level Diff (`--code`)

In addition to outcome & timing changes you can compare the test function source between two labeled versions.

Typical layout:
```
project/
	v1/tests/...
	v2/tests/...
```

Run a snapshot diff including code changes:
```bash
pytest-snap diff v1 v2 --code
```

What happens:
* Auto-detects version directories `<A>` and `<B>` under the current working directory (or under `--versions-base` if provided).
* Lists added / removed / modified test functions (`def test_*`).
* Shows a unified diff (syntax-colored) for modified tests with simple performance hints (range() growth, added sleep time).

Options:
* `--code`        Combine snapshot diff + code diff.
* `--code-only`   Suppress snapshot outcome section; only show code diff.
* `--versions-base DIR`   Look for version subdirectories under `DIR` instead of `.`.

Examples:
```bash
# Just code changes (no outcome buckets)
pytest-snap diff v1 v2 --code-only --code

# Custom versions base path
pytest-snap diff release_old release_new --code --versions-base ./releases

# Code + performance analysis together
pytest-snap diff v1 v2 --code --perf
```

Limitations:
* Only inspects top-level `test_*.py` files; helper modules not diffed.
* Function-level granularity (class-based tests appear as functions with node ids).
* Large diffs are truncated after 20 modified tests (increase by editing source if needed).

---

### Performance Diff (`--perf`) in the CLI

The CLI snapshot diff (`pytest-snap diff A B`) ignores timing changes unless you opt in:

```bash
pytest-snap diff v1 v2 --perf
```

This adds a "Slower Tests" section listing tests whose elapsed time increased beyond BOTH thresholds:

* ratio: new_duration / old_duration >= `--perf-ratio` (default 1.30 ⇒ at least 30% slower)
* absolute: new_duration - old_duration >= `--perf-abs` (default 0.05s)

Optional flags:

| Flag | Meaning |
|------|---------|
| `--perf-ratio 1.5` | Require 50%+ slow-down (instead of 30%) |
| `--perf-abs 0.02` | Require at least 20ms added latency |
| `--perf-show-faster` | Also list significantly faster tests |

To see only timings + code changes (skip outcome buckets):
```bash
pytest-snap diff v1 v2 --perf --code --code-only
```

### Performance Gating During Test Runs

Inside pytest runs (plugin), slower tests are tracked when you supply a baseline and choose a fail mode:

```bash
pytest --snap-baseline .artifacts/snap_base.json \
	--snap-fail-on slower \
	--snap-slower-threshold-ratio 1.25 \
	--snap-slower-threshold-abs 0.10
```

Behavior:

* A test is considered slower if it exceeds both the ratio and absolute thresholds.
* `--snap-fail-on slower` turns any slower test into a non‑zero exit (CI gating).
* Adjust thresholds to tune sensitivity (raise ratio or abs to reduce noise).

Shortcut mental model: ratio filters relative regressions; absolute filters micro‑noise. Both must pass so a 2ms blip on a 1µs test won't alert even if ratio is large.

If you only care about functional changes, omit perf flags; if you want early perf regression visibility, add them.

---

### Timeline / Historical Progression (`timeline` subcommand)

Use the timeline view to see how snapshots evolved over time and when failures first appeared.

Create snapshots (labels arbitrary):
```bash
pytest-snap run v1
pytest-snap run v2
pytest-snap run v3
```

Show chronological summary:
```bash
pytest-snap timeline
```
Sample output:
```
TIMELINE (3 snapshots)
2025-09-04T19:20:21Z v1 commit=8e05100 total=28 fail=0 new_fail=0 fixes=0 regressions=0
2025-09-04T19:25:07Z v2 commit=8e05100 total=28 fail=1 new_fail=1 fixes=0 regressions=1
2025-09-04T19:30:44Z v3 commit=8e05100 total=28 fail=1 new_fail=0 fixes=1 regressions=0
```

Flags:
| Flag | Purpose |
|------|---------|
| `--since <commit>` | Start listing from first snapshot whose `git_commit` matches (short hash) |
| `--limit N` | Show only the last N snapshots after filtering |
| `--json` | Emit machine-readable JSON array |
| `--artifacts DIR` | Use alternate artifacts directory |

Computed per row (vs previous snapshot):
* `new_fail`: tests that newly failed.
* `fixes`: previously failing tests that now pass.
* `regressions`: passed → failed transitions.

Metadata:
* Each snapshot is enriched (best effort) with `git_commit` (short HEAD hash) after write.
* If git metadata isn’t available (outside a repo), the commit shows as `unknown` or `None`.

JSON example:
```bash
pytest-snap timeline --json | jq .
```
Produces entries like:
```json
[
	{"label":"v1","git_commit":"8e05100","total":28,"failed":0,"passed":28,"xfailed":0,"xpassed":0,"new_fail":0,"fixes":0,"regressions":0},
	{"label":"v2","git_commit":"8e05100","total":28,"failed":1,"passed":27,"xfailed":0,"xpassed":0,"new_fail":1,"fixes":0,"regressions":1}
]
```

Use cases:
* Quickly pinpoint when a regression first appeared before diving into full diff.
* Send the timeline JSON straight to a small dashboard (Prometheus push, simple web chart) without re-reading all snapshot files.
* In Continuous Integration (CI) pipelines, fail the run (block the merge) if the timeline shows new failures or regressions. CI = automated test/build system that runs on every change.

### Labels vs paths (what does `v1` mean?)

- `pytest-snap run <label>`
	- The label only names the output file: `.artifacts/snap_<label>.json`.
	- It does not select a folder named `<label>`; discovery defaults to `./tests` unless you pass `--tests`.
	- Examples:
		```bash
		pytest-snap run v1                      # runs ./tests, writes .artifacts/snap_v1.json
		pytest-snap run mylabel --tests tests/api
		pytest-snap run pr-123  --tests tests/test_api.py::test_happy_path
		```

- `pytest-snap diff <A> <B>`
	- Labels refer to snapshot files in the artifacts directory (default `.artifacts`).
	- When you add `--code` (or `--code-only`), directories named `<A>` and `<B>` are looked up under `--versions-base` (default `.`).
	- You can control the base with `--versions-base PATH`.

---

## Flaky Detection

When history logging is enabled (default in `pytest-snap run`), previous outcomes are tracked. A weighted score measures pass ↔ fail flips. Highly flaky tests can be excluded from "new failures" to reduce noise.

---

## Conceptual Model
1. Enable capture (flag / CLI) → write snapshot.
2. (Future) Compare snapshots → categorize changes.
3. (Future) Apply gating policies.
4. Refresh baseline as intent changes.

---

## FAQ
**Do I need the CLI?** No; it's convenience sugar for labeled runs.

**Why not a baseline diff yet?** Keeping 0.1.0 deliberately small; diffing lands next.

**Will the schema change?** Potentially (still pre-1.0.0) but additions will prefer backward compatibility.

---

## Glossary
| Term | Definition |
|------|------------|
| Snapshot | JSON record of one full test run |
| Nodeid | Pytest's canonical test identifier |
| Duration | Test call-phase elapsed time (ns stored) |

---

## Contributing

1. Fork / clone.  
2. (Optional) Create venv & install: `pip install -e .[dev]`.  
3. Add or adjust tests for your changes.  
4. Keep documentation clear and concise.  
5. Open a PR.

---

## License

MIT (see `LICENSE`).

## Compatibility
Runs on
* Operating systems: macOS, Linux, and Windows (pure Python, no native extensions).
* Python versions: 3.9+ (tox/CI test 3.9–3.12; builds also succeed on 3.13).
* Requirements: pytest>=8.0.


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "pytest-snapcheck",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "pytest, testing, snapshot, regression",
    "author": "Cyril Rikh",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/ce/f6/b919f4eaf8317093465d62b8de62caa9a90ef7e7a6def778296aae94b0c6/pytest_snapcheck-0.1.5.tar.gz",
    "platform": null,
    "description": "# pytest-snap\n\nMinimal deterministic snapshot capture of a pytest run: per-test outcome +\nduration (ns) stored in a JSON file. Intended as a small foundation for\noptional future diff / perf / gating features.\n\nCurrent scope:\n* Pytest plugin auto\u2011loaded (entry point `snap`).\n* `--snap` flag enables capture.\n* `--snap-out PATH` chooses output file (default `.snap/current.json`).\n* CLI wrapper for repeated labeled runs (`pytest-snap run`, `pytest-snap all`).\n\nPyPi: https://pypi.org/project/pytest-snapcheck/#description\n\n## Installation\n\n```bash\npip install pytest-snapcheck\n```\n---\n\n## Quick Start\n\nInstall:\n\n```bash\npip install pytest-snapcheck\n```\n\nRun tests with snapshot capture:\n\n```bash\npytest --snap\n```\n\nResult written to `.snap/current.json` (create the directory if needed). Change\ndestination:\n\n```bash\npytest --snap --snap-out my_run.json\n```\n\nUse the helper CLI for labeled runs (writes `.artifacts/snap_<label>.json`):\n\n```bash\npytest-snap run v1\npytest-snap run v2\n# or\npytest-snapcheck run v1\n```\n\nGenerate several labels in sequence:\n\n```bash\npytest-snap all               # default labels v1 v2 v3\n```\n\n### Using a custom tests folder\n\nBy default, the CLI runs your repo's `./tests` directory if it exists. To target a different folder, file, or a single test (node id), pass `--tests`:\n\n```bash\n# A specific directory\npytest-snap run v1 --tests ./path/to/tests\n\n# A subfolder of your test tree\npytest-snap run v1 --tests tests/integration\n\n# A single file or a single test node\npytest-snap run v1 --tests tests/test_api.py\npytest-snap run v1 --tests tests/test_api.py::test_happy_path\n\n# Add regular pytest filters (forwarded as-is)\npytest-snap run v1 --tests tests/integration -k \"smoke\" -m \"not flaky\"\n```\n\nPrefer using plain pytest? The plugin doesn't change discovery; just supply paths as usual and add the flags:\n\n```bash\npytest --snap --snap-out .artifacts/snap.json ./path/to/tests\n# If plugin autoload is disabled:\npytest -p pytest_snap.plugin --snap --snap-out .artifacts/snap.json ./path/to/tests\n```\n\n### Artifacts and outputs\n\nWhere results are written by default and how to change it:\n\n- Pure pytest (plugin)\n\t- Default file: `.snap/current.json`\n\t- Override with `--snap-out PATH`.\n\t- Example:\n\t\t```bash\n\t\tpytest --snap --snap-out .artifacts/snap_v1.json tests/\n\t\t```\n\n- CLI (pytest-snap)\n\t- Default directory: `.artifacts`\n\t- Files created per run:\n\t\t- `.artifacts/snap_<label>.json` (always)\n\t\t- `.artifacts/run_<label>.html` (only with `--html` and pytest-html installed)\n\t- Change directory with `--artifacts DIR`.\n\t- Examples:\n\t\t```bash\n\t\t# Default outputs\n\t\tpytest-snap run v1\n\n\t\t# Custom output directory\n\t\tpytest-snap run v1 --artifacts out/snapshots\n\n\t\t# Diff reads from the same directory\n\t\tpytest-snap diff v1 v2 --artifacts out/snapshots\n\t\t```\n\n- Housekeeping helpers\n\t```bash\n\tpytest-snap list                # list available snapshots\n\tpytest-snap show v1            # show summary for a snapshot\n\tpytest-snap clean              # remove the artifacts directory\n\t# (all accept --artifacts DIR)\n\t```\n\n---\n\n## Snapshot Schema (v0.1.0)\n\n```json\n{\n\t\"started_ns\": 1234567890,\n\t\"finished_ns\": 1234569999,\n\t\"env\": {\"pytest_version\": \"8.x\"},\n\t\"results\": [\n\t\t{\"nodeid\": \"tests/test_example.py::test_ok\", \"outcome\": \"passed\", \"dur_ns\": 10423}\n\t]\n}\n```\n\n## Future Roadmap (High Level)\nPlanned incremental additions (subject to change):\n1. Baseline diff & change bucket summarization.\n2. Slower test detection & perf thresholds.\n3. Budget YAML support and gating.\n4. Historical flake scoring.\n5. Rich diff / timeline CLI views.\n\nEarly adopters should pin minor versions if depending on emerging fields.\n\n### Code-level Diff (`--code`)\n\nIn addition to outcome & timing changes you can compare the test function source between two labeled versions.\n\nTypical layout:\n```\nproject/\n\tv1/tests/...\n\tv2/tests/...\n```\n\nRun a snapshot diff including code changes:\n```bash\npytest-snap diff v1 v2 --code\n```\n\nWhat happens:\n* Auto-detects version directories `<A>` and `<B>` under the current working directory (or under `--versions-base` if provided).\n* Lists added / removed / modified test functions (`def test_*`).\n* Shows a unified diff (syntax-colored) for modified tests with simple performance hints (range() growth, added sleep time).\n\nOptions:\n* `--code`        Combine snapshot diff + code diff.\n* `--code-only`   Suppress snapshot outcome section; only show code diff.\n* `--versions-base DIR`   Look for version subdirectories under `DIR` instead of `.`.\n\nExamples:\n```bash\n# Just code changes (no outcome buckets)\npytest-snap diff v1 v2 --code-only --code\n\n# Custom versions base path\npytest-snap diff release_old release_new --code --versions-base ./releases\n\n# Code + performance analysis together\npytest-snap diff v1 v2 --code --perf\n```\n\nLimitations:\n* Only inspects top-level `test_*.py` files; helper modules not diffed.\n* Function-level granularity (class-based tests appear as functions with node ids).\n* Large diffs are truncated after 20 modified tests (increase by editing source if needed).\n\n---\n\n### Performance Diff (`--perf`) in the CLI\n\nThe CLI snapshot diff (`pytest-snap diff A B`) ignores timing changes unless you opt in:\n\n```bash\npytest-snap diff v1 v2 --perf\n```\n\nThis adds a \"Slower Tests\" section listing tests whose elapsed time increased beyond BOTH thresholds:\n\n* ratio: new_duration / old_duration >= `--perf-ratio` (default 1.30 \u21d2 at least 30% slower)\n* absolute: new_duration - old_duration >= `--perf-abs` (default 0.05s)\n\nOptional flags:\n\n| Flag | Meaning |\n|------|---------|\n| `--perf-ratio 1.5` | Require 50%+ slow-down (instead of 30%) |\n| `--perf-abs 0.02` | Require at least 20ms added latency |\n| `--perf-show-faster` | Also list significantly faster tests |\n\nTo see only timings + code changes (skip outcome buckets):\n```bash\npytest-snap diff v1 v2 --perf --code --code-only\n```\n\n### Performance Gating During Test Runs\n\nInside pytest runs (plugin), slower tests are tracked when you supply a baseline and choose a fail mode:\n\n```bash\npytest --snap-baseline .artifacts/snap_base.json \\\n\t--snap-fail-on slower \\\n\t--snap-slower-threshold-ratio 1.25 \\\n\t--snap-slower-threshold-abs 0.10\n```\n\nBehavior:\n\n* A test is considered slower if it exceeds both the ratio and absolute thresholds.\n* `--snap-fail-on slower` turns any slower test into a non\u2011zero exit (CI gating).\n* Adjust thresholds to tune sensitivity (raise ratio or abs to reduce noise).\n\nShortcut mental model: ratio filters relative regressions; absolute filters micro\u2011noise. Both must pass so a 2ms blip on a 1\u00b5s test won't alert even if ratio is large.\n\nIf you only care about functional changes, omit perf flags; if you want early perf regression visibility, add them.\n\n---\n\n### Timeline / Historical Progression (`timeline` subcommand)\n\nUse the timeline view to see how snapshots evolved over time and when failures first appeared.\n\nCreate snapshots (labels arbitrary):\n```bash\npytest-snap run v1\npytest-snap run v2\npytest-snap run v3\n```\n\nShow chronological summary:\n```bash\npytest-snap timeline\n```\nSample output:\n```\nTIMELINE (3 snapshots)\n2025-09-04T19:20:21Z v1 commit=8e05100 total=28 fail=0 new_fail=0 fixes=0 regressions=0\n2025-09-04T19:25:07Z v2 commit=8e05100 total=28 fail=1 new_fail=1 fixes=0 regressions=1\n2025-09-04T19:30:44Z v3 commit=8e05100 total=28 fail=1 new_fail=0 fixes=1 regressions=0\n```\n\nFlags:\n| Flag | Purpose |\n|------|---------|\n| `--since <commit>` | Start listing from first snapshot whose `git_commit` matches (short hash) |\n| `--limit N` | Show only the last N snapshots after filtering |\n| `--json` | Emit machine-readable JSON array |\n| `--artifacts DIR` | Use alternate artifacts directory |\n\nComputed per row (vs previous snapshot):\n* `new_fail`: tests that newly failed.\n* `fixes`: previously failing tests that now pass.\n* `regressions`: passed \u2192 failed transitions.\n\nMetadata:\n* Each snapshot is enriched (best effort) with `git_commit` (short HEAD hash) after write.\n* If git metadata isn\u2019t available (outside a repo), the commit shows as `unknown` or `None`.\n\nJSON example:\n```bash\npytest-snap timeline --json | jq .\n```\nProduces entries like:\n```json\n[\n\t{\"label\":\"v1\",\"git_commit\":\"8e05100\",\"total\":28,\"failed\":0,\"passed\":28,\"xfailed\":0,\"xpassed\":0,\"new_fail\":0,\"fixes\":0,\"regressions\":0},\n\t{\"label\":\"v2\",\"git_commit\":\"8e05100\",\"total\":28,\"failed\":1,\"passed\":27,\"xfailed\":0,\"xpassed\":0,\"new_fail\":1,\"fixes\":0,\"regressions\":1}\n]\n```\n\nUse cases:\n* Quickly pinpoint when a regression first appeared before diving into full diff.\n* Send the timeline JSON straight to a small dashboard (Prometheus push, simple web chart) without re-reading all snapshot files.\n* In Continuous Integration (CI) pipelines, fail the run (block the merge) if the timeline shows new failures or regressions. CI = automated test/build system that runs on every change.\n\n### Labels vs paths (what does `v1` mean?)\n\n- `pytest-snap run <label>`\n\t- The label only names the output file: `.artifacts/snap_<label>.json`.\n\t- It does not select a folder named `<label>`; discovery defaults to `./tests` unless you pass `--tests`.\n\t- Examples:\n\t\t```bash\n\t\tpytest-snap run v1                      # runs ./tests, writes .artifacts/snap_v1.json\n\t\tpytest-snap run mylabel --tests tests/api\n\t\tpytest-snap run pr-123  --tests tests/test_api.py::test_happy_path\n\t\t```\n\n- `pytest-snap diff <A> <B>`\n\t- Labels refer to snapshot files in the artifacts directory (default `.artifacts`).\n\t- When you add `--code` (or `--code-only`), directories named `<A>` and `<B>` are looked up under `--versions-base` (default `.`).\n\t- You can control the base with `--versions-base PATH`.\n\n---\n\n## Flaky Detection\n\nWhen history logging is enabled (default in `pytest-snap run`), previous outcomes are tracked. A weighted score measures pass \u2194 fail flips. Highly flaky tests can be excluded from \"new failures\" to reduce noise.\n\n---\n\n## Conceptual Model\n1. Enable capture (flag / CLI) \u2192 write snapshot.\n2. (Future) Compare snapshots \u2192 categorize changes.\n3. (Future) Apply gating policies.\n4. Refresh baseline as intent changes.\n\n---\n\n## FAQ\n**Do I need the CLI?** No; it's convenience sugar for labeled runs.\n\n**Why not a baseline diff yet?** Keeping 0.1.0 deliberately small; diffing lands next.\n\n**Will the schema change?** Potentially (still pre-1.0.0) but additions will prefer backward compatibility.\n\n---\n\n## Glossary\n| Term | Definition |\n|------|------------|\n| Snapshot | JSON record of one full test run |\n| Nodeid | Pytest's canonical test identifier |\n| Duration | Test call-phase elapsed time (ns stored) |\n\n---\n\n## Contributing\n\n1. Fork / clone.  \n2. (Optional) Create venv & install: `pip install -e .[dev]`.  \n3. Add or adjust tests for your changes.  \n4. Keep documentation clear and concise.  \n5. Open a PR.\n\n---\n\n## License\n\nMIT (see `LICENSE`).\n\n## Compatibility\nRuns on\n* Operating systems: macOS, Linux, and Windows (pure Python, no native extensions).\n* Python versions: 3.9+ (tox/CI test 3.9\u20133.12; builds also succeed on 3.13).\n* Requirements: pytest>=8.0.\n\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Minimal deterministic test-run snapshot capture for pytest.",
    "version": "0.1.5",
    "project_urls": {
        "Homepage": "https://github.com/cr5459/pytest-snap",
        "Issues": "https://github.com/cr5459/pytest-snap/issues"
    },
    "split_keywords": [
        "pytest",
        " testing",
        " snapshot",
        " regression"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "26b021686ccb067e466b9d6d805cefb72b38ad48768efc1ed759cd3fafcf0296",
                "md5": "363cd5df64598a308d63e7ffeb06d759",
                "sha256": "1bd0e6dddfb0440ebd969fc9e95f9e58dde9014898f6aa2359be2ef446cfe32f"
            },
            "downloads": -1,
            "filename": "pytest_snapcheck-0.1.5-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "363cd5df64598a308d63e7ffeb06d759",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 26004,
            "upload_time": "2025-09-07T00:26:15",
            "upload_time_iso_8601": "2025-09-07T00:26:15.575181Z",
            "url": "https://files.pythonhosted.org/packages/26/b0/21686ccb067e466b9d6d805cefb72b38ad48768efc1ed759cd3fafcf0296/pytest_snapcheck-0.1.5-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "cef6b919f4eaf8317093465d62b8de62caa9a90ef7e7a6def778296aae94b0c6",
                "md5": "be2a84ae5021578c74f875bcd4465a37",
                "sha256": "0ee574791e0a5aa80d1db14cbaaa5dbe7e9f0101a5524be4e91ca1b99f7fddf5"
            },
            "downloads": -1,
            "filename": "pytest_snapcheck-0.1.5.tar.gz",
            "has_sig": false,
            "md5_digest": "be2a84ae5021578c74f875bcd4465a37",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 28620,
            "upload_time": "2025-09-07T00:26:16",
            "upload_time_iso_8601": "2025-09-07T00:26:16.709826Z",
            "url": "https://files.pythonhosted.org/packages/ce/f6/b919f4eaf8317093465d62b8de62caa9a90ef7e7a6def778296aae94b0c6/pytest_snapcheck-0.1.5.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-07 00:26:16",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "cr5459",
    "github_project": "pytest-snap",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "pytest",
            "specs": [
                [
                    ">=",
                    "8.0"
                ]
            ]
        }
    ],
    "tox": true,
    "lcname": "pytest-snapcheck"
}
        
Elapsed time: 3.12270s