| 
10 | 10 | import re  | 
11 | 11 | import sys  | 
12 | 12 | import time  | 
 | 13 | +import uuid  | 
13 | 14 | import warnings  | 
14 | 15 | from pathlib import Path  | 
15 | 16 | from typing import TYPE_CHECKING, Any, Callable  | 
16 |  | -from unittest import TestCase  | 
 | 17 | +from unittest import TestCase, mock  | 
17 | 18 | 
 
  | 
18 | 19 | # PyTest Imports  | 
19 | 20 | import pytest  | 
20 | 21 | from pluggy import HookspecMarker  | 
21 | 22 | 
 
  | 
22 | 23 | if TYPE_CHECKING:  | 
 | 24 | +    from collections.abc import Generator  | 
 | 25 | + | 
23 | 26 |     from _pytest.config import Config, Parser  | 
24 | 27 |     from _pytest.main import Session  | 
25 | 28 |     from _pytest.python import Metafunc  | 
@@ -138,6 +141,29 @@ def pytest_configure(config: Config) -> None:  | 
138 | 141 |     config.pluginmanager.register(PytestLoops(config), PytestLoops.name)  | 
139 | 142 | 
 
  | 
140 | 143 | 
 
  | 
 | 144 | +@pytest.fixture(scope="session", autouse=True)  | 
 | 145 | +def deterministic_environment() -> Generator[None, None, None]:  | 
 | 146 | +    with (  | 
 | 147 | +        mock.patch.multiple(  | 
 | 148 | +            "time",  | 
 | 149 | +            time=mock.MagicMock(return_value=1750778657.008457),  | 
 | 150 | +            monotonic=mock.MagicMock(side_effect=[1.0, 2.0, 3.0]),  | 
 | 151 | +        ),  | 
 | 152 | +        mock.patch.multiple("random", random=mock.MagicMock(return_value=0.5), randint=mock.MagicMock(return_value=42)),  | 
 | 153 | +        mock.patch.multiple(  | 
 | 154 | +            "uuid",  | 
 | 155 | +            uuid1=mock.MagicMock(return_value=uuid.UUID("8f9b1416-5117-11f0-a1b5-c0b5d70a98e7")),  | 
 | 156 | +            uuid4=mock.MagicMock(return_value=uuid.UUID("81d8c509-bdc7-4fe8-b29d-ed3fdc7eacba")),  | 
 | 157 | +        ),  | 
 | 158 | +        mock.patch(  | 
 | 159 | +            "time.sleep",  | 
 | 160 | +            return_value=None,  # ignore sleep calls  | 
 | 161 | +        ),  | 
 | 162 | +        mock.patch("time.perf_counter", return_value=123.456),  | 
 | 163 | +    ):  | 
 | 164 | +        yield  | 
 | 165 | + | 
 | 166 | + | 
141 | 167 | class PytestLoops:  | 
142 | 168 |     name: str = "pytest-loops"  | 
143 | 169 | 
 
  | 
 | 
0 commit comments