@@ -124,15 +124,7 @@ def get_marks(self):
124
124
Overrides default implementation to return the marks that are on the case function
125
125
:return:
126
126
"""
127
- try :
128
- return self .f .pytestmark
129
- except AttributeError :
130
- try :
131
- # old pytest < 3: marks are set as fields on the function object
132
- # but they do not have a particulat type, their type is 'instance'...
133
- return [v for v in self .f .func_dict .values () if str (v ).startswith ("<MarkInfo '" )]
134
- except AttributeError :
135
- return []
127
+ return get_pytest_marks_on_case_func (self .f )
136
128
137
129
def get (self , * args , ** kwargs ):
138
130
# type: (...) -> Union[CaseData, Any]
@@ -144,6 +136,24 @@ def get(self, *args, **kwargs):
144
136
return self .f (* args , ** kwargs )
145
137
146
138
139
+ def get_pytest_marks_on_case_func (f ):
140
+ """
141
+ Utility to return all pytest marks applied on a case function
142
+
143
+ :param f:
144
+ :return:
145
+ """
146
+ try :
147
+ return f .pytestmark
148
+ except AttributeError :
149
+ try :
150
+ # old pytest < 3: marks are set as fields on the function object
151
+ # but they do not have a particulat type, their type is 'instance'...
152
+ return [v for v in vars (f ).values () if str (v ).startswith ("<MarkInfo '" )]
153
+ except AttributeError :
154
+ return []
155
+
156
+
147
157
CASE_PREFIX = 'case_'
148
158
"""Prefix used by default to identify case functions within a module"""
149
159
@@ -506,11 +516,10 @@ def datasets_decorator(test_func):
506
516
# Compatibility for the way we put marks on single parameters in the list passed to @pytest.mark.parametrize
507
517
try :
508
518
_ = pytest .param
509
- def mark_unitary_case ( c ):
510
- return pytest .param (c , marks = c . get_marks () )
519
+ def get_marked_parameter_for_case ( c , marks ):
520
+ return pytest .param (c , marks = marks )
511
521
except AttributeError :
512
- def mark_unitary_case (c ):
513
- marks = c .get_marks ()
522
+ def get_marked_parameter_for_case (c , marks ):
514
523
if len (marks ) > 1 :
515
524
raise ValueError ("Multiple marks on parameters not supported for old versions of pytest" )
516
525
else :
@@ -567,7 +576,7 @@ def get_all_cases(cases=None, # type: Union[Callable[[Any], Any],
567
576
_cases = extract_cases_from_module (m , has_tag = has_tag , filter = filter )
568
577
569
578
# create the pytest parameters to handle pytest marks
570
- _cases = [c if len (c .get_marks ()) == 0 else mark_unitary_case ( c ) for c in _cases ]
579
+ _cases = [c if len (c .get_marks ()) == 0 else get_marked_parameter_for_case ( c , marks = c . get_marks () ) for c in _cases ]
571
580
572
581
return _cases
573
582
0 commit comments