什么 Django TEST_RUNNER 支持 xunit xml 和日志捕获?

rob*_*bru 6 django django-testing

我试图建立一个新的Django项目,我已经配置TEST_RUNNERsettings.pydjango_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
Run Code Online (Sandbox Code Playgroud)

在 settings.py 中有这个:

TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
Run Code Online (Sandbox Code Playgroud)

而这个 setup.cfg:

[nosetests]
verbosity=0
with-xunit=1
xunit-file=./reports/xunit.xml
logging-clear-handlers=1
Run Code Online (Sandbox Code Playgroud)

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

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

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

Juu*_*nen 6

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

TEST_RUNNER = 'xmlrunner.extra.djangotestrunner.XMLTestRunner'
Run Code Online (Sandbox Code Playgroud)

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


小智 5

您仍然可以使用鼻子跑步者:

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',
]
Run Code Online (Sandbox Code Playgroud)


rob*_*bru 2

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

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
Run Code Online (Sandbox Code Playgroud)

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

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