2013-10-03 65 views
0

我有一個unittest測試一個url的連接。單獨使用它,但我有幾個測試網址,所以我試圖調用這個測試模塊並批量測試它們!但是我在調​​用測試函數時遇到錯誤。你可以幫幫我嗎?Python中的批量測試(unittest)

test.py:

class TestConnector(unittest.TestCase): 

    def setUp(self): 
     [...] 

    def test_connection(self, url): 
     conn = Connector(self.user) 
     self.assertNotEqual(conn.read(url), None) 

if __name__ == '__main__': 
    unittest.main() 

現在我想測試多個URL,所以我創建的文件他們,並試圖調用測試功能:

import test 

with open('URL_list.txt') as f: 
    urls = f.readlines() 

suite = unittest.TestLoader().loadTestsFromModule(test.TestConnector) 

for url in urls: 
    unittest.TextTestRunner().run(suite) 

,我得到這個消息與我擁有的網址一樣多:

---------------------------------------------------------------------- 
Ran 0 tests in 0.000s 

OK 

---------------------------------------------------------------------- 

怎麼了?

+0

你如何指望測試跑步者猜測你想把局部變量'url'傳遞給測試函數? –

+0

好吧,我明白了,我以前嘗試過不同的版本,但我只是不知道如何。 – Marromenu

回答

3

您的測試方法因爲需要參數而被忽略。測試方法從不採取論據。這與Python不會將魔術般地將局部變量名稱作爲參數傳遞給函數這一事實完全不同;你必須明確地傳遞它

整合您的網址加載到測試本身,而不是:

class TestConnector(unittest.TestCase): 

    def setUp(self): 
     [...] 

    def test_connections(self): 

     with open('URL_list.txt') as f: 
      for url in f: 
       conn = Connector(self.user) 
       self.assertNotEqual(conn.read(url.strip()), None) 

if __name__ == '__main__': 
    unittest.main() 

或動態創建的測試方法:

class TestConnector(unittest.TestCase): 
    def setUp(self): 
     [...] 

def generate_test(url): 
    def test(self): 
     conn = Connector(self.user) 
     self.assertNotEqual(conn.read(url), None) 

if __name__ == '__main__': 
    with open('URL_list.txt') as f: 
     for i, url in enumerate(f): 
      test_name = 'test_{}'.format(i) 
      setattr(TestConnector, test_name, generate_test(url.strip())) 

    unittest.main() 
+0

非常感謝,是一個更好的選擇! 雖然strip方法不起作用,但它可以讀取線條。 謝謝謝謝謝謝! – Marromenu

+0

@ user2729527:對不起,其中有一個小錯誤。 –

相關問題