我有一个Django项目,使用Django Rest Framework和两个应用程序(events
和logs
)以及相关的端点/events
和/logs
客户端可以POST /events
一些有关事件的信息,处理此事件将在logs
app模型中记录日志。然后可以使用/logs
上的GET检索日志。
虽然事件视图可以直接通过日志视图进行更新,但我希望通过对/logs
调用的POST调用来实现此目的,以便更好地定义接口,并在需要时更容易拆分为完全独立的服务。使用requests
包处理POST调用,如下所示:
from rest_framework.views import APIView
import requests
class Events(APIView):
def post(self, request):
# Some event handling code...
# Record log
log_url = request.build_absolute_uri(reverse('logs'))
requests.post(log_url, data=event)
为了测试这项工作,我启动服务器并执行:
在这种情况下,我看到从GET请求返回的一些日志数据,所以我知道e2e实现工作正常。但是,当我尝试使用django.test.LiveServerTestCase
自动执行此操作时,响应始终为空。
from django.test import LiveServerTestCase
from rest_framework.test import RequestsClient
class AppsEndpointTest(LiveServerTestCase):
def test_post_event_retrieve_logs(self):
events_endpoint = self.live_server_url + '/events/'
logs_endpoint = self.live_server_url + '/logs/'
client = RequestsClient()
# POST an application which we know will trigger an event
client.post(events_endpoint, { 'event_code' : 'TEST_EVENT' })
# Check the event is returned
response = client.get(logs_endpoint)
self.assertEqual(response.status_code, 200)
self.assertIn('TEST_EVENT', [log['event_code'] for logs in response.json()])
# Assertion fails, response is empty
我假设调用request.build_absolute_uri()
是问题的一部分,并且进来的请求没有正确的主机名来构建URL。在运行测试用例时,我看不到任何服务器日志记录,这导致我进入此阻塞点。
使用LiveServerTestCase
时,为什么这不起作用?