Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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 requesocks:模拟会话对象';get()方法_Python_Python 2.7_Unit Testing_Mocking_Python Requests - Fatal编程技术网

Python requesocks:模拟会话对象';get()方法

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

我使用Python包
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