2013-10-03 3 views
0

У меня есть unittest, который проверяет соединение URL-адреса. Индивидуально это работает, но у меня есть несколько URL-адресов для тестирования, поэтому я пытаюсь вызвать этот тестовый модуль и протестировать их! Но я получаю ошибки при вызове тестовой функции. Не могли бы вы помочь мне?Пакетные тесты (unittest) в Python

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

Ваш метод тестирования игнорируется, потому что он принимает аргумент. Методы испытаний never принять аргумент. Это совершенно не связано с тем, что Python никогда не сможет магическим образом передать имя локальной переменной в функцию в качестве аргумента; Вы должны были бы явно передать его в

Интегрировать URL-адрес загрузку в самом тест вместо:.

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

Спасибо большое, это лучший вариант! Хотя метод полосы не работал, он работал с линиями чтения. Спасибо, Спасибо! – Marromenu

+0

@ user2729527: извините, в этом была небольшая ошибка. –

Смежные вопросы