使用Oauth1证书模拟python HTTP请求

时间:2016-11-29 10:07:45

标签: python python-3.x mocking python-requests python-responses

我使用python response library模拟了一个请求调用,但是我收到了这个错误:

def function_to_test():
        oauth = OAuth1(
            self.consumer_key,
            client_secret=self.consumer_secret,
            resource_owner_key=self.oauth_token,
            resource_owner_secret=self.oauth_token_secret,
            rsa_key=self.rsa_key,
            signature_method=self._signature_method
        )
        return requests.post(url="https://example.com", auth=oauth, cert="/path/to/certificate")

我尝试模拟的代码如下:

@responses.activate
def test_token_expired(self):
    responses.add(responses.POST, url='https://example.com/',
                  body='my_expected_result',
                  status=200)
    response = function_to_test()
    self.assertEqual(response.content, 'my_expected_result)

测试代码:

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
db.engine.execute("NOTIFY DHCP")

测试失败并显示上面显示的错误,这是否表示响应模拟无效?它与我的requests.post中的auth / cert参数有关吗?我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

我认为您的问题与OAuth1库无关,而与OAuth1初始化有关。

在尝试模拟请求之前,OAuth1失败了,因为他正在尝试访问密钥,而密钥在测试中可能未正确初始化。

您可以为此密钥提供假值,即使模拟responses对象,responses也可以模拟您的通话。

我们原本可能期望requests完全模仿CIImage调用,但似乎在此之前仍然会进行一些初始化。