萨马奇测试你的公共API的回归!

samarche的Python项目详细描述


Travis-CI

萨马奇

api检查器灵感来自this post

快速启动

假设您正在开发一个带有公共api的模块,供工作人员使用 有了它,这个api应该在下一个major之前保持不变 释放。如果提交做了不应该做的更改会发生什么 ?

解决方案正在测试:

# A class which is part of your APIclassFoo:bar=Truedef__init__(self,stuff=False):self.stuffdefthing(self):return"doh"# Your tests to make sure the class stays consistentself.assertTrue(hasattr(Foo,'bar'))self.assertTrue(hasattr(Foo,'thing'))self.assertTrue(hasattr(Foo(),'stuff'))

不幸的是,这些测试基本上是每秒编写所有的api 时间到了,一定有更好(而且不那么无聊)的方法!

Samarche允许您对自己的API(称为 signature)然后能够根据 它。

Samarche只注册公共成员(即以^{tt2}开头的所有内容$ 被跳过)可以从module创建签名, module.package甚至module.package:package_attribute

示例

首先生成并保存api的签名:

# Do this at each major releaseimportsamarchesignature=samarche.build_signature("my_api")withopen('my_api.signature','wb')asfd:samarche.dump(signature,f)

然后把你的测试放在某个地方

withopen('my_api.signature','rb')asfd:original_signature=samarche.load(fd)try:samarche.check_signature('my_api',original_signature)exceptsamarche.ValidationErrorase:print("API has changed : {}".format(e))

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用McClickListener单击了什么元素   Java时间戳在Oracle时间戳中不同情况下存储12 PM的奇怪行为   java无法使用事件总线对运行在不同机器上的垂直体进行通信   java Mockserver:收到请求后进行回调   java无法将Json字符串转换为Map<string,Object>   java如何按升序排列输出?   java视图行,带有oracle键。jbo。在SrCategoryParentIterator中找不到键[300100120394155]   javafxmysql连接示例   java正在等待加载完成   java是否可以将同一个有状态会话bean实例注入多个其他会话bean?   java无法让万向节检测离开或进入区域   使用JavaCV和OpenCV的java提供了dyld:lazy符号绑定失败:找不到符号:__sincos_stret   xml解析无法使用Java读取xml文档   java无法更改工具栏的颜色   javaapachesshd和JSCH   java无法在firebase存储中检索图像url   java问题与executeUpdate   同一应用程序中不同活动之间的java SharedReference