| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- # -*- coding: utf-8 -*-
- import sys
- import pytest
- if sys.gettrace():
- @pytest.fixture(autouse=True)
- def restore_tracing():
- """Restore tracing function (when run with Coverage.py).
- https://bugs.python.org/issue37011
- """
- orig_trace = sys.gettrace()
- yield
- if sys.gettrace() != orig_trace:
- sys.settrace(orig_trace)
- @pytest.hookimpl(hookwrapper=True, tryfirst=True)
- def pytest_collection_modifyitems(config, items):
- """Prefer faster tests.
- Use a hookwrapper to do this in the beginning, so e.g. --ff still works
- correctly.
- """
- fast_items = []
- slow_items = []
- slowest_items = []
- neutral_items = []
- spawn_names = {"spawn_pytest", "spawn"}
- for item in items:
- try:
- fixtures = item.fixturenames
- except AttributeError:
- # doctest at least
- # (https://github.com/pytest-dev/pytest/issues/5070)
- neutral_items.append(item)
- else:
- if "testdir" in fixtures:
- if spawn_names.intersection(item.function.__code__.co_names):
- item.add_marker(pytest.mark.uses_pexpect)
- slowest_items.append(item)
- else:
- slow_items.append(item)
- item.add_marker(pytest.mark.slow)
- else:
- marker = item.get_closest_marker("slow")
- if marker:
- slowest_items.append(item)
- else:
- fast_items.append(item)
- items[:] = fast_items + neutral_items + slow_items + slowest_items
- yield
|