Skip to main content

Snapshot testing pytest plugin with minimal ceremony and flexible persistence formats.

Project description

pytest-ditto

PyPI version Continuous Integration

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

pytest_ditto-0.1.2.tar.gz (6.3 kB view details)

Uploaded Source

Built Distribution

pytest_ditto-0.1.2-py3-none-any.whl (8.7 kB view details)

Uploaded Python 3

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

Hashes for pytest_ditto-0.1.2.tar.gz
Algorithm Hash digest
SHA256 355a0fba28ad1370a46750d87ed6cc2d40d810795a6691b1a94d467802fc4578
MD5 cab5f2e705001b7a643ea3a9bacb7a52
BLAKE2b-256 610a658c761d1d910eb7eca85a59176daa34b72c3a1227d56efd3f358c2ff824

See more details on using hashes here.

File details

Details for the file pytest_ditto-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for pytest_ditto-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c656b9afd4c778711e03b1dbcf983e7906add93a0317cbf5dc64c7fccf66d89a
MD5 0d2e9aab819f301a20e8a67e7c159827
BLAKE2b-256 871d1e0ea13671f419874c373c8f59443dbf92ece7aa76da912304b099f011ed

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page