58 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
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
 |