【问题标题】:Mock 3rd party website for local development with Python requests library使用 Python 请求库模拟用于本地开发的第 3 方网站
【发布时间】:2014-09-24 23:36:39
【问题描述】:

我正在使用 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 库的行为。

【问题讨论】:

    标签: python testing mocking python-requests


    【解决方案1】:

    您可以使用app.config 检查debug 模式是否开启,然后(如果debug 模式开启)将您的请求转换为虚拟请求。我对 facebook API 不是很熟悉,所以(很遗憾)我无法为你写出虚拟代码。

    【讨论】:

    • 响应更新。有什么想法吗?
    【解决方案2】:

    如何使用烧瓶测试和模拟库:

    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)
    

    【讨论】:

      猜你喜欢
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 2013-06-04
      • 1970-01-01
      • 2017-07-25
      • 2017-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多