Django Smoketest框架

django-smoketest的Python项目详细描述


Django Smoketest公司[构建状态](https://travis-ci.org/ccnmtl/django-smoketest.png?branch=master)(https://travis ci.org/ccnmtl/django smoketest)
[![覆盖状态](https://coveralls.io/repos/github/ccnmtl/django-smoketest/badge.svg?branch=master)"(https://coveralls.io/github/ccnmtl/django-smoketest?branch=master)

例如,在运行部署之后,
需要快速检查所有内容是否正常运行,以便在出现问题时可以快速回滚。通常情况下,这只意味着访问站点并手动单击几个链接(最多)。


茎。也许您甚至已经有了自动的
配置管理,确保您的登台服务器
配置为生产的精确副本。因此,从逻辑上讲,如果您的
代码通过了登台服务器上的所有测试,并且生产服务器的配置相同,那么所有的*都必须*在
生产环境中正常工作。正确的?如果世界如此简单,岂不是很美好吗?我们当然知道不是。这就是为什么我们希望Smoke
测试能够实际验证至少
系统的主要组件基本上都是功能性的,并且能够相互通信,并且
我们没有做一些愚蠢的事情,比如编写依赖于新的
环境变量的代码,该环境变量没有设置为C
生产上的正确值尚未确定。

您可能不希望在生产设置有效的情况下运行单元测试或集成测试。谁知道会导致什么样的精神错乱?测试数据通过
生产数据库喷洒,从文件系统中删除用户数据,太阳从西边升起,从东边落下?

这就是烟雾测试的目的。烟雾测试应该是安全的,以便在生产中运行。验证应用程序是否可以连接到
数据库,预期的文件系统挂载是否到位,
等。弥合现有测试覆盖率和生产领域之间的最后一个差距。但是,在仔细查看
生产数据的同时,我发现自己也经常编写小视图来支持即席监视。例如,如果某个应用程序依赖于nfs挂载来执行某些不常执行的操作,并且该挂载有过时的趋势,则每隔几分钟(或通过nagios或其他一些
监视应用程序)运行一个cron
作业,并让应用程序尝试从挂载中读取一个
文件,可以帮助确保在用户遇到陈旧的安装之前,我们会得到警告。


开始
----


install django smoketest

$pip install django smoketest

要定义烟雾测试,
使用
`.py'和测试中的一个或多个python文件,创建一个"smoke.py"文件或"smoke"目录。

在您的"smoke.py"(或模块)中,您可以放置如下内容:


from smoke test import smoketest
from myapp.models import foomodel



class demotest(smoketest):
def test\u foomodel读取(self):
"
cnt=foomodel.objects.all().count()
self.asserttrue(cnt>;0)

def test_foomodel_writes(self):
""确保我们也可以写入数据"abase
但不要留下任何测试碎屑。SmokeTests
将自动回滚。
"
f=foomodel.objects.create()

现在,如果您制作一个"get"到"http://yourapp/smokeTest/",
Django SmokeTest将遍历您的代码,找到任何"smoke"模块,并运行您定义的测试(i如果您使用过unittest
或nose,那么您就有了这样的想法:

测试类:1
测试运行:3
测试通过:3
测试失败:0
测试出错:0
时间:1200.307861328ms

因此,如果您将其称为fr,则只需检查"pass"的结果即可。om
监视脚本或作为自动部署的一部分。

/>module1.smoke.demotest.test_foo失败
module1.smoke.demotest.test_bar失败
module1.smoke.demotest.test_baz出错

以更容易解析的形式打开:

{"status":"fail","tests_failed":2,
"errored_tests":["module1.smoke.demotest.test_baz"],
"tests_run":8,"test_classes":1,"tests_passed":5,
"faile"D撸test s":["module1.smoke.demotest.test撸foo",
"module1.smoke.demotest.test撸foo","tests撸erred":1,
"time":1.6458759307861328}

问题:我正在考虑保持输出的简单性,以便自动解析
,但也许我们应该坚持unittest的
existi而是ng输出格式?

api
--

它基本上可以完成通常的
工作,运行"setup"和"teardown"方法,并支持
通常的"assertequals"、"assertraises"、"asserttrue"方法数组。


这让您可以自由地做潜在的破坏性工作,只需让数据库为您清理。通常需要注意的是,确保您使用的数据库支持
事务,并且只能回滚数据库操作,而不能使用
其他副作用。


默认情况下,django smoketest将搜索
中提到的所有应用程序,查找吸烟测试。如果使用应用程序列表定义
`smoketest_skip_apps'设置,则django smoketest
将绕过其中提到的任何设置。


支持的断言(目前为止):

*asserteQual(a,b)
*assertnoteQual(a,b)
*asserttrue(t)
*assertfalse(x)
*asserts(a,b)
*assertsnot(a,b)
*断言无(x)
*断言无(x)
*断言(a,b)
*断言不存在(a,b)
*断言不存在(a,b)
*断言不存在(a,b)
*资产引发(异常,函数)
*无资产(a,b)
*资产不存在(a,b)
*资产不存在(a,b)
*资产大于(a,b)
*资产大于等于(a,b)
*assertalmostequal(a,b)
*assertnotalmostequal(a,b)


所有调用都接受自定义消息作为最后一个参数(msg),就像
unittest库中的所有assert调用一样。


我们应该支持吗?
`--failfast`?输出详细?在某些情况下,是否有能力瞄准或跳过特定的
测试?自动超时(许多冒烟测试
涉及尝试连接到外部服务,如果它
需要超过指定的时间段,则失败)?

进度
----


*我认为它只处理"smoke.py"文件或者"smoke/\u init\uu.py"和
在子模块中还找不到子类,如"smoke/foo.py"。
*setupClass/teardownclass
*扩展assert*方法(列在"smoketest/\u init\uuu.py"中)

完成:

*遍历"installed\u应用程序"和查找/运行Smoke测试
*si中的报告编号示例文本格式
*运行setup和teardown方法
*测试失败/错误时,报告哪些方法失败/错误
*正确的"module.class.method"测试失败/错误信息报告
*支持unittest中的assert*方法的基本预期集
*json输出
*运行测试和包括在输出中
*在回滚事务中运行测试
*报告错误的附加信息(异常/回溯)(kristijan mitrovic<;kmitrovic>;)
*支持断言消息(kristijan mitrovic<;kmitrovic>;)
*`smoketest\u skip\u apps`

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

推荐PyPI第三方库


热门话题
java这句话的第一个<U>是什么意思?   java在Android中转换为无符号字符和无符号短字符   java数学。显示工作结果的acos   java JDBC Mysqlconnector位于类路径中,但未找到   java hsqldb hibernate persist@Lob   集合对象无法显示在java、Arraylist、Collection中显示某些未定义值的输出   在Java中尝试在二叉搜索树上实现级别顺序遍历   如何在java对象中获取注释   java在会话超时时删除自定义cookie   java JDBC编程   返回语句上未选中强制转换的java警告   初学者二进制搜索中的java错误   java Azure BlockBlobClient下载时响应文件大小问题   JavaSeleniumWebDriver正在寻找Chrome的错误路径。exe   amazon web服务AWS Lambda(Java)调用错误的对象实例   检测到java Eclipse插件,但未加载   Java中类似于PHP的playframework Autoloader   java使用Google应用程序引擎生成实体列表,希望在Android客户端访问它   JavaZK国际化:UNICODE代替重音字符