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
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 |