萨马奇测试你的公共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如何拆分字符串(基于各种分隔符),但不保留空格?   解析。Json格式的txt文件和knime中的java   java Spring rest api为什么在rest api调用的响应中更改了数据类型   升华文本3抛出java。lang.ClassNotFoundException,而记事本++不存在   java Android指纹扫描仪在尝试5次后停止工作?   java Android如何设置精确的重复报警?   java如何使用HTTPGET connect为access API输入用户名和密码   java当测试报告显示没有测试失败时,Gradle为什么说“有失败的测试”?   用Gson实现java获取响应   MapReduce程序中函数错误的java不可映射参数   java spring安全性不符合自动代理的条件   java GWT使用异步回调进行同步/阻塞调用   java奇怪的类数组问题无法在jsp中显示   如何在java中使用PrinterJob使用epl打印条形码   java如何在JTable中居中单元格   将Java Mockito测试转换为Kotlin   html Java正则表达式模式匹配到多个相同标记   testCompile中缺少java Gradle(Android)多项目依赖项   在输入提示后输入字符串时发生java FileNotFoundException