Scrapy - Pytest执行不执行管道

时间:2018-01-29 13:12:10

标签: python-3.x scrapy pytest

我有这个Scrapy项目的默认结构,我添加了一个带测试模块的测试包。

所以这是我的结构:

scraping/
    scrapy.cfg 

    crawler/             
        __init__.py

        items.py         

        pipelines.py     

        settings.py      

        spiders/         
            __init__.py

            submissions_spider.py

        test/
            __init__.py

            test_request.py

首先,在开始使用py.test框架进行测试之前,我刚刚在这个模块中编写了一个main函数,运行一个新的CrawlerProcess来调用我的蜘蛛。

这样的事情:

from scraping.crawler.spiders.submissions_spider import SubmissionsSpider
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings

if __name__ == '__main__':
    crawler = CrawlerProcess(get_project_settings())
    crawler.crawl(SubmissionsSpider, n=2)
    crawler.start()

这将在pycharm调试上完美执行。它运行我的SubmissionsSpider,然后使用我定义的管道处理项目。

但是...当我编写一个简单的测试只是为了执行上面的相同例程并运行" py.test"时,不会执行带有我的管道的项目处理。该过程会刮掉数据,而不是其他任何内容。

这是我的新测试文件:

import pytest
from scraping.crawler.spiders.submissions_spider import SubmissionsSpider
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
from twisted.python.failure import Failure

@pytest.fixture
def crawler():
    return CrawlerProcess(get_project_settings())

def test_crawler_execution(crawler):
    crawler.crawl(SubmissionsSpider, n=2)
    crawler.start()

我怀疑它可能是配置中的某些内容。

scrapycfg文件

[settings]
default = crawler.settings

[deploy]
#url = http://localhost:6800/
project = crawler

settings.py

BOT_NAME = 'crawler'

SPIDER_MODULES = ['crawler.spiders']
NEWSPIDER_MODULE = 'crawler.spiders'

ROBOTSTXT_OBEY = True

ITEM_PIPELINES = {
    'crawler.pipelines.MongoWriterPipeline': 1,
}

任何想法,伙计们?

0 个答案:

没有答案