Samarche for testing your public api against regression !
Project description
Samarche
API checker inspired by this post
Quickstart
Say you’re developping a module with a public API, for people working with it, this API is supposed to stay the same until the next major release. What would happen if a commit makes a change it shouldn’t have ?
The solution is testing :
# A class which is part of your API class Foo: bar = True def __init__(self, stuff=False): self.stuff def thing(self): return "doh" # Your tests to make sure the class stays consistent self.assertTrue(hasattr(Foo, 'bar')) self.assertTrue(hasattr(Foo, 'thing')) self.assertTrue(hasattr(Foo(), 'stuff'))
Unfortunatly those tests are basically writting all your API a second time, there must be a better (and less boring) way !
Samarche allow you to take a snapshop of your API (called a signature) and then be able to test your evolving codebase against it.
Samarche register only public members (i.e. everything starting by _ is skipped) You can create signatures from a module, module.package and even module.package:package_attribute
Example
First build and save the signature of your API:
# Do this at each major release import samarche signature = samarche.build_signature("my_api") with open('my_api.signature', 'wb') as fd: samarche.dump(signature, f)
Then put somewhere in your tests
with open('my_api.signature', 'rb') as fd: original_signature = samarche.load(fd) try: samarche.check_signature('my_api', original_signature) except samarche.ValidationError as e: print("API has changed : {}".format(e))
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.