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