使用Python请求库在本地开发中模拟第三方网站
我正在用Flask搭建一个连接Facebook的网页服务器。这是一个示例路由:
@app.route('/login', methods=['GET'])
def login():
graph = facebook.GraphAPI(request.args.get('access_token'))
profile = graph.get_object('me')
return jsonify(profile)
这个功能正常,但在本地开发的时候,频繁访问Facebook的服务器似乎不是个好习惯。
有没有什么有效的方法可以把Facebook的API请求转到模拟数据或者模拟服务器上呢?内部的facebook-sdk
库是通过requests
来访问graph.facebook.com
的。
我看到过这个问题:
python mock Requests and the response
特别是Dropbox的responses
库,但看起来你需要用他们的装饰器来包裹每一个调用。这对于单元测试来说很好,但我只是想用模拟数据和模拟响应进行开发。
更新:回应Thomas,我也在考虑类似的解决方案。我尝试添加:
if config_name == 'development':
print 'monkey'
import requests
def mock(*args, **kwargs):
print args, kwargs
return {}
requests.request = mock
但这似乎没有改变facebook-sdk
库的行为。
2 个回答
0
可以试试使用flask-testing和mock这两个库:
import requests
from flask.ext.testing import TestCase
from mock import Mock
class TestLogin(TestCase):
def setUp(self):
requests.request = Mock()
super(TestLogin, self).setUp()
def test_it(self):
resp = self.client.get('/login')
self.assertEquals('right stuff', resp.data)
0
你可以通过查看 app.config
来检查 debug
模式是否开启。如果 debug
模式是开启的,那么你就可以把你的请求变成假请求。因为我对 Facebook 的 API 不是很熟悉,所以(很遗憾)我不能为你写出假请求的代码。