Greetings Python superstars, I've a directory structure like following
tests / __init__.py testfile.py testfile.py contains following code import unittest class Calculator(unittest.TestCase): def test_add(self): print 'just add' def test_divide(self): print 'diviide' def test_multiply(self): print 'mul' class Car(unittest.TestCase): def test_start(self): print 'start' def test_move_right(self): print 'move right' def test_move_left(self): print 'move left' def test_stop(self): print 'stop' Now give the following user-input I want to get all test-names. user-input = tests.testfile (get all test-names from all unittest.TestCase derived classes in test.testfile) user-input = tests.testfile.Car (get all test-names from the Car class) user-input = tests.testfile.Cacr.test_stop and I'm doing it this the following way and I really think there has to be more readable, more pythonic and more possibly short way to do it import unittest import sys import inspect def get_test_names(full_name,module): name = full_name.split('.') loader = unittest.TestLoader() if len(name) == 4: return full_name elif len(name) == 3: exec "from %s.%s import %s" %(module,name[1],name[2]) return loader.getTestCaseNames(eval(name[2])) elif len(name) == 2: exec 'from %s import %s' % (module,name[1]) tests = [] for _name, obj in inspect.getmembers(sys.modules[full_name]): if inspect.isclass(obj) and issubclass(obj,unittest.TestCase): exec "from %s.%s import %s" % (module,name[1],obj.__name__) tests.append(loader.getTestCaseNames(obj)) return tests if __name__ == "__main__": input = "tests.testfile" module = input.split('.')[0] _tests = get_test_names(input,module) print _tests So guys, can you kindly point me to a more Pythonic, more readable and possible more short way to acheive this? I will really appreciate any help. Many thanks in advance. Best regards, Oltmans -- http://mail.python.org/mailman/listinfo/python-list