test我有一个使用Django 库的测试用例。在我的测试中,我有以下内容:
class TestLoadCurve(TestCase):
def setUp(self):
self.client = Client()
self.test_user = User.objects.create_user('test_user', 'a@b.com', 'test_user')
self.client.login(username="test_user", password="test_user")
def test_post_loadcurve_as_xlsx(self):
response = self.client.post(
reverse('loadcurves-list'),
{'file': open("app/tests/loadcurve_files/loadcurve.xlsx", "rb"), "name": "testuploadloadcurve"},
)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
(简化的)端点如下所示:
class LoadCurveViewSet(
mixins.CreateModelMixin,
mixins.RetrieveModelMixin,
mixins.ListModelMixin,
viewsets.GenericViewSet
):
...
def create(self, request, *args, **kwargs):
up_file = request.FILES['file']
...
return Response(status.HTTP_201_CREATED)
这个测试有效。但我想重新创建POST它curl用于某些文档的请求。到目前为止,我只做到了:
curl --user <myuser>:<mypass> -X POST -H --data-urlencode "payload={\"file\": $(cat app/tests/loadcurve_files/loadcurve.xlsx), \"name\": \"curlloadcurve\"}" http://localhost:5100/loadcurves/
使用调试器,我可以在 line 处停止处理up_file = request.FILES['file'],此时我意识到两者request.FILES都是request.data空的。我没有正确发出 POST 请求吗?我正在关注这个答案
Python 版本是 3.6.9 Django 版本是 3.1.3