Дразнить запросы на тестирование в Scrapy Spider - PullRequest
0 голосов
/ 28 июня 2018

Моя цель - протестировать паука, написанного с использованием 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 Ответ

0 голосов
/ 28 июня 2018

Итак, 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 в указанном каталоге. Вот полный список вариантов .

...