Я сделал это так, чтобы создать фальшивые ответы, чтобы вы могли протестировать функцию синтаксического анализа в автономном режиме. Но реальную ситуацию можно получить, используя настоящий HTML.
Проблема с этим подходом заключается в том, что ваш локальный HTML-файл может не отражать последнее состояние в сети. Так что, если HTML изменяется онлайн, у вас может быть большая ошибка, но ваши тестовые примеры все равно пройдут. Так что это может быть не лучший способ проверить этот способ.
Мой текущий рабочий процесс: всякий раз, когда возникает ошибка, я отправляю электронное письмо администратору с URL-адресом. Затем для этой конкретной ошибки я создаю html-файл с содержимым, которое вызывает ошибку. Затем я создаю для него unittest.
Это код, который я использую для создания примеров HTTP-ответов Scrapy для тестирования из локального файла HTML:
# scrapyproject/tests/responses/__init__.py
import os
from scrapy.http import Response, Request
def fake_response_from_file(file_name, url=None):
"""
Create a Scrapy fake HTTP response from a HTML file
@param file_name: The relative filename from the responses directory,
but absolute paths are also accepted.
@param url: The URL of the response.
returns: A scrapy HTTP response which can be used for unittesting.
"""
if not url:
url = 'http://www.example.com'
request = Request(url=url)
if not file_name[0] == '/':
responses_dir = os.path.dirname(os.path.realpath(__file__))
file_path = os.path.join(responses_dir, file_name)
else:
file_path = file_name
file_content = open(file_path, 'r').read()
response = Response(url=url,
request=request,
body=file_content)
response.encoding = 'utf-8'
return response
Образец html-файла находится в scrapyproject / tests / answers / osdir / sample.html.
Тогда тестовый пример может выглядеть следующим образом: Местоположение тестового примера - scrapyproject / tests / test_osdir.py
import unittest
from scrapyproject.spiders import osdir_spider
from responses import fake_response_from_file
class OsdirSpiderTest(unittest.TestCase):
def setUp(self):
self.spider = osdir_spider.DirectorySpider()
def _test_item_results(self, results, expected_length):
count = 0
permalinks = set()
for item in results:
self.assertIsNotNone(item['content'])
self.assertIsNotNone(item['title'])
self.assertEqual(count, expected_length)
def test_parse(self):
results = self.spider.parse(fake_response_from_file('osdir/sample.html'))
self._test_item_results(results, 10)
В основном так я тестирую свои методы синтаксического анализа, но не только для методов синтаксического анализа. Если это станет более сложным, я предлагаю взглянуть на Mox.
person
Sam Stoelinga
schedule
05.10.2012