Я совершенно новичок в инструментах тестирования Django и Django Rest Framework и немного запутался в том, как отправка почтового запроса работает при загрузке файла.
Вот APITestCase, который я должен загрузить в файл: (Файл представляет собой XML-файл отчета ZAP)
class UploadTest(APITestCase):
c = APIClient()
def test_file_upload_ZAP(self):
self.c.force_authenticate(UserFactory.create())
with open(path.join('VMA', 'test', 'Test.xml'), "rb") as fp:
self.c.post('/upload/TestZAPXML.xml', {'filename': 'name', 'attachment': fp})
Проблема заключается в том, что код продолжает ломаться из-за ошибки синтаксического анализа XML.У меня нет проблем при отправке POST-запроса через Postman или httpie - анализатор XML работает так, как задумано.[Единственное различие, которое я заметил между запросом Django Post к Почтальону, заключается в следующем: я изменяю Тело в Почтальоне для отправки в двоичном виде]
Чтобы выяснить, почему это происходит: я решил запустить file.read () вмой метод fileHandler (файл).Файл распечатывает: b'--BoUnDaRyStRiNg\r\nContent-Disposition: form-data; name="filename"\r\n\r\nname\r\n--BoUnDaRyStRiNg\r\nContent-Disposition: form-data; name="format"; filename="Test.xml"\r\nContent-Type: application/xml\r\n\r\n
XML-парсеру это не нравится и поэтому выдает исключение.
file.read () должен распечатываться так: <?xml version="1.0" encoding="UTF-8"?><OWASPZAPReport generated="Fri, 29 Mar 2019 21:02:52" version="2.3.1">
Что выводит, когда яиспользуя Почтальон.Это также фактический файл XML.
Что я делаю не так в классе UploadTest, из-за которого появляется Boundary String?
Вот мой views.py на всякий случай, если он действительно влияетЭто.
class FileUploadView(APIView):
permName = 'fileUpload'
parser_classes = (FileUploadParser,)
def post(self, request, filename, format=None):
file_obj = request.FILES['file']
return fileHandler(file_obj, request)