2011-11-01 53 views
0

我有這個目錄結構。 在我的項目根目錄下,我有一個主要的python文件,說main.py。在這個根目錄中還有一個名爲Tests的文件夾。這個測試文件夾將有一系列的測試文件(只在運行時已知),例如test1.py,test2.py等... 在我testfiles如Test1.py我有這種結構:從導入的python文件調用方法

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  
+1

目前尚不清楚你的代碼是什麼意思。 「class Test1」的相關性是什麼? TestFunction()是這個類的一個方法嗎?它畢竟有一個'self'參數,但不是縮進的。但是,再次,您在第二個代碼片段中調用'x.TestFunction()',就好像'TestFunction()'是一個模塊級函數。任何澄清都會很好。 –

+0

@Sven我有改進的格式和增加信息每個測試文件都有一個類,在文件的名稱後命名。例如,test1.py有一個名爲Test1的類,test2.py具有Test2等。TestFunction是一種方法class Test1 –

回答

1

從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

你可以解釋一下它的作用:如果isinstance(obj,type)和issubclass(obj,TestBase.TestBase): test = obj() –

+0

這測試'obj'是否是'TestBase'的子類,if它是,創建該類的一個實例。 –

+0

只是爲了確認是否理解正確isinstance(obj,type)檢查obj是否爲'class'類型。在我們的例子中,它將檢查Test1是否是類的類型,以及是否從TestBase –

0

林不知道如何ü要在運行時添加測試文件..我會嘗試這個,

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

您可以使用系統調用來發現沒有測試文件在運行時可用。然後嘗試使用for循環導入它們,如上所示。

0

我認爲你需要做這樣的事情 如果testfilename在/測試/ DIR

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

讓我知道,如果它