diff --git a/common/parameterized.py b/common/parameterized.py index 7cd21bb9c..f36d649da 100644 --- a/common/parameterized.py +++ b/common/parameterized.py @@ -1,8 +1,13 @@ +import re import sys import pytest import inspect +def _to_safe_name(s): + return re.sub(r"[^a-zA-Z0-9_]+", "_", str(s)).strip("_") + + class parameterized: @staticmethod def expand(cases): @@ -34,7 +39,9 @@ def parameterized_class(attrs, input_list=None): def decorator(cls): globs = sys._getframe(1).f_globals for i, params in enumerate(params_list): - name = f"{cls.__name__}_{i}" + # append sanitized string param values so pytest -k can filter by them + suffix = "_".join(filter(None, (_to_safe_name(v) for v in params.values() if isinstance(v, str)))) + name = f"{cls.__name__}_{i}" + (f"_{suffix}" if suffix else "") new_cls = type(name, (cls,), dict(params)) new_cls.__module__ = cls.__module__ new_cls.__test__ = True # override inherited False so pytest collects this subclass