如何在不请求的情况下测试API结果

2024-06-10 10:16:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个函数,比如:

def request_API(request_url):  #To test
    fail_request = -1
    response = requests.get(request_url)
    if response.ok:
        infos = json.loads(response.text)
        if infos.has_key("movie"):
            return  infos["movie"]
        if infos.has_key("tvseries"):
            return  infos["tvseries"]

    print "Allocine API Request Error"
    return fail_request 

我做了一个测试,比如:

^{pr2}$

但我有个错误:

AttributeError: 'str' object has no attribute 'ok'

我知道这是因为当我嘲笑请求.get我返回一个JSON。我的问题是怎样做才是正确的。我是否需要重新创建一个对象请求,或者有更简单的方法来这样做。在


Tags: key函数apiurlgetreturnifresponse
2条回答

您正在模拟requests.get,它通常返回一个Response对象,而不是返回一个纯字符串。尝试让它返回一个Response对象:

from mock import patch
from requests import Response


def test_should_fail_to_request(self):
    mock_response = Response()
    mock_response.status_code = 404
    mock_response.body = json.dumps({"error":{"code":0,"$":"No result"}})

    with patch('requests.get', return_value=mock_response):
        response = my_mod.request_allocine_API("")

    self.assertEqual(response, -1, "There should be an error in the API")

我使用请求模拟库,这很好用。在

文档位于:https://requests-mock.readthedocs.org/en/latest/

最好的特性是支持regex。在

相关问题 更多 >