[英]Avoid printing of dots
我使用選項-q
運行 pytest 。
不幸的是,這會打印出很多點。 例子:
...................................................................................s...............s...................................ssssss..................................................................................................................................s..............s.........................s..............................................................................................................F....s.s............s.....................s...........................................................................................................................
=================================== FAILURES ===================================
_____________________ TestFoo.test_bar _____________________
Traceback (most recent call last):
(cut)
有沒有辦法避免這個長長的點和“s”字符列表?
更新
有一個有效的答案。 但不知何故,這對我來說太長了。 我現在使用此解決方法:我將其添加到調用 pytest 的腳本中: pytest -q | perl -pe 's/^[.sxFE]{20,}$//g'
pytest -q | perl -pe 's/^[.sxFE]{20,}$//g'
詳細選項無法關閉測試結果打印。 但是, pytest
可以通過多種方式進行自定義,包括結果打印。 要更改此設置,您將覆蓋pytest_report_teststatus
掛鈎。
使用以下內容創建文件conftest.py
:
import pytest
def pytest_report_teststatus(report):
category, short, verbose = '', '', ''
if hasattr(report, 'wasxfail'):
if report.skipped:
category = 'xfailed'
verbose = 'xfail'
elif report.passed:
category = 'xpassed'
verbose = ('XPASS', {'yellow': True})
return (category, short, verbose)
elif report.when in ('setup', 'teardown'):
if report.failed:
category = 'error'
verbose = 'ERROR'
elif report.skipped:
category = 'skipped'
verbose = 'SKIPPED'
return (category, short, verbose)
category = report.outcome
verbose = category.upper()
return (category, short, verbose)
現在運行測試不會打印任何簡短的結果字母 ( .sxFE
)。 代碼有點冗長,但處理框架中定義的所有標准結果。
在詳細模式下運行時, pytest
打印結果以及測試用例名稱:
$ pytest -sv
=================================== test session starts ===================================
...
test_spam.py::test_spam PASSED
test_spam.py::test_eggs FAILED
test_spam.py::test_bacon SKIPPED
test_spam.py::test_foo xfail
...
如果您從上面的鈎子 impl 中刪除設置verbose
的行(將其設置為空字符串), pytest
還將停止在詳細模式下打印結果:
import pytest
def pytest_report_teststatus(report):
category, short, verbose = '', '', ''
if hasattr(report, 'wasxfail'):
if report.skipped:
category = 'xfailed'
elif report.passed:
category = 'xpassed'
return (category, short, verbose)
elif report.when in ('setup', 'teardown'):
if report.failed:
category = 'error'
elif report.skipped:
category = 'skipped'
return (category, short, verbose)
category = report.outcome
return (category, short, verbose)
$ pytest -sv
=================================== test session starts ===================================
...
test_spam.py::test_spam
test_spam.py::test_eggs
test_spam.py::test_bacon
test_spam.py::test_foo
...
當從命令行傳遞--silent
標志時,以下示例將關閉打印簡短和詳細的結果:
import pytest
def pytest_addoption(parser):
parser.addoption('--silent', action='store_true', default=False)
def pytest_report_teststatus(report, config):
category, short, verbose = '', '', ''
if not config.getoption('--silent'):
return None
if hasattr(report, 'wasxfail'):
if report.skipped:
category = 'xfailed'
elif report.passed:
category = 'xpassed'
return (category, short, verbose)
elif report.when in ('setup', 'teardown'):
if report.failed:
category = 'error'
elif report.skipped:
category = 'skipped'
return (category, short, verbose)
category = report.outcome
return (category, short, verbose)
使用我的插件pytest-custom-report
您可以通過為報告使用空字符串標記輕松抑制這些點。
pip install pytest-custom-report
pytest -q --report-passed=""
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.