作为自动化测试的一部分,如何向本地 URL 发出请求?

How to make a request to local URL as part of automated tests?

我正在 Django 中编写自动化测试以检查 Webhook 是否在应用程序上运行。测试向 webhook 发送一堆 JSON 并将检查调用是否已记录在数据库中。然而,我遇到的问题是测试调用 http://localhost URL 并且数据因此保存在我的本地开发数据库中而不是测试创建的临时数据库中。所以我现在没有办法检查是否收到了电话。

什么是正确的解决方案?

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))


使用 Djangos Client 可以在测试中执行请求。

示例:

from django.test import Client

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

另一种方法是使用 Djangos LiveServerTestCase.

可以用self.live_server_url代替直接写http://localhost.

此测试用例设置了一个监听本地主机的实时服务器。