我有这个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,
}
任何想法,伙计们?