簡體   English   中英

在測試套件末尾運行慢速 Pytest 命令

[英]Run slow Pytest commands at the end of the test suite

假設我有以下 pytest 腳本:

import pytest

def test_one():
    pass

def test_two():
    pass

@pytest.mark.slow
def test_three():
    pass

是否有一個命令可以用來最后運行slow標記的所有測試? 我知道我可以使用兩個 pytest 命令執行此操作,但使用單個命令執行此操作會很棒:

pytest -v -m "not slow"
# test_markers.py::test_one PASSED                                                                                                                    
# test_markers.py::test_two PASSED

pytest -v -m slow
# test_markers.py::test_three PASSED

您可以添加對收集的測試的自定義排序,並將帶有slow標記的項目放在最后。 將以下代碼放入項目或測試根目錄的文件conftest.py中:

from _pytest.mark import Mark


empty_mark = Mark('', [], {})


def by_slow_marker(item):
    return item.get_closest_marker('slow', default=empty_mark)


def pytest_collection_modifyitems(items):
    items.sort(key=by_slow_marker, reverse=True)

這會將具有slow標記的項目放在收集的測試序列的末尾。 如果要打開和關閉此功能,請添加自定義命令行標志:

def pytest_addoption(parser):
    parser.addoption('--slow-last', action='store_true', default=False)


def pytest_collection_modifyitems(items, config):
    if config.getoption('--slow-last'):
        items.sort(key=by_slow_marker, reverse=True)

運行pytest --slow-last現在將使用這些項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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