Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Python API Testing - отправить файл методом PUT

api
python
Теги: #<Tag:0x00007fedbac68838> #<Tag:0x00007fedbac68630>

(Прокопук Дмитрий) #1

Для API testing использую Python + Pytest. Есть библитека requests.
Есть endpoint ‘blabla/import’, этот endpoint дружит с методом put. В теле метода отправляешь файл

С Postman все просто и легко. Но в python put не хочет кушать путь к файлу, ни открытый файл
Может быть кто-нить нашел решение передачи файлов в put методе или знает как это сделать


(Andrew Zakordonets) #2

5 минут гугления дают вот этот результат https://stackoverflow.com/questions/11832639/how-to-specify-python-requests-http-put-body

 filepath = 'yourfilename.txt'
 with open(filepath) as fh:
     mydata = fh.read()
     response = requests.put('https://api.elasticemail.com/attachments/upload',
                data=mydata,                         
                auth=('omer', 'b01ad0ce'),
                headers={'content-type':'text/plain'},
                params={'file': filepath}

(Прокопук Дмитрий) #3

google есть у всех, если вы внимательно читали мой вопрос, то
“Но в python put не хочет кушать путь к файлу, ни открытый файл”
В принипе проблему я решил и файл передает, я думаю проблема сейчас в кодировке
Потому что респонс от сервера говорит что у меня файл со старой кодировкой или вообще не xls
При этом валидные файлы только xls, txt, csv. {‘errorMessage’: ‘The file you have uploaded is unreadable. The uploaded file may be corrupt, not an Excel file, or in…ry to upload a file in a newer version of Excel, or in comma separated values (.csv) or delimited text format (.txt).’}


(Andrew Zakordonets) #4

Тогда вам нужно к вашим разработчикам обращаться. Удаленно сложно определеить в чем может быть проблема. Можно при чтении указать кодировку :

import codecs
f = codecs.open('unicode.rst', encoding='utf-8')

B пробовать так передавать. Я бы еще порекомендовал в вашем тесте сделать тестовый файл (проще работать с csv или text file) , перед отправкой запроса прочитать его и вывести output in console. Если проблема с путем или кодировкой, то по идее в print output это будет видно.

Если проблема не с путем, тогда нужна помощь ваших разработчиков - либо попросить у них показать как работает парсер этих файлов, либо самому написать unit test в проекте и проверить на тех же файлах нормально ли парсит приложение внутри. Если unit test проходит, значит проблема в передаче информации через requests и копать уже оттуда.


(Igor Balagurov) #5

А не пробовали в постмане нажать кнопку Code выбрать Python->requests и взять оттуда код на (Python и Requests) и посмотреть что же там делается?


(Прокопук Дмитрий) #6

Спасибо за хорощую подсказку. Решил проблему и все было просто,есть прям в документации либы requests
Один словом л…х
file_name = path_to_file+fileName
files = {‘file’: (file_name, open(file_name, ‘rb’))}
r = requests.post(url, files=files)


(Oleksandr Khotemskyi) #7

вам же PUT нужен был


(Прокопук Дмитрий) #8

для PUT тоже подходит