1+ import random
12import sys
23import traceback
34
@@ -14,18 +15,34 @@ def pytest_addoption(parser):
1415 choices = ('global' , 'package' , 'module' , 'class' ),
1516 help = 'Limit reordering of test items across units of code' ,
1617 )
18+ group .addoption (
19+ '--random-order-seed' ,
20+ action = 'store' ,
21+ dest = 'random_order_seed' ,
22+ default = None ,
23+ help = 'Seed for the test order randomiser to produce a random order that can be reproduced using this seed' ,
24+ )
1725
1826
1927def pytest_configure (config ):
2028 config .addinivalue_line ("markers" , "random_order(disabled=True): disable reordering of tests within a module or class" )
2129
30+ if config .getoption ('random_order_seed' ):
31+ seed = str (config .getoption ('random_order_seed' ))
32+ else :
33+ seed = str (random .randint (1 , 1000000 ))
34+ config .random_order_seed = seed
35+
2236
2337def pytest_report_header (config ):
24- out = None
38+ out = ''
2539
2640 if config .getoption ('random_order_bucket' ):
2741 bucket = config .getoption ('random_order_bucket' )
28- out = "Using --random-order-bucket={0}" .format (bucket )
42+ out += "Using --random-order-bucket={}\n " .format (bucket )
43+
44+ if hasattr (config , 'random_order_seed' ):
45+ out += 'Using --random-order-seed={}\n ' .format (getattr (config , 'random_order_seed' ))
2946
3047 return out
3148
@@ -36,8 +53,9 @@ def pytest_collection_modifyitems(session, config, items):
3653 item_ids = _get_set_of_item_ids (items )
3754
3855 try :
56+ seed = getattr (config , 'random_order_seed' , None )
3957 bucket_type = config .getoption ('random_order_bucket' )
40- _shuffle_items (items , bucket_key = _random_order_item_keys [bucket_type ], disable = _disable )
58+ _shuffle_items (items , bucket_key = _random_order_item_keys [bucket_type ], disable = _disable , seed = seed )
4159
4260 except Exception as e :
4361 # See the finally block -- we only fail if we have lost user's tests.
0 commit comments