Python 如何处理残缺不全的合同?

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文件创建一个假响应。如果这仍然是一个单元测试过程,这是有争议的,但这给了您更多的灵活性和健壮性 请注意,您仍然可以编写合

刮擦合同问题

我开始研究scrapy框架。也实现了一些spider 提取,但我无法为spider编写单元测试用例,因为 scrapy提供的包文档没有正确的程序来编写 测试用例。请帮我做这件事。

是的,还远远不够清楚和详细

我不是编写spider合同的专家(实际上,在at工作时只写过一次)。但是每当我需要为Scrapy Spider编写测试时,我更愿意遵循这种方法——从本地html文件创建一个假响应。如果这仍然是一个单元测试过程,这是有争议的,但这给了您更多的灵活性和健壮性

请注意,您仍然可以编写合同,但您很快就会感到需要扩展合同并编写自定义合同。这很好

相关链接:

差劲的合同 测试蜘蛛 测试spider时最基本的两个问题可能是:

  • 我的代码更改会破坏蜘蛛吗
  • 蜘蛛会不会因为我正在刮的页面变了而折断
  • 合同 Scrapy提供了一种测试蜘蛛的方法:合同

    合同看起来有点不可思议。它们存在于多行文档字符串中。合同“语法”是:
    @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尝试了你的假响应方法,它向我展示了一个好结果,我的单元测试用例部分已经完成。再次感谢……)