【问题标题】:How to separate test types using Django如何使用 Django 分离测试类型
【发布时间】:2012-08-12 12:51:02
【问题描述】:
我在 Django 中有一系列测试,它们被归类为各种“类型”,例如“单元”、“功能”、“慢”、“性能”……
目前我正在使用仅用于运行特定类型测试(类似于 @skipIf(...))的装饰器对它们进行注释,但这似乎不是最佳方法。
我想知道是否有更好的方法将测试分成类型?如果不牺牲其他好处,我愿意使用不同的测试运行程序、扩展现有的 django 测试框架、构建套件甚至使用另一个测试框架。
想要这样做的根本原因是运行一个高效的构建管道,因此我的首要任务是:
- 确保我的持续集成运行首先检查单元测试,
- 可能并行一些测试运行
- 完全跳过某些类别的测试
【问题讨论】:
标签:
python
django
unit-testing
testing
django-testing
【解决方案1】:
我的公司组织测试的方式是将测试分为两大类。单位和功能。单元测试存在于 Django 测试发现中。 manage.py test 将运行它们。功能测试位于该目录之外。它们可以手动运行,也可以由 CI 运行。 Buildbot 在这种情况下。它们仍然使用 unittest textrunner 运行。我们还有一个功能测试的子类别,称为压力测试。这些是无法并行运行的测试,因为它们对服务器进行了粗暴的操作。就像关闭数据库并查看会发生什么。
然后,CI 可以将每种测试类型作为不同的步骤运行。测试可以用skipif修饰。
这不是一个完美的解决方案,但它非常清晰易懂。
【解决方案2】:
我的做法是这样的:
- 在您的应用文件夹中创建文件夹
tests
- 使用测试用例(unit_test.py、functional_test.py 等)创建 py 文件
-
在测试目录中创建__init__.py:
from unit_tests import *
from functional_tests import *
您可以像这样从 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