我的目标是测试使用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。但是,它只支持requests
Python 客户端发出的 http 请求。(如此处所述)。还有另一个库vcrpy,但它也只支持有限的客户端。
你在使用请求吗?如果您不使用 Requests,Betamax 不适合您。您应该检查 VCRpy。您是在使用 Sessions 还是在使用功能性 API(例如 requests.get)?
最后一个选项是手动记录所有请求并以某种方式存储它们,但这在蜘蛛发出请求的规模上并不可行。
是否scrapy.Requests
使用一些可用于模拟这些请求的下划线 python 客户端?或者有没有其他方法可以模拟http
蜘蛛在一次运行中发出的所有请求,并使用它来测试蜘蛛的预期行为?