Django测试技巧

17

受这个问题的启发,我想知道有没有人有关于创建一个有用和“完整”的测试套件(测试套件是否可以“完整”)的 Django 网络应用程序的建议。

我的情况:我已经完成了一个原型,并正在添加一些回归测试。我个人使用django-webtest进行大部分测试,同时也会使用Django 测试客户端进行一些 URL 测试。

我对自己的测试套件一点也不放心。由于我不是专业的测试人员,因此试图在这方面改进。任何建议 - 无论是否适用于我的情况 - 都将不胜感激。


很惊讶没有人提供任何测试技巧。我非常愿意分享我的一些观点。我认为这可能对许多人非常有帮助。 - Belmin Fernandez
2个回答

14

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

在本章中,我们:

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

以下是Karen Tracey在她的书中讨论的一些工具的链接:

Lettuce

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

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

Lettuce文档还有一个关于将Lettuce与Django集成的部分。


1
我非常赞同。这是我最喜欢的Django书籍。对于所有认真的开发人员来说,它都应该是必读的。它涵盖了单元测试、使用twill和siege进行远程测试、并发问题、数据库问题、doctests以及调试等方面。它非常棒。 - rdegges
3
我有一点偏见;) 但 Nimmy Lebby 已经在使用的 django-webtest 比 twill 更适合于 Django 集成测试:WebTest 具有类似简单的 API,但开发没有停滞(上一个 twill 发布版本是在 2007 年),django-webtest 可以正确处理 Unicode 并具有强大的功能,例如访问呈现页面的模板上下文。 - Mikhail Korobov
@Mike 我的客观意见是:django-webtest非常棒。很好地将webtest带给了我们Django开发者。 - Belmin Fernandez
还要注意的是,Lettuce 有一些替代品,比如 Behave;这里有一篇博客文章比较它们,并支持 Behave。我必须提到这一点,因为我曾经花了很长时间来使用 Lettuce,最终决定根据那篇文章中解释的原因转向 Behave。 - floer32

3

测试至少可以回答以下4个问题:

  1. 我的实现正确吗?应用程序是否与文档或至少心理预期的行为相匹配。

  2. 我的最新更改有没有破坏任何东西?

  3. 我的应用程序安全吗?对于无辜用户和狡猾的人都是如此。

  4. 我的应用程序性能足够吗?

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

对于#2,从编写测试套件并且忠实地运行它开始是关键。

对于#3,确保在正常程序指导操作之外访问的URL在权限方面表现正确。您可能不希望一个用户能够修改甚至另一个用户的信息,但是如果他们只需输入../user/505就能获取那里的所有内容,那可能是一个问题。我相信这里还有很多其他应该进行测试的事情,所以请其他人在这里发表意见。

测试具有大量流量的应用程序的性能和可伸缩性并非我所擅长的领域。

查看Django本身的测试用例可以提供应该进行测试的粒度的感觉。Django trunk tests

Django文档中有一篇关于测试的好文章:搜索文档以获取testing。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接