Skip to main content

SnapshotTest travis pypi

Snapshot testing is a way to test your APIs without writing actual test cases.

  1. A snapshot is a single state of your API, saved in a file.
  2. You have a set of snapshots for your API endpoints.
  3. Once you add a new feature, you can generate automatically new snapshots for the updated API.

Installation

$ pip install snapshottest

Usage with unittest/nose

from snapshottest import TestCase

class APITestCase(TestCase):
    def test_api_me(self):
        """Testing the API for /me"""
        my_api_response = api.client.get('/me')
        self.assertMatchSnapshot(my_api_response)

        # Set custom snapshot name: `gpg_response`
        my_gpg_response = api.client.get('/me?gpg_key')
        self.assertMatchSnapshot(my_gpg_response, 'gpg_response')

If you want to update the snapshots automatically you can use the nosetests --snapshot-update.

Check the Unittest example.

Usage with pytest

def test_mything(snapshot):
    """Testing the API for /me"""
    my_api_response = api.client.get('/me')
    snapshot.assert_match(my_api_response)

    # Set custom snapshot name: `gpg_response`
    my_gpg_response = api.client.get('/me?gpg_key')
    snapshot.assert_match(my_gpg_response, 'gpg_response')

If you want to update the snapshots automatically you can use the --snapshot-update config.

Check the Pytest example.

Usage with django

Add to your settings:

TEST_RUNNER = 'snapshottest.django.TestRunner'

To create your snapshottest:

from snapshottest.django import TestCase

class APITestCase(TestCase):
    def test_api_me(self):
        """Testing the API for /me"""
        my_api_response = api.client.get('/me')
        self.assertMatchSnapshot(my_api_response)

If you want to update the snapshots automatically you can use the python manage.py test --snapshot-update. Check the Django example.

Disabling terminal colors

Set the environment variable ANSI_COLORS_DISABLED (to any value), e.g.

ANSI_COLORS_DISABLED=1 pytest

Contributing

After cloning this repo and configuring a virtualenv for snapshottest (optional, but highly recommended), ensure dependencies are installed by running:

make install

After developing, the full test suite can be evaluated by running:

make lint
# and
make test

Notes

This package is heavily inspired in jest snapshot testing.

Reasons to use this package

Most of this content is taken from the Jest snapshot blogpost.

We want to make it as frictionless as possible to write good tests that are useful. We observed that when engineers are provided with ready-to-use tools, they end up writing more tests, which in turn results in stable and healthy code bases.

However engineers frequently spend more time writing a test than the component itself. As a result many people stopped writing tests altogether which eventually led to instabilities.

A typical snapshot test case for a mobile app renders a UI component, takes a screenshot, then compares it to a reference image stored alongside the test. The test will fail if the two images do not match: either the change is unexpected, or the screenshot needs to be updated to the new version of the UI component.

Snapshot Testing with SnapshotTest

A similar approach can be taken when it comes to testing your APIs. Instead of rendering the graphical UI, which would require building the entire app, you can use a test renderer to quickly generate a serializable value for your API response.

License

MIT License

coveralls

Metadata

Release files for snapshottest 0.6.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for snapshottest 0.6.0
File Size Uploaded
snapshottest-0.6.0.tar.gz 22.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for snapshottest 0.6.0
File Interpreter ABI Platform
snapshottest-0.6.0-py2.py3-none-any.whl Python 3, Python 2 none any Details

Total release size: 39.1 kB

Release files / snapshottest-0.6.0.tar.gz

Download URL snapshottest-0.6.0.tar.gz
Size 22.6 kB
Tags Source
SHA-256 checksum
How to use checksums
bbcaf81d92d8e330042e5c928e13d9f035e99e91b314fe55fda949c2f17b653c
BLAKE2b-256 checksum
How to use checksums
146a6a6ff192326d79048f44c9348acad760070cce68f9fc9c9832c3efa7aca8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/47.1.1 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.5

Release files / snapshottest-0.6.0-py2.py3-none-any.whl

Download URL snapshottest-0.6.0-py2.py3-none-any.whl
Size 16.5 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
9b177cffe0870c589df8ddbee0a770149c5474b251955bdbde58b7f32a4ec429
BLAKE2b-256 checksum
How to use checksums
c9d99527f609c28b508043edf587d03f96b8621ae4adaa4480197347cb640d0e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/47.1.1 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.5

Release history Release notifications | RSS feed

This release

0.6.0 This release

2 release files

0.5.1

1 release file

0.5.0

1 release file

0.4.0

1 release file

0.3.0

1 release file

0.2.2

1 release file

0.2.1

1 release file

0.2.0

1 release file

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page