簡體   English   中英

避免打印點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM