Snapshot testing pytest plugin with minimal ceremony and flexible persistence formats.
Project description
pytest-ditto
Snapshot testing pytest plugin with minimal ceremony and flexible persistence formats.
Introduction
The pytest-ditto plugin is intended to be used snapshot/regression testing. There are
two key components: the snapshot fixture and the snapshot persistence formats.
The snapshot Fixture
In the following basic example, the function to test is fn, the test is using the
snapshot fixture and it is asserting that the result of calling the fn with the
value of x does not change.
import ditto
def fn(x: int) -> int:
return x + 1 # original implementation
# return x + 2 # new implementation
def test_fn(snapshot) -> None:
x = 1
result = fn(x)
assert result == snapshot(result, key="fn")
The first time the test is run, the snapshot fixture takes the data passed to it and
persists it to a .ditto directory in the same location as the test module. Subsequent
test runs will load the file and use that value in the test to test the output of the
computed value.
By default, the snapshot data is converted and persisted using pickle; however, there
are a range of persistence formats that can be used.
@ditto Marks
If the default persistence format, pickle, isn't appropriate different formats can be
specified per test by using ditto marks - customised pytest mark decorators.
The default persistence types are: pickle, yaml and json; however additional
plugins can be installed as per below:
- pandas via
pytest-ditto-pandas
Usage
pd.DataFrame
import pandas as pd
import ditto
def awesome_fn_to_test(df: pd.DataFrame):
df.loc[:, "a"] *= 2
return df
# The following test uses pandas.DataFrame.to_parquet to write the data snapshot to the
# `.ditto` directory with filename:
# `test_fn_with_parquet_dataframe_snapshot@ab_dataframe.pandas.parquet`.
@ditto.pandas.parquet
def test_fn_with_parquet_dataframe_snapshot(snapshot):
input_data = pd.DataFrame({"a": [1, 2, 3], "b": [4, 5, 9]})
result = awesome_fn_to_test(input_data)
pd.testing.assert_frame_equal(result, snapshot(result, key="ab_dataframe"))
# The following test uses pandas.DataFrame.to_json(orient="table") to write the data
# snapshot to the `.ditto` directory with filename:
# `test_fn_with_json_dataframe_snapshot@ab_dataframe.pandas.json`.
@ditto.pandas.json
def test_fn_with_json_dataframe_snapshot(snapshot):
input_data = pd.DataFrame({"a": [1, 2, 3], "b": [4, 5, 9]})
result = awesome_fn_to_test(input_data)
pd.testing.assert_frame_equal(result, snapshot(result, key="ab_dataframe"))
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pytest_ditto-0.1.2.tar.gz.
File metadata
- Download URL: pytest_ditto-0.1.2.tar.gz
- Upload date:
- Size: 6.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.0.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
355a0fba28ad1370a46750d87ed6cc2d40d810795a6691b1a94d467802fc4578
|
|
| MD5 |
cab5f2e705001b7a643ea3a9bacb7a52
|
|
| BLAKE2b-256 |
610a658c761d1d910eb7eca85a59176daa34b72c3a1227d56efd3f358c2ff824
|
File details
Details for the file pytest_ditto-0.1.2-py3-none-any.whl.
File metadata
- Download URL: pytest_ditto-0.1.2-py3-none-any.whl
- Upload date:
- Size: 8.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.0.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c656b9afd4c778711e03b1dbcf983e7906add93a0317cbf5dc64c7fccf66d89a
|
|
| MD5 |
0d2e9aab819f301a20e8a67e7c159827
|
|
| BLAKE2b-256 |
871d1e0ea13671f419874c373c8f59443dbf92ece7aa76da912304b099f011ed
|