Python requesocks:模拟会话对象';get()方法
我使用Python包Python requesocks:模拟会话对象';get()方法,python,python-2.7,unit-testing,mocking,python-requests,Python,Python 2.7,Unit Testing,Mocking,Python Requests,我使用Python包requesocks而不是requests,因为它支持使用SOCKS代理 我试图使用Python内置的模拟库模拟会话对象的get()方法,但无法模拟状态代码: import mock import requesocks class WebScraper: def get_content(self, url, proxy): session = requesocks.session() session.proxies = proxy
requesocks
而不是requests
,因为它支持使用SOCKS代理
我试图使用Python内置的模拟库模拟会话
对象的get()
方法,但无法模拟状态代码:
import mock
import requesocks
class WebScraper:
def get_content(self, url, proxy):
session = requesocks.session()
session.proxies = proxy
response = session.get(url)
return response.status_code
def main():
session = requesocks.session()
session.get = mock.MagicMock(return_value={'status_code': 400})
scraper = WebScraper()
proxy = {'http': 'socks5://localhost:1080'}
status_code = scraper.get_content('http://www.purple.com', proxy)
print "Status Code: ", status_code
if __name__ == "__main__":
main()
运行此人为示例将产生以下输出:
$ python test_mock.py
Status Code: 200
什么是正确的模拟方法,以便获得状态代码400
另外,对于
requesocks
,是否有类似的mock库,如requests mock
?我通过在中调整解决方案使其工作。希望这可以帮助其他人,以下是我的更新代码:
import mock
import requesocks
class WebScraper:
def get_content(self, url, proxy):
session = requesocks.session()
session.proxies = proxy
response = session.get(url)
return response.status_code
@mock.patch('requesocks.session')
def main(mock_class):
instance = mock_class.return_value
type(instance.get.return_value).status_code = mock.PropertyMock(return_value=400)
scraper = WebScraper()
proxy = {'http': 'socks5://localhost:1080'}
status_code = scraper.get_content('http://www.purple.com', proxy)
print "Status Code: ", status_code
if __name__ == "__main__":
main()
这将产生所需的输出:
$ python test_mock.py
Status Code: 400