接口測試中request上傳文件


 

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:很神奇有木有,上傳成功了,附上一張圖

 

 

 

轉載自:https://www.cnblogs.com/Simple-Small


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM