2013-10-03 87 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:对不起,其中有一个小错误。 –

相关问题