Python 如何处理残缺不全的合同?
刮擦合同问题 我开始研究scrapy框架。也实现了一些spider 提取,但我无法为spider编写单元测试用例,因为 scrapy提供的包文档没有正确的程序来编写 测试用例。请帮我做这件事。是的,还远远不够清楚和详细 我不是编写spider合同的专家(实际上,在at工作时只写过一次)。但是每当我需要为Scrapy Spider编写测试时,我更愿意遵循这种方法——从本地html文件创建一个假响应。如果这仍然是一个单元测试过程,这是有争议的,但这给了您更多的灵活性和健壮性 请注意,您仍然可以编写合同,但您很快就会感到需要扩展合同并编写自定义合同。这很好 相关链接:Python 如何处理残缺不全的合同?,python,unit-testing,python-2.7,web-scraping,scrapy,Python,Unit Testing,Python 2.7,Web Scraping,Scrapy,刮擦合同问题 我开始研究scrapy框架。也实现了一些spider 提取,但我无法为spider编写单元测试用例,因为 scrapy提供的包文档没有正确的程序来编写 测试用例。请帮我做这件事。是的,还远远不够清楚和详细 我不是编写spider合同的专家(实际上,在at工作时只写过一次)。但是每当我需要为Scrapy Spider编写测试时,我更愿意遵循这种方法——从本地html文件创建一个假响应。如果这仍然是一个单元测试过程,这是有争议的,但这给了您更多的灵活性和健壮性 请注意,您仍然可以编写合
@contract\u name
。您可以创建自己的合同,这非常简洁
要使用合同,请在合同名称前加上“@
”。合同的名称由给定合同子类上的.name
属性指定。这些契约子类要么是内置的,要么是您创建的自定义子类
最后,上述文档字符串必须存在于您的spider的回调中。下面是一个生活在parse
回调中的一些基本契约的示例;默认回调
def解析(self,response):
“”“此函数用于收集作者和引用文本。
@网址http://quotes.toscrape.com/
@返回项目1和项目8
@返回请求0
@删除作者引用的文本
"""
您可以通过scrapy check
运行此合同;或者,使用scrapy check-l
列出您的合同
更深入的合同
使用三个内置合同测试上述合同:
scrapy.contracts.default.UrlContract
scrapy.contracts.default.returns合同
scrapy.contracts.default.ScrapesContract
UrlContract
是强制性的,实际上不是合同,因为它不用于验证。@url
契约用于设置通过刮擦检查测试爬行器时爬行的url。在本例中,我们指定http://quotes.toscrape.com/
。但是我们可以指定http://127.0.0.1:8080/home-11-05-2019-1720.html
这是我用scrapy视图保存的quotes.toscrape.com
的本地版本http://quotes.toscrape.com/
命令
ReturnsContract
用于检查正在测试的回调的输出。如您所见,该合同被调用两次,使用不同的参数。但你不能在里面放任何老字号。在引擎盖下,有一个预期参数的字典:
对象={
“请求”:请求,
“请求”:请求,
“项”:(基本项,dict),
“项目”:(基本项目,dict),
}
我们的合同规定我们的spider@返回项目1 16
。1
和16
是上下限。上限是可选的;在引擎盖下,如果未指定,则设置为无穷大感谢@alecxe对我的问题的快速回答。我会处理你建议的想法,比如创建假响应。再次感谢你宝贵的回答。嘿@alecxe尝试了你的假响应方法,它向我展示了一个好结果,我的单元测试用例部分已经完成。再次感谢……)