request官方網站地址:https://www.osgeo.cn/requests/user/advanced.html#post-multiple-multipart-encoded-files
前言
滴滴滴! 今天聊聊接口自動化,遇到文件上傳的接口怎么去測試。
近期也有不少的小伙伴在工作中遇到了文件上傳的接口,表示不知道應該如何去傳遞文件上傳的參數。
為了幫大家解決這個疑惑,我這邊特地寫了一個文件上傳的接口,那么接下來我們結合這個接口給大家來講講解決方案。
接口說明
-
接口地址:http://127.0.0.1:5000/upload(注:老師自己寫的一個接口,運行在本地)
-
請求方法:POST
-
請求類型:Content-Type: multipart/form-data;
-
響應類型: Content-Type:application/json
-
接口入參
參數名 參數類型 說明 nickname string 用戶昵稱 age int 年齡 sex string 性別 pic file(文件) 上傳的文件 -
出參(返回值)
字段名 類型 說明 code int 業務碼(1代表上傳成功,0代碼上傳失敗) data obj 相關的數據信息 msg string 相關的描述信息 返回參考示例:
{ "code": 1, "data": { "age": "456", "datetime": "Thu, 12 Mar 2020 16:22:57 GMT", "filename": "handle_sign.py", "name": "123", "sex": "男" }, "msg": "文件上傳成功,文件保存的地址為:http://127.0.0.1:5000/images/handle_sign.py" }
針對上面的接口文檔簡要的說明一下:
該接口需要四個參數,其中一個是用來接收上傳的文件的,看上去和其他的接口並沒有什么不一樣的,返回的數據是json類型的;
關於文件上傳接口,需要我們引起注意的一個地方就是:
請求參數類型都是Content-Type: multipart/form-data;
那么這種類型的參數,我們在發送請求的時候要特別注意!他
傳參的方式和其他參數類型是不一樣的。接下來我們分別使用postman和python來請求這個接口。
使用postman上傳文件
使用postman來上傳文件,操作起來比較簡單。
關於接口參數直接選擇form-data這一欄進行填寫就好了,要注意的點就是上傳文件的參數,要選擇文件類型,然后再對應參數值那一欄選擇對應的文件即可,點擊請求,服務器返回了上傳成功的相關信息,詳細操作如下圖:
使用requests模塊來上傳
前面我們已經成功的使用了postman來上傳文件,那么我們在使用python去做接口自動化的時候,如何來解決這個文件上傳的問題呢?
在python中關於發送http請求,我們通常都會使用requets模塊,那么接下來我們就使用requests模塊來上傳文件。
requests模塊發送post請求直接調用post方法就可以了,那么關於文件上傳這里傳參的時候要特別注意,
requests傳參類型:
requests模塊傳參有四種方式:params、data,、json和files。接下來給大家詳細講解一下requests模塊中這幾種傳參方式的區別。
-
parmas: 傳遞查詢字符串參數(常用於get請求)
-
data: 傳遞表單類型的參數(參數類型為:Content-Type:application/x-www-form-urlencoded)
-
json: 傳遞json類型的參數(參數類型為:Content-Type:application/json)
-
files: 用於上傳文件(參數類型: content-type:multipart/form-data;)
上傳文件的的接口參數的類型為content-type:multipart/form-data,那么我們使用requests來發送請求的時候,接口中文件上傳的參數需要使用files來傳遞。files參數格式如下
# fiels為字典類型數據,上傳的文件為鍵值對的形式,參數名作為鍵, # 參數值是一個元組,內容為以下格式(文件名,打開的文件流,文件類型) files = { "pic": ("test01.gif", open("test01.gif", "rb"), "images/git") } # 注意點:除了上傳的文件,接口其他參數不能放入files中
文件上傳的參數准備好了,那么接口中其他的參數怎么處理呢?其他的參數使用data傳遞即可。參數組織如下:
# 其他的參數 data = { "nickname": "木森", "age": 18, "sex": "男", }
參數都准備好了,那么接下來就可以發送請求了,完整的請求代碼如下:
1 """ 2 ============================ 3 Author:檸檬班-木森 4 Time:2020/3/13 13:40 5 E-mail:3247119728@qq.com 6 Company:湖南零檬信息技術有限公司 7 ============================ 8 """ 9 10 import requests 11 12 # 如何請求文件上傳的接口 13 url = "http://127.0.0.1:5000/upload" 14 15 # 上傳的文件參數 16 files = { 17 "pic": ("test01.gif", open("test01.gif", "rb"), "images/git") 18 } 19 # 其他的參數 20 data = { 21 "nickname": "木森", 22 "age": 18, 23 "sex": "男", 24 } 25 # 發送請求 26 response = requests.post(url=url, files=files, data=data) 27 # 打印結果 28 print(response.json())
運行以上代碼,結果如下:
{ 'code': 1, 'data': { 'age': '18', 'datetime': 'Fri, 13 Mar 2020 10:32:24 GMT', 'filename': 'test01.gif', 'name': '木森', 'sex': '男'}, 'msg': '文件上傳成功,文件保存的地址為:http://127.0.0.1:5000/images/test01.gif' }
PS:很神奇有木有,上傳成功了,附上一張圖