mirror of
https://github.com/scylladb/scylladb.git
synced 2026-04-20 00:20:47 +00:00
Add skip_reason_plugin.py — a framework-agnostic pytest plugin that provides typed skip markers (skip_bug, skip_not_implemented, skip_slow, skip_env) so that the reason a test is skipped is machine-readable in JUnit XML and Allure reports. Bare untyped pytest.mark.skip now triggers a warning (to become an error after full migration). Runtime skips via skip() are also enriched by parsing the [type] prefix from the skip message. The plugin is a class (SkipReasonPlugin) that receives the concrete SkipType enum and an optional report_callback from conftest.py, keeping it decoupled from allure and project-specific types. Extract SkipType enum and convenience runtime skip wrappers (skip_bug, skip_env, etc.) into test/pylib/skip_types.py so callers only need a single import instead of importing both SkipType and skip() separately. conftest.py imports SkipType from the new module and registers the plugin instance unconditionally (for all test runners). New files: - test/pylib/skip_reason_plugin.py: core plugin — typed marker processing, bare-skip warnings, JUnit/Allure report enrichment (including runtime skip() parsing via _parse_skip_type helper) - test/pylib/skip_types.py: SkipType enum and convenience wrappers (skip_bug, skip_not_implemented, skip_slow, skip_env) - test/pylib_test/test_skip_reason_plugin.py: 17 pytester-based test functions (51 cases across 3 build modes) covering markers, warnings, reports, callbacks, and skip_mode interaction Infrastructure changes: - test/conftest.py: import SkipType from skip_types, register SkipReasonPlugin with allure report callback - test/pylib/runner.py: set SKIP_TYPE_KEY/SKIP_REASON_KEY stash keys for skip_mode so the report hook can enrich JUnit/Allure with skip_type=mode without longrepr parsing - test/pytest.ini: register typed marker definitions (required for --strict-markers even when plugin is not loaded) Migrated test files (representative samples): - test/cluster/test_tablet_repair_scheduler.py: skip -> skip_bug (#26844), skip -> skip_not_implemented - test/cqlpy/.../timestamp_test.py: skip -> skip_slow - test/cluster/dtest/schema_management_test.py: skip -> skip_not_implemented - test/cluster/test_change_replication_factor_1_to_0.py: skip -> skip_bug (#20282) - test/alternator/conftest.py: skip -> skip_env - test/alternator/test_https.py: use skip_env() wrapper Fixes SCYLLADB-79 Closes scylladb/scylladb#29235
35 lines
943 B
Python
35 lines
943 B
Python
#
|
|
# Copyright (C) 2024-present ScyllaDB
|
|
#
|
|
# SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0
|
|
#
|
|
|
|
import allure
|
|
import pytest
|
|
|
|
from test import TEST_RUNNER
|
|
from test.pylib.report_plugin import ReportPlugin
|
|
from test.pylib.skip_reason_plugin import SkipReasonPlugin
|
|
from test.pylib.skip_types import SkipType
|
|
|
|
|
|
pytest_plugins = []
|
|
|
|
if TEST_RUNNER == "runpy":
|
|
@pytest.fixture(scope="session")
|
|
def testpy_test() -> None:
|
|
return None
|
|
else:
|
|
pytest_plugins.append("test.pylib.runner")
|
|
|
|
|
|
def pytest_configure(config: pytest.Config) -> None:
|
|
config.pluginmanager.register(ReportPlugin())
|
|
|
|
def _allure_report(skip_type: str, reason: str) -> None:
|
|
"""Enrich Allure reports with skip type metadata."""
|
|
allure.dynamic.tag(f"skip_type:{skip_type}")
|
|
allure.dynamic.label("skip_type", skip_type)
|
|
|
|
config.pluginmanager.register(SkipReasonPlugin(SkipType, report_callback=_allure_report))
|