如何使用Django分离测试类型

时间:2012-08-16 07:37:06

标签: python django unit-testing testing django-testing

我在Django中进行了一系列测试,分为各种“类型”,例如“单位”,“功能”,“慢”,“表现”,......

目前我正在用一个装饰器注释它们,这个装饰器只用于运行某种类型的测试(类似于@skipIf(...)),但这似乎不是一种最佳方法。

我想知道是否有更好的方法将测试分成类型?我愿意使用不同的测试运行器,扩展现有的django测试框架,构建套件,甚至使用其他测试框架,如果不牺牲其他好处的话。

想要这样做的根本原因是运行一个有效的构建管道,因此我的优先事项是:

  • 确保我的持续集成运行首先检查单元测试,
  • 可能并行进行一些测试运行
  • 完全跳过某些类别的测试

2 个答案:

答案 0 :(得分:1)

我公司组织测试的方式是将它们分为两大类。单位和功能。单元测试在Django测试发现中进行。 manage.py测试将运行它们。功能测试位于该目录之外。它们可以手动运行,也可以通过CI运行。在这种情况下Buildbot。他们仍然使用unittest textrunner。我们还有一个称为压力测试的功能测试子类别。这些是无法并行运行的测试,因为它们对服务器做了粗暴的事情。就像关闭数据库并看看会发生什么。

然后,CI可以将每个测试类型作为不同的步骤运行。测试可以用skipif装饰。

这不是一个完美的解决方案,但它非常清晰易懂。

答案 1 :(得分:1)

这样看起来像这样:

  1. 在您的应用文件夹中创建文件夹tests
  2. 使用测试用例创建py文件(unit_test.py,functional_test.py等)
  3. 使用以下命令在测试目录中创建__init__.py

    from unit_tests import *
    
    from functional_tests import *
    
  4. 你可以从manage.py运行测试,如下所示:

    manage.py test # run all tests (include django tests)
    manage.py test my_app # run all my tests
    manage.py test my_app.UnitTestCase # run specific test case