2014-10-19 2 views
0

Я новичок в модульном тестировании. Я хочу написать модульный тест для веб-скребка, который я написал. Мой скребок собирает данные с веб-сайта, который находится на локальном диске, где ввод другой даты дает разные результаты.unittest web scraper in python

У меня есть следующая функция в скрипте.

get_date [returns date mentioned on web page] 
get_product_and_cost [returns product mentioned and their cost] 

Я не уверен, что испытания в этом functions.So пор я написал эту

class SimplisticTest(unittest.TestCase): 

    def setUp(self): 
     data = read_file("path to file") 
     self.soup = BeautifulSoup(data,'html5lib') 

    def test_date(self): 
     self.assertIsInstance(get_date(self.soup), str) 

    def test_date_length(self): 
     self.assertEqual(len(get_date(self.soup)),10) 

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

ответ

2

Обычно, это хорошо, чтобы проверить известный выход из известного входа. В вашем случае вы проверяете тип возвращаемого значения, но было бы еще лучше проверить, соответствует ли возвращаемый объект тому, что вы ожидаете от ввода, и именно там становятся полезными статические тестовые данные (тестовая веб-страница в вашем случае). Вы также можете проверить исключения с self.assertRaises (ExceptionType, method, args). Обратитесь к https://docs.python.org/3.4/library/unittest.html, если вы еще этого не сделали.

В основном вы хотите протестировать хотя бы один явный случай (например, тестовую страницу), исключения, которые могут быть подняты как плохой тип аргумента (TypeError или ValueError) или возможный тип возвращаемого типа в зависимости от вашей функции. Убедитесь, что вы не проверяете только тип возвращаемого значения или объем возвращаемого значения, но явно для данных, так что если происходит изменение, которое нарушает функцию, оно обнаруживается (в то время как изменение все равно может вернуть 10 элементов элементы могут содержать недопустимые данные). Я также предлагаю иметь один метод тестирования для каждого метода: get_date будет иметь свой тестовый метод test_get_date.

Имейте в виду, что то, что вы хотите найти, - это то, что метод выполняет свою работу, поэтому проверяйте экстремальные случаи (большие входные данные, насколько это возможно, или, по крайней мере, метод определяет это) и попытайтесь создать что если метод выводится иначе, чем ожидалось на основе его определения (документации), тест не проходит, и нарушения прерываются рано.