【问题标题】:What Django TEST_RUNNER supports xunit xml and logging capture?什么 Django TEST_RUNNER 支持 xunit xml 和日志捕获?
【发布时间】:2017-10-02 18:57:22
【问题描述】:

我正在尝试建立一个新的 django 项目,并且我已将 settings.py 中的 TEST_RUNNER 配置为 django_nose.NoseTestSuiteRunner

我选择了这个测试运行器,因为它似乎是我能找到的唯一一个具有以下功能的运行器:

  • 编写 xunit xml 测试报告
  • 捕获日志记录/标准输出并仅显示失败的测试。

但是我听说鼻子没有维护,我很难找到合适的替代品。据我所知,标准测试运行程序不会捕获日志记录,也不会写入 xunit(希望被证明是错误的!)

我像这样运行测试:

python -m coverage run manage.py test --noinput
python -m coverage report --include="app/*" --show-missing --fail-under=100
python -m coverage xml --include="app/*" -o ./reports/coverage.xml

在 settings.py 中有这个:

TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'

还有这个 setup.cfg:

[nosetests]
verbosity=0
with-xunit=1
xunit-file=./reports/xunit.xml
logging-clear-handlers=1

最后两行是我在其他测试运行程序中找不到的真正有趣的部分。鼻子捕获日志并清除其他日志处理程序(例如,转储到标准输出的处理程序),因此测试运行输出更清晰(您只会看到失败测试的日志记录)。

在其他非 django 项目中,我通常使用nose2,但 django-nose2 项目似乎已有 6 年历史并且缺乏 python3 支持??

请让我知道哪个测试运行器是“推荐”的(例如,最受欢迎的),支持 django,谢谢。

【问题讨论】:

    标签: django django-testing


    【解决方案1】:

    我在 unittest-xml-reporting 方面取得了成功:

    TEST_RUNNER = 'xmlrunner.extra.djangotestrunner.XMLTestRunner'
    

    https://github.com/xmlrunner/unittest-xml-reporting#django-support

    可以使用TEST_OUTPUT_DIR 设置配置输出目录。

    【讨论】:

    • 有没有办法定义用于报告的文件夹?
    • 没关系,在您发布的链接中找到它TEST_OUTPUT_DIR,谢谢
    【解决方案2】:

    你仍然可以使用鼻子转轮:

    INSTALLED_APPS += ['django_nose']
    TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
    NOSE_ARGS = [
        '--with-xunit',
        '--xunit-file=nosetests.xml',
        '--with-coverage',
        '--cover-erase',
        '--cover-xml',
        '--cover-xml-file=nosecover.xml',
    ]
    

    【讨论】:

      【解决方案3】:

      所以pytest 产生了一些非常好的测试输出。我在 settings.py 中取消设置 TEST_RUNNER 并将我的测试脚本更改为:

      python -m coverage run -m pytest --junitxml=./reports/junit.xml
      python -m coverage report --include="app/*" --show-missing --fail-under=100
      python -m coverage xml --include="app/*" -o ./reports/coverage.xml
      

      这很有效,并捕获了所有日志输出(鼻子有点问题,让一两个日志语句溜走,非常奇怪的行为)。

      唯一的问题是我是 django 新手,所以我不知道不使用 manage.py test 测试 django 是否有任何不良副作用。感谢任何指导,谢谢!

      【讨论】:

      • 我尝试按照您的指示进行操作,但它不起作用 - 我认为您可能需要做一些其他事情才能真正让这一切正常工作。
      猜你喜欢
      • 2012-11-11
      • 2023-03-25
      • 2013-08-22
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多