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

时间:2014-08-01 17:41:13

标签: python testing mocking python-requests

我正在使用Flask构建一个(facebook连接的)Web服务器。这是一个示例路线

@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库使用requestsgraph.facebook.com

我已经看过这个问题了

python mock Requests and the response

,特别是Dropbox的responses库,但看起来你必须在装饰器中包装每个调用。它适用于单元测试套件,但我只是对模拟数据和模拟响应进行开发感兴趣。


更新:回应托马斯,我一直在考虑类似的解决方案。我尝试添加:

if config_name == 'development':
    print 'monkey'
    import requests
    def mock(*args, **kwargs):
        print args, kwargs
        return {}
    requests.request = mock

但这似乎并没有改变facebook-sdk库的行为。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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)