使用Python请求库在本地开发中模拟第三方网站

0 投票
2 回答
501 浏览
提问于 2025-04-18 15:40

我正在用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 不是很熟悉,所以(很遗憾)我不能为你写出假请求的代码。

撰写回答