如何在django中测试从外部端点请求数据的函数



我正试图在django-api上测试我的函数,这些函数执行对外部api的外部请求。怎么可能我测试以下场景:成功、失败和异常,如超时

以下是简化的功能

def get_quote(*args):
# log request
try:
response = requests.post(url, json=data)
# parse this response
except:
# log file :)
finally:
# log_response(...)
return parsed_response or None

无:响应可以成功,也可以失败,也可以超时。我想测试的这些场景

您可以模拟调用外部API的结果,并在测试函数中设置预期的返回值:

from unittest.mock import patch
from django.test import TestCase
class ExternalAPITests(TestCase):
@patch("requests.post")
def test_get_quote(self, mock):
mock.return_value = "predetermined external result"
self.assertEquals("expected return value", get_quote())

您可以使用responses包-https://pypi.org/project/responses/

import unittest
import responses
from your_package import get_quote

class TestPackage(unittest.TestCase):
@responses.activate
def test_get_quote(self):
url = "http://some_fake_url.com"
responses.add(responses.POST, url, json={"test": "ok"}, status=200)
self.assertDictEqual({"test": "ok"}, get_quote(url))
@responses.activate
def test_get_quote_with_exception(self):
url = "http://some_fake_url.com"
responses.add(responses.POST, url, body=Exception('...'))
with self.assertRaises(Exception):
get_quote(url)

最新更新