1

我在 Django 中有一系列测试,它们被归类为各种“类型”,例如“单元”、“功能”、“慢”、“性能”……

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

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

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

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

2 回答 2

1

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

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

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

于 2012-08-16T08:01:21.913 回答
1

我的方式是这样的:

  1. tests在您的应用文件夹中创建文件夹
  2. 创建带有测试用例的 py 文件(unit_test.py、functional_test.py 等)
  3. __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
于 2012-08-16T14:53:11.417 回答