【发布时间】:2026-02-23 02:10:01
【问题描述】:
我正在使用 Django Rest Framework 构建一个 REST-ful API。我之前处理过与 REST API 的集成工作,并获得了专门用于集成测试的测试 API 密钥,这些密钥允许您发送数据并返回模拟数据,但不会将数据放入系统中。我正在尝试在我的 API 中实现同样的功能,但我还没有找到方法。
【问题讨论】:
标签: django rest django-rest-framework
我正在使用 Django Rest Framework 构建一个 REST-ful API。我之前处理过与 REST API 的集成工作,并获得了专门用于集成测试的测试 API 密钥,这些密钥允许您发送数据并返回模拟数据,但不会将数据放入系统中。我正在尝试在我的 API 中实现同样的功能,但我还没有找到方法。
【问题讨论】:
标签: django rest django-rest-framework
你可以使用一些装饰器来做到这一点:)
from django.contrib.auth import authenticate
def mock_funcname(func):
def wrapper(request, *args, **kwargs):
user = authenticate(token=request.REQUEST['token'])
if user.id == 'TEST USER ID':
return Response({'detail': "Some stuff mocked for this user :)"})
return func(request, *args, **kwargs)
return wrapper
所以现在你可以把它和其他装饰器一样:
@api_view(['POST'])
@permission_classes((IsAuthenticated,))
@mock_funcname
def funcname(request, pid=None):
return response......
这是一个基本功能,你需要让它变得更复杂
【讨论】:
首先,您可以安装mommy 以在您的测试中创建模拟数据。 因此,在您的 tests.py 中,您可以为您的 API 创建一个测试,检查 status_code 和响应:
def test(self):
user = mommy.make(User) # Create a fake user
token = Token.objects.get(user__username=user.username) # Generate a token
self.client.credentials(HTTP_AUTHORIZATION='Token ' + token.key) # Token for your request
response = self.client.post("url", your_data) # POST in your URL
self.assertEqual(response.status_code, status.HTTP_201_CREATED) # Status Code of Creation
self.assertEqual(User.objects.last().first_name, user.first_name) # Check the fields created
然后运行运行python manage.py test 的测试或遵循DRF 中的文档
【讨论】:
manage.py test 的假数据库。但是,如果您不想在系统中保存给定密钥的请求,最好使用multiple databases,这样您就可以将测试数据库与真实数据库分开。