Дразнить запросы на тестирование в Scrapy Spider

Моя цель - протестировать паука, написанного с использованием scrapy (Python). Я пытался с помощью contracts но это действительно ограничено в том смысле, что я не могу проверить такие вещи, как нумерация страниц или правильно ли извлечены некоторые атрибуты.

def parse(self, response):
    """ This function parses a sample response. Some contracts are mingled
    with this docstring.

    @url http://someurl.com
    @returns items 1 16
    @returns requests 0 0
    @scrapes Title Author Year Price
    """

Итак, вторая идея состоит в том, чтобы mock все запросы, которые паук делает за один прогон, и использовать его в testing фаза для проверки на ожидаемые результаты. Тем не менее, я не уверен, и как я могу издеваться над каждым запросом, который сделан через паука. Я просмотрел различные библиотеки, и одна из них - betamax. Тем не менее, он поддерживает только HTTP-запросы, сделанные requests клиент Python. (Как уже упоминалось здесь). Существует другая библиотека vcrpy, но она также поддерживает только ограниченных клиентов.

Вы используете запросы? Если вы не используете запросы, Betamax не для вас. Вы должны проверить VCRpy. Используете ли вы сеансы или функциональный API (например,quests.get)?

Последний вариант - вручную записать все запросы и как-то их сохранить, но на самом деле это неосуществимо в том масштабе, в котором паук делает запросы.

Есть ли scrapy.Requests использовать какой-нибудь подчеркнутый Python-клиент, который можно использовать для проверки этих запросов? Или есть какой-то другой способ, которым я могу высмеять все http запросы, сделанные пауком за один прогон, и использовать это для тестирования паука на ожидаемое поведение?

1 ответ

Так, scrapy имеет встроенную поддержку кэширования, которая может быть использована для cache все ответы, и это действительно устраняет mock ответы.

Существуют различные настройки, найденные в HttpCacheMiddleware, Некоторые из них следующие. (подлежит включению в settings.py для scrapy проект)

# Cache settings
HTTPCACHE_POLICY = 'scrapy.extensions.httpcache.DummyPolicy'
HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'
HTTPCACHE_ENABLED = True
HTTPCACHE_EXPIRATION_SECS = 0  # Never Expire
HTTPCACHE_DIR = 'httpcache'
HTTPCACHE_IGNORE_HTTP_CODES = [301, 302, 404]
HTTPCACHE_IGNORE_MISSING = False
HTTPCACHE_IGNORE_RESPONSE_CACHE_CONTROLS = ["no-cache", "no-store"]

Это также хранит cache в указанном каталоге. Вот весь список опций.

Другие вопросы по тегам