对Django的测试总比什么都没有好

django-instant-coverage的Python项目详细描述


A roll of duct tape; the instant coverage logo

即时覆盖status

你的新django网站需要测试。没什么特别花哨的,只是你知道 你不会忘记在某个地方关闭一些<;div>;而它不会启动 下次部署的时候。你可以写单元测试,但是那些很无聊 你的客户肯定不会为此付出代价的。

不过,你还有五分钟。

功能

简单
遍历一个url列表,如果其中有500个,则会进行投诉。
魔术
会在URL列表中缺少视图时大声抱怨 测试。
有你需要的
附带optional mixins用于检查链接和验证html、json, 您的拼写或wcag符合性。
可扩展
轻松添加针对网站上每个视图运行的测试。如果你 想要测试某个特定短语的一致大写 或者通用包含一个特定的元标记,您可以将它们包含在 分钟。
便携式
Tested在Python2.7、3.4、3.5和3.6上,Django版本为1.4到2.0, 使用some exclusions.

更改

在每个版本中所做的更改都列在此存储库中的tags中。

用法

安装

pip install django-instant-coverage

“编写”测试

你需要一个测试模块。我把我的放在我的PROJECT_DIR里, 因为它正在测试整个网站,而不仅仅是一个应用程序。无论你放在哪里, 它应该命名为这样,您的测试运行程序将找到它(^{tt3})$ 通常工作良好),至少应包含以下内容:

fromdjango.testimportTestCasefrominstant_coverageimportInstantCoverageMixinclassEverythingTest(InstantCoverageMixin,TestCase):pass

有了它,您应该能够使用python manage.py test运行测试。不过,他们会失败的。你会得到一个你没有的网址列表 告诉它测试,看起来像这样:

AssertionError: The following views are untested:

('^',) ^$ (index)
('^admin/',) ^$ (index)
('^admin/',) ^logout/$ (logout)
('^admin/',) ^password_change/$ (password_change)
[...]

它可能会包含一些你不想测试的url,比如 那些来自django管理应用程序。要快速排除整个url includes,请添加 像失败中所示的元组 uncovered_includes属性:

classEverythingTest(InstantCoverageMixin,TestCase):uncovered_includes=[('^admin/',),]

添加与do实际要测试的url匹配的路径 covered_urls,并添加与那些不匹配的路径 uncovered_urls。如果您忘记了仍然缺少的内容,请再次运行测试以 对剩下的东西进行审计。

classEverythingTest(InstantCoverageMixin,TestCase):covered_urls=['/','/api/','/0007C3F2760E0541/',]uncovered_urls=[# requires stuff to be in the session'/upload/confirm/','/shortlist-selection/',# only accepts POST'/shortlist-order/',# probably tested pretty thoroughly by the django project'/media/woof.jpg',]

如果您想使用reverse(),而不是硬编码URL,或者如果您想 测试给定url的多个路径,这是完全支持的。Encouraged, 甚至。只要covered_urls是 列表。

如果没有数据库中的数据,您无法测试视图, make a fixtures fileadd it to your test class

< H3>使用所提供的可选测试混合剂< EH3>

默认情况下,即时覆盖将确保您的任何视图都不会引发未处理的 异常和所有异常都返回200到399之间的状态代码。有一个 很有可能至少有一些提供的optional mixins 适合你的网站,所以一定要通过他们看看 你想不到的。像这样使用它们:

frominstant_coverageimportInstantCoverageMixin,optionalclassEverythingTest(optional.Spelling,optional.ExternalLinks,optional.ValidHTML5,InstantCoverageMixin,TestCase):# covered_urls, etc...

编写自己的测试

InstantCoverageMixin提供返回 由url键控的Django test client ^{tt12}$ objects字典。您编写的测试方法应该 重复一遍。查看optional mixins以获取一些示例。

如果你做了一些你认为对其他网站有用的东西,即使 少数派,一个拉票请求将非常感谢。

不同情况下的试验

如果你想在不同的情况下测试你列出的所有url (例如,当用户登录时或当其他语言 选择),创建测试的子类并重写setUp()。为了 例如,您可以将以下内容放在EverythingTest下面:

fromdjango.contrib.authimportget_user_modelclassLoggedInEverythingTest(EverythingTest):defsetUp(self):super(LoggedInEverythingTest,self).setUp()user=get_user_model()(username='user',is_staff=True,is_superuser=True,)user.set_password('pass')user.save()self.assertTrue(self.client.login(username='user',password='pass'))

请注意,默认情况下,测试客户端将遵循重定向。如果你没有 如果需要,请将测试的follow_redirects属性设置为False。 如果您有更具体的要求,则可能必须重写 get_client_kwargsattempt_to_get_internal_url测试方法。

如果有一堆测试类测试相同的url集合,那么 可能需要考虑从InstantCoverageAPI继承,而不是 InstantCoverageMixin;前者不会运行任何您不运行的测试 明确地加上你自己。

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

推荐PyPI第三方库


热门话题
Javalog4j2。xml和log4j2test。eclipse中的xml   java映像未显示在surfaceview中   在Java中,能否在for之后立即放置if?   java调用构造函数的不同方式是什么?   java为什么不将其视为多重继承,而所有类都首先从对象类扩展,然后再扩展其他类   带有ms access的java不显示数据库结果   java Eclipse命令行URL参数切断https   java Android JNI回调似乎调用了一个随机方法   java Apache Camel处理XMLFile中声明的编码   java Bonita BPM不要等待Bonita的函数结束   布尔Java:构建逻辑表达式,然后验证它们   java在不使用QueryString的情况下将变量从一个网站页面传递到另一个网站页面   java ORA01861:文本与格式字符串不匹配   java字节[]字符串到C中的字符串#   java试图通过socket发送sqlite数据库文件   java如何使用命令行更改属性文件中的浏览器值以运行selenium测试用例