in azdev/operations/testtool/__init__.py [0:0]
def _discover_module_tests(mod_name, mod_data):
# get the list of test files in each module
total_tests = 0
total_files = 0
logger.info('Mod: %s', mod_name)
try:
contents = os.listdir(mod_data['filepath'])
test_files = {
x[:-len('.py')]: {} for x in contents if x.startswith('test_') and x.endswith('.py')
}
total_files = len(test_files)
except FileNotFoundError:
logger.info(' No test files found.')
return None
for file_name in test_files:
mod_data['files'][file_name] = {}
test_file_path = mod_data['base_path'] + '.' + file_name
try:
module = import_module(test_file_path)
except ImportError as ex:
logger.info(' %s', ex)
continue
module_dict = module.__dict__
possible_test_classes = {x: y for x, y in module_dict.items() if not x.startswith('_')}
for class_name, class_def in possible_test_classes.items():
try:
class_dict = class_def.__dict__
except AttributeError:
# skip non-class symbols in files like constants, imported methods, etc.
continue
if class_dict.get('__module__') == test_file_path:
tests = [x for x in class_def.__dict__ if x.startswith('test_')]
if tests:
mod_data['files'][file_name][class_name] = tests
total_tests += len(tests)
logger.info(' %s tests found in %s files.', total_tests, total_files)
return mod_data