Вызов метода из импортированного файла Python - PullRequest
0 голосов
/ 01 ноября 2011

У меня есть эта структура каталогов. В корневом каталоге моего проекта у меня есть основной файл python, скажем main.py. Также в этой корневой директории есть папка Tests. Эта тестовая папка будет содержать ряд тестовых файлов (известных только во время выполнения), например, test1.py, test2.py и т. Д. В моих тестовых файлах, например, Test1.py, у меня есть такая структура:

from  TestBase import TestBase          
class Test1(TestBase):              
    def TestFunction(self):    
        # do_some_stuff

В моем файле main.py я хочу вызвать эту функцию TestFunction (). Как мне это сделать?

     # use sys.path.append() to add Tests directory our path           
     x= import(testfilename)        
     result = x.TestFunction() # something like this method from class in testfilename    

Ответы [ 3 ]

1 голос
/ 01 ноября 2011

Начиная с Python 2.7, необходимые вам функции включены во встроенный модуль unittest.Для более ранних версий Python этот модуль был перенесен в бэкпорт под именем unittest2.

Если по какой-то причине вы хотите выполнить собственное тестовое обнаружение, вот базовый подход:

import glob
import sys
import TestBase
sys.path.append("tests")
for path in glob.iglob("tests/*.py"):
    module = __import__(os.path.basename(path)[:-3])
    for name in dir(module):
        obj = getattr(module, name)
        if isinstance(obj, type) and issubclass(obj, TestBase.TestBase):
            test = obj()
            test.TestFunction()
0 голосов
/ 01 ноября 2011

я думаю, вам нужно сделать что-то подобное, если testfilename находится в / test / dir

m = __import__('test.testfilename')
t = m.Test1()
x = t.TestFunction()

, дайте мне знать, если это работает

0 голосов
/ 01 ноября 2011

Я не уверен, как вы хотите добавить тестовые файлы во время выполнения .. я бы попробовал это,

try: import Test.test1 as t1 test= True; except ImportError: test = False ;

Вы можете использовать системный вызов, чтобы найти недоступный тестовый файл во время выполнения. Затем попробуйте импортировать их, используя цикл for, как показано выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...