43 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
| # -*- coding: utf-8 -*-
 | |
| import pytest
 | |
| 
 | |
| 
 | |
| @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)
 | |
|             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
 |