golden hour
/opt/cloudlinux/venv/lib/python3.11/site-packages/_pytest
⬆️ Go Up
Upload
File/Folder
Size
Actions
__init__.py
356 B
Del
OK
__pycache__
-
Del
OK
_argcomplete.py
3.71 KB
Del
OK
_code
-
Del
OK
_io
-
Del
OK
_py
-
Del
OK
_version.py
160 B
Del
OK
assertion
-
Del
OK
cacheprovider.py
20.89 KB
Del
OK
capture.py
33.92 KB
Del
OK
compat.py
12.89 KB
Del
OK
config
-
Del
OK
debugging.py
13.18 KB
Del
OK
deprecated.py
5.36 KB
Del
OK
doctest.py
25.35 KB
Del
OK
faulthandler.py
3.04 KB
Del
OK
fixtures.py
65.51 KB
Del
OK
freeze_support.py
1.31 KB
Del
OK
helpconfig.py
8.34 KB
Del
OK
hookspec.py
31.79 KB
Del
OK
junitxml.py
25.11 KB
Del
OK
legacypath.py
16.53 KB
Del
OK
logging.py
33.23 KB
Del
OK
main.py
31.73 KB
Del
OK
mark
-
Del
OK
monkeypatch.py
14.51 KB
Del
OK
nodes.py
25.94 KB
Del
OK
nose.py
1.65 KB
Del
OK
outcomes.py
10.02 KB
Del
OK
pastebin.py
3.86 KB
Del
OK
pathlib.py
25.22 KB
Del
OK
py.typed
0 B
Del
OK
pytester.py
60.52 KB
Del
OK
pytester_assertions.py
2.27 KB
Del
OK
python.py
69.49 KB
Del
OK
python_api.py
37.5 KB
Del
OK
python_path.py
709 B
Del
OK
recwarn.py
10.67 KB
Del
OK
reports.py
20.35 KB
Del
OK
runner.py
18.01 KB
Del
OK
scope.py
2.81 KB
Del
OK
setuponly.py
3.18 KB
Del
OK
setupplan.py
1.19 KB
Del
OK
skipping.py
9.96 KB
Del
OK
stash.py
2.98 KB
Del
OK
stepwise.py
4.6 KB
Del
OK
terminal.py
52.25 KB
Del
OK
threadexception.py
2.85 KB
Del
OK
timing.py
375 B
Del
OK
tmpdir.py
11.43 KB
Del
OK
unittest.py
14.46 KB
Del
OK
unraisableexception.py
3.12 KB
Del
OK
warning_types.py
4.37 KB
Del
OK
warnings.py
4.95 KB
Del
OK
Edit: stepwise.py
from typing import List from typing import Optional from typing import TYPE_CHECKING import pytest from _pytest import nodes from _pytest.config import Config from _pytest.config.argparsing import Parser from _pytest.main import Session from _pytest.reports import TestReport if TYPE_CHECKING: from _pytest.cacheprovider import Cache STEPWISE_CACHE_DIR = "cache/stepwise" def pytest_addoption(parser: Parser) -> None: group = parser.getgroup("general") group.addoption( "--sw", "--stepwise", action="store_true", default=False, dest="stepwise", help="Exit on test failure and continue from last failing test next time", ) group.addoption( "--sw-skip", "--stepwise-skip", action="store_true", default=False, dest="stepwise_skip", help="Ignore the first failing test but stop on the next failing test. " "Implicitly enables --stepwise.", ) @pytest.hookimpl def pytest_configure(config: Config) -> None: if config.option.stepwise_skip: # allow --stepwise-skip to work on it's own merits. config.option.stepwise = True if config.getoption("stepwise"): config.pluginmanager.register(StepwisePlugin(config), "stepwiseplugin") def pytest_sessionfinish(session: Session) -> None: if not session.config.getoption("stepwise"): assert session.config.cache is not None if hasattr(session.config, "workerinput"): # Do not update cache if this process is a xdist worker to prevent # race conditions (#10641). return # Clear the list of failing tests if the plugin is not active. session.config.cache.set(STEPWISE_CACHE_DIR, []) class StepwisePlugin: def __init__(self, config: Config) -> None: self.config = config self.session: Optional[Session] = None self.report_status = "" assert config.cache is not None self.cache: Cache = config.cache self.lastfailed: Optional[str] = self.cache.get(STEPWISE_CACHE_DIR, None) self.skip: bool = config.getoption("stepwise_skip") def pytest_sessionstart(self, session: Session) -> None: self.session = session def pytest_collection_modifyitems( self, config: Config, items: List[nodes.Item] ) -> None: if not self.lastfailed: self.report_status = "no previously failed tests, not skipping." return # check all item nodes until we find a match on last failed failed_index = None for index, item in enumerate(items): if item.nodeid == self.lastfailed: failed_index = index break # If the previously failed test was not found among the test items, # do not skip any tests. if failed_index is None: self.report_status = "previously failed test not found, not skipping." else: self.report_status = f"skipping {failed_index} already passed items." deselected = items[:failed_index] del items[:failed_index] config.hook.pytest_deselected(items=deselected) def pytest_runtest_logreport(self, report: TestReport) -> None: if report.failed: if self.skip: # Remove test from the failed ones (if it exists) and unset the skip option # to make sure the following tests will not be skipped. if report.nodeid == self.lastfailed: self.lastfailed = None self.skip = False else: # Mark test as the last failing and interrupt the test session. self.lastfailed = report.nodeid assert self.session is not None self.session.shouldstop = ( "Test failed, continuing from this test next run." ) else: # If the test was actually run and did pass. if report.when == "call": # Remove test from the failed ones, if exists. if report.nodeid == self.lastfailed: self.lastfailed = None def pytest_report_collectionfinish(self) -> Optional[str]: if self.config.getoption("verbose") >= 0 and self.report_status: return f"stepwise: {self.report_status}" return None def pytest_sessionfinish(self) -> None: if hasattr(self.config, "workerinput"): # Do not update cache if this process is a xdist worker to prevent # race conditions (#10641). return self.cache.set(STEPWISE_CACHE_DIR, self.lastfailed)
Save