Django 测试技巧 [关闭]

Posted

技术标签:

【中文标题】Django 测试技巧 [关闭]【英文标题】:Django testing tips [closed] 【发布时间】:2011-05-25 15:32:24 【问题描述】:

本着question 的精神,我想知道是否有人对为 Django webapp 创建有用且“完整”的测试套件(测试套件是否可以“完整”?)有任何提示。

我的情况:我已经完成了一个原型,现在正在努力添加一些回归测试。我个人使用django-webtest 进行大部分测试,并使用Django test client 进行一些URL 测试。

我对我的测试套件完全不满意。我远不是一个测试专家,所以试图在这方面进行改进。任何提示——无论是否适用于我的情况——将不胜感激。

【问题讨论】:

很惊讶没有人提供任何测试提示。我非常愿意提供我的一些观点。认为这可能对许多人很有帮助。 【参考方案1】:

我建议阅读Django 1.1 Testing and Debugging by Karen M. Tracey。前五章介绍了 Django 中的测试。具体来说,您应该查看第 5 章,其中讨论了集成其他测试工具。以下是第 5 章内容的摘录:

在本章中,我们:

了解了 Django 提供的用于添加测试函数的钩子 看到了如何使用这些钩子的示例,特别是在添加代码覆盖率报告的情况下 还探讨了一个不需要使用这些钩子的示例 - 将 twill 测试工具的使用集成到我们的 Django 测试用例中时

以下是 Karen Tracey 在其书中第 5 章中讨论的一些工具的链接:

Ned Batchelder's coverage module Twill

生菜

您可能还想查看Lettuce。来自网站:

Lettuce 是一个非常简单的基于 Cucumber 的 BDD 工具。

Lettuce 文档也有一个关于 integrating Lettuce with Django 的部分。

【讨论】:

我非常同意。这是我最喜欢的 Django 书。它应该是所有认真的开发人员的必备读物。它通过单元测试、斜纹和围攻远程测试、并发问题、数据库问题、文档测试以及调试。真是太神奇了。 我有点偏见 ;) 但是 Nimmy Lebby 已经在使用的 django-webtest 在 django 集成测试中比 twill 更好:WebTest 具有同样简单的 API,但开发并没有停滞(最后一个 twill 版本是在 2007 年),django-webtest 可以正确处理 unicode,并且具有访问渲染页面的模板上下文等强大功能。 @Mike 我的公正意见:django-webtest 摇滚。干得好,把 webtest 交给我们 Django 的人。 另见:Using Lettuce and WebTest to test your WSGI App 另外要注意的是,还有一些生菜的替代品,比如Behave;这是a blog post comparing them, and advocating Behave。不得不提这一点,因为我只是用头撞了生菜一段时间,然后最终决定改用 Behave,原因在那篇文章中解释了。【参考方案2】:

测试提供了(至少)4 个问题的答案。

    我的实现是否正确?应用是否符合记录在案的或至少在脑海中应该如何表现的形象。

    我最近的更改有什么问题吗?

    我的应用程序安全吗?来自无辜的用户和狡猾的人。

    我的应用性能足够吗?

对于#1,每个“功能”至少需要进行一次测试,而主要功能可能需要进行多次测试。 如果你既是开发者又是测试开发者,这里很容易出现遗漏错误。

对于 #2 来说,从编写测试套件和代码(并忠实地运行它)的纪律开始是关键。

对于 #3,确保在正常程序指导操作之外访问的 URL 在权限方面表现正常。您可能不希望一个用户能够修改甚至是另一个用户的信息,但如果他们可以输入 ../user/505 并获取可能存在问题的所有内容。我敢肯定这里还有很多其他的东西需要测试,所以请其他人在这里插话。

为具有大量流量的应用测试性能和扩展稳健性 不是我很了解的东西。

查看 Django 本身的测试用例可以了解应该测试的粒度。Django trunk tests

Django docs 有一篇关于测试的好文章:search the docs for testing。

【讨论】:

以上是关于Django 测试技巧 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 中测试电子邮件发送 [关闭]

python测试开发django-187.Bootstrap模态框(modal)如何在关闭时触发事件

Django 测试冻结在数据库创建

[Android测试] Appium的一些坑问题错误解决 与 技巧集锦

为啥这个 Python 测试失败了? [关闭]

Django性能/内存使用[关闭]