Как проверить функции, которые запрашивают данные от внешних конечных точек в django - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь проверить свои функции на моем django API, которые выполняют внешние запросы к внешнему API. Как я могу проверить следующий сценарий ios: успех, сбой и исключения, такие как тайм-аут

Ниже приведена упрощенная функциональность

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

Нет: ответ может быть успешным, сбой, может тайм-аут. Я хочу проверить такие сценарии ios

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Вы можете использовать пакет ответов - 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)

1 голос
/ 25 марта 2020

Вы можете смоделировать результат вызова внешнего 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())
...