1- import pytest
21import argparse
3- from six import text_type
42
53import allure
64import allure_commons
@@ -21,13 +19,15 @@ def pytest_addoption(parser):
2119 default = None ,
2220 help = "Generate Allure report in the specified directory (may not exist)" )
2321
24- def label_type (name , legal_values = set ()):
22+ def label_type (type_name , legal_values = set ()):
2523 def a_label_type (string ):
2624 atoms = set (string .split (',' ))
27- if legal_values and not atoms < legal_values :
28- raise argparse .ArgumentTypeError ('Illegal {} values: {}, only [{}] are allowed' .format (
29- name , ', ' .join (atoms - legal_values ), ', ' .join (legal_values )))
30- return set ((name .value , atom ) for atom in atoms )
25+ if type_name is LabelType .SEVERITY :
26+ if not atoms < legal_values :
27+ raise argparse .ArgumentTypeError ('Illegal {} values: {}, only [{}] are allowed' .format (
28+ type_name , ', ' .join (atoms - legal_values ), ', ' .join (legal_values )))
29+ return set ((type_name , allure .severity_level (atom )) for atom in atoms )
30+ return set ((type_name , atom ) for atom in atoms )
3131 return a_label_type
3232
3333 severities = [x .value for x in list (allure .severity_level )]
@@ -36,7 +36,7 @@ def a_label_type(string):
3636 dest = "allure_severities" ,
3737 metavar = "SEVERITIES_SET" ,
3838 default = {},
39- type = label_type (name = LabelType .SEVERITY , legal_values = set (severities )),
39+ type = label_type (LabelType .SEVERITY , legal_values = set (severities )),
4040 help = """Comma-separated list of severity names.
4141 Tests only with these severities will be run.
4242 Possible values are: %s.""" % ', ' .join (severities ))
@@ -46,7 +46,7 @@ def a_label_type(string):
4646 dest = "allure_epics" ,
4747 metavar = "EPICS_SET" ,
4848 default = {},
49- type = label_type (name = LabelType .EPIC ),
49+ type = label_type (LabelType .EPIC ),
5050 help = """Comma-separated list of epic names.
5151 Run tests that have at least one of the specified feature labels.""" )
5252
@@ -55,7 +55,7 @@ def a_label_type(string):
5555 dest = "allure_features" ,
5656 metavar = "FEATURES_SET" ,
5757 default = {},
58- type = label_type (name = LabelType .FEATURE ),
58+ type = label_type (LabelType .FEATURE ),
5959 help = """Comma-separated list of feature names.
6060 Run tests that have at least one of the specified feature labels.""" )
6161
@@ -64,7 +64,7 @@ def a_label_type(string):
6464 dest = "allure_stories" ,
6565 metavar = "STORIES_SET" ,
6666 default = {},
67- type = label_type (name = LabelType .STORY ),
67+ type = label_type (LabelType .STORY ),
6868 help = """Comma-separated list of story names.
6969 Run tests that have at least one of the specified story labels.""" )
7070
@@ -102,15 +102,13 @@ def pytest_configure(config):
102102 allure_commons .register (file_logger )
103103
104104
105- def pytest_runtest_setup (item ):
106- item_labels = set ((name , value ) for name , value in allure_labels (item ))
105+ def pytest_collection_modifyitems (items , config ):
106+ arg_labels = set ().union (config .option .allure_epics ,
107+ config .option .allure_features ,
108+ config .option .allure_stories ,
109+ config .option .allure_severities )
107110
108- arg_labels = set ().union (item .config .option .allure_features ,
109- item .config .option .allure_stories ,
110- item .config .option .allure_severities )
111-
112- if arg_labels and not item_labels & arg_labels :
113- pytest .skip ('Not suitable with selected labels: %s.' % ', ' .join (text_type (l ) for l in sorted (arg_labels )))
111+ items [:] = filter (lambda item : arg_labels & set (allure_labels (item )) if arg_labels else True , items )
114112
115113
116114def pytest_namespace ():
0 commit comments