Scrapy:使用单独的测试数据库进行集成测试

时间:2018-03-01 23:57:18

标签: python scrapy

我有一个scrapy项目,它将数据写入数据库。它基于这个伟大的教程:http://newcoder.io/scrape/part-3/

我现在遇到了一个问题,我正在尝试为项目编写一些集成测试。我遵循此处的指南:Scrapy Unit Testing

我不清楚如何最好地传递适当的数据库设置。我希望测试使用他们自己的数据库,我可以确保在测试开始运行之前处于已知状态。

所以只有import settings不会起作用,因为如果项目在测试模式下运行,那么它需要使用不同的设置文件。

我熟悉Ruby on Rails项目,您可以在其中指定RAILS_ENV环境变量,并且基于此环境变量,框架将使用来自不同文件的设置。在测试scrapy项目时是否有类似的概念?或者是否有更多的pythonic替代方法?

1 个答案:

答案 0 :(得分:0)

最后,我编辑了settings.py文件,以支持使用环境变量来确定要从中获取设置的其他文件,例如:

from importlib import import_module
import logging
import os

SCRAPY_ENV=os.environ.get('SCRAPY_ENV',None)
if SCRAPY_ENV == None:
    raise ValueError("Must set SCRAPY_ENV environment var")

# Load if file exists; incorporate any names started with an
# uppercase letter into globals()
def load_extra_settings(fname):
    if not os.path.isfile("config/%s.py" % fname):
        logger = logging.getLogger(__name__) 
        logger.warning("Couldn't find %s, skipping" % fname)
        return
    mdl=import_module("config.%s" % fname)
    names = [x for x in mdl.__dict__ if x[0].isupper()]
    globals().update({k: getattr(mdl,k) for k in names})

load_extra_settings("secrets")
load_extra_settings("secrets_%s" % SCRAPY_ENV)
load_extra_settings("settings_%s" % SCRAPY_ENV)

我做了一个示例github回购,展示了它是如何工作的:https://github.com/alanbuxton/scrapy_local_settings

热衷于找出是否有更整洁的方法。

相关问题