Package: pysnap
PySnapNote: This project is just a fork of the packagesnapshottestwhich lives here:https://github.com/syrusakbary/snapshottest. It had been mostly abandoned, so I kicked the wheels and got it back in working order. Contributions are welcome!Snapshot testing is a way to test your APIs without writing actual test
cases.pip install doc8A snapshot is a single state of your API, saved in a file.You have a set of snapshots for your API endpoints.Once you add a new feature, you can generateautomaticallynew
snapshots for the updated API.<palign="center"></p>Installation$ pip install pysnapUsage with unittest/nosefrompysnapimportTestCaseclassAPITestCase(TestCase):deftest_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 thenosetests--snapshot-update.Check theUnittest
example.Usage with pytestdeftest_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-updateconfig.Check thePytest
example.Usage with djangoAdd to your settings:TEST_RUNNER='pysnap.django.TestRunner'To create your pysnap:frompysnap.djangoimportTestCaseclassAPITestCase(TestCase):deftest_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 thepython manage.py test--snapshot-update. Check theDjango
example.ContributingAfter cloning this repo, ensure dependencies are installed by running:pipinstall-e".[test]"After developing, the full test suite can be evaluated by running:py.testNotesThis package is heavily insipired injest snapshot
testing.Reasons for use this packageMost of this content is taken from theJest 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 PySnapA 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.LicenseMIT
License