Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:web刮板的功能测试_Python_Web Scraping_Pytest - Fatal编程技术网

Python:web刮板的功能测试

Python:web刮板的功能测试,python,web-scraping,pytest,Python,Web Scraping,Pytest,我正在用Python构建一个web刮板。到目前为止,我一直在用一个真实的网站测试它,但我希望有一个合适的测试套件,最好通过pytest运行。有什么想法/例子吗 我想象这个测试会启动一个小型http服务器,为几个页面提供服务(可能是在一个单独的进程中),通过调用它的一个API函数来运行我的scraper,检查结果,然后关闭服务器。最简单的方法是什么 编辑:我将在这里描述我发现的具体解决方案,以防它对某人有用(当然不是那些没有试图讨论或询问细节就把问题回答得太宽泛的主持人,他们不感兴趣) 在我的(P

我正在用Python构建一个web刮板。到目前为止,我一直在用一个真实的网站测试它,但我希望有一个合适的测试套件,最好通过pytest运行。有什么想法/例子吗

我想象这个测试会启动一个小型http服务器,为几个页面提供服务(可能是在一个单独的进程中),通过调用它的一个API函数来运行我的scraper,检查结果,然后关闭服务器。最简单的方法是什么

编辑:我将在这里描述我发现的具体解决方案,以防它对某人有用(当然不是那些没有试图讨论或询问细节就把问题回答得太宽泛的主持人,他们不感兴趣)


在我的(Python 3)代码中,我最初使用的是
urllib.request
。在花了一些时间在互联网上搜索之后,我发现了非常好的库,但是该库是模拟的,它不能与
urllib.request
一起工作。因此,我重新编写了代码以使用
请求
,然后我可以在测试中愉快地使用
httmock
。强烈推荐
请求和
httmock
都非常出色

您不希望对活动服务器运行大多数测试,尤其是在每次测试后要启动并销毁的服务器。这将大大降低测试套件的速度,并使运行测试更加痛苦。根据刮刀的复杂性,确保刮刀逻辑正确性的测试套件可能会增加很多

相反,针对可以快速加载的静态内容(即磁盘上的缓存网页),运行scraper的核心功能。测试
extractImageLinksFromPage(page)
不需要服务器为其提供页面内容,您只需
file.load(pageContent)

仅针对正在运行的服务器测试HTTP请求功能

如果您想进行一些端到端测试(模拟scraper的用户与scraper交互的方式),也可以使用服务器


有很多方法可以让服务器提供内容并运行。我认为最快的应该是使用
节点
,所以谷歌搜索
节点RESTful API
。如果您想留在Python世界中,请查找
flask
,它对您的用例是免费的。

您不想对活动服务器运行大多数测试,尤其是在每次测试后要启动和销毁的服务器。这将大大降低测试套件的速度,并使运行测试更加痛苦。根据刮刀的复杂性,确保刮刀逻辑正确性的测试套件可能会增加很多

相反,针对可以快速加载的静态内容(即磁盘上的缓存网页),运行scraper的核心功能。测试
extractImageLinksFromPage(page)
不需要服务器为其提供页面内容,您只需
file.load(pageContent)

仅针对正在运行的服务器测试HTTP请求功能

如果您想进行一些端到端测试(模拟scraper的用户与scraper交互的方式),也可以使用服务器


有很多方法可以让服务器提供内容并运行。我认为最快的应该是使用
节点
,所以谷歌搜索
节点RESTful API
。如果你想留在Python世界中,请查阅
flask
,它对你的用例来说是免费的样板文件。

有人投票认为这个问题“太宽泛了”。为什么它太宽泛了,又怎么能把它改得足够具体呢?我发现这个问题很有用,但我没有打开它的权限!这个问题应该有更多的讨论,因为我也有和这个问题类似的问题,但在网上没有太多的答案。有人刚刚投票结束这个问题,因为“太广泛”。为什么它太宽泛了,又怎么能把它改得足够具体呢?我发现这个问题很有用,但我没有打开它的权限!这个问题应该有更多的讨论,因为我也有和这个问题类似的问题,但在网上没有太多的答案。