Как сделать запрос на локальный URL в рамках автоматизированного тестирования? - PullRequest
0 голосов
/ 28 апреля 2020

Я пишу автоматический тест в Django, чтобы проверить, работает ли веб-крючок над приложением. Тест отправляет пакет JSON в webhook и проверяет, что вызов был зарегистрирован в базе данных. Однако проблема, с которой я сталкиваюсь, состоит в том, что тест вызывает URL-адрес http://localhost, и поэтому данные сохраняются в моей локальной базе данных разработчиков, а не во временной базе данных, созданной в ходе теста. Так что теперь у меня нет возможности проверить, был ли получен вызов.

Какое для этого правильное решение?

from django.test import TestCase
import requests
from monzo.models import Transaction, RequestLog

class WebhookChecks(TestCase):
    fixtures = ['db.json', ]
    def test_simple_expense(self):

        my_json = '{"type": "transaction.created", REMOVED FOR SECURITY }'

        url = 'http://localhost/some_url/webhook/'
        headers = {'Content-Type': 'application/json'}
        r = requests.post(url, data=my_json, headers=headers)

        if not "200" in str(r):
            print("Something didn't work out. Error: "+str(r))

        self.assertTrue("200" in str(r))


1 Ответ

3 голосов
/ 28 апреля 2020

Использование Djangos Клиент , с помощью которого вы можете выполнять запросы в своих тестах.

Пример:

from django.test import Client

c = Client()
c.get('/some_url/..')

Другой способ - использовать Djangos LiveServerTestCase .

Вы можете использовать self.live_server_url вместо прямой записи http://localhost.

В этом тестовом примере настраивается живой сервер, который прослушивает localhost.

...