python3.7上傳文件與下載文件,excel舉例說明

python3.7上傳excel與下載excel,測試接口中,會遇到上傳的文件是excel\jpg圖片等,下載的文件也是excel\jpg圖片等情況;現在已excel文件舉例說明一下:

1、上傳文件:

1)先定義文件參數filexls = {‘file’: open( ‘D:\20190619 044103.xls’, ‘rb’)} 爲打開需要上傳的文件; 'D:\20190619 044103.xls’爲文件名
2)再調用接口參數,傳入requests,獲取接口返回值;

原代碼:

#上傳接口
import datetime
import itertools
import time
import requests
def FileUpload():
    url = "http://FileUpload" # 獲取url
    # header獲取
    header = { 'Cookie': 'ASP.NET_SessionId=session值'} #通常上傳文件一般是在登錄之後調用的接口,這裏需要調用登錄態
    n = 0
    filexls = {'file': open( 'D:\20190619 044103.xls', 'rb')}
    filexlsx = {'file': open('D:\20190619 044103.xlsx','rb')}
    filetxt = {'file': open('D:\注意事項.txt','rb')}
    filename = ('',filexls, filexlsx,filetxt)
    today = time.strftime('%Y%m%d', time.localtime(int(time.time())))
    Yesterday = (datetime.datetime.now() - datetime.timedelta(days=7)).strftime('%Y-%m-%d')
    ThreeMonthIn = (datetime.datetime.now() + datetime.timedelta(days=11)).strftime('%Y-%m-%d')
    Date = (‘’,Yesterday, today, ThreeMonthIn)
    remark = ('','上傳備註,可以爲空')
    for item in itertools.product(filename,entryDate,remark): #itertools.product爲排列組合取參數
        n = n + 1
        files1 = {'file': item[0]}
        files1 = list(files1.values())[0] #排列組合取參數爲dict格式,所以要從字典表裏取出values值傳給接口
        data = {'Date': item[1],
                'remark': item[2]
                }
        res = requests.post(url=url, files=files1,data=data,headers=header).text #上傳文件中會多一個傳參files=files1,接口參數爲filename 、Date、remark
        print(res)
    print('\033[1;31m' + 'TestCase 運行的數目:' + '\033[0m', n) #顯示運行的case數量

if __name__ == '__main__':
    FileUpload()

接口返回值如下:
上傳文件後,接口返回值

2、下載文件

1)先獲取接口返回的原始數據,res.raw能獲取接口返回的原始數據
2)再將接口返回的原始數據寫入文件,下載文件爲excel,則用excel寫入數據

原代碼:

#下載接口
import datetime
import itertools
import time
import requests

url = "http://ExportExcel" #獲取url
header = { 'Cookie': 'ASP.NET_SessionId=session值'} #通常上傳文件一般是在登錄之後調用的接口,這裏需要調用登錄態
method = 'get'
n = 0
serviceID = ('','123','421') #下載接口需要的參數
for item in itertools.product(serviceID): #itertools.product爲排列組合取參數
    n = n + 1
    data = {'serviceID': item[0]}
    res = requests.get(url=url, data=data,headers=header)
    if res.status_code  == 200: #接口返回的code爲200時,就進行下載操作
        now = datetime.datetime.now().strftime('%Y%m%d%H%M%S%f') #使用毫秒級的時間命名,能儘量解決同一個秒級時間只能下載一個文件的問題
        filename = 'D:/文件下載/' + now + '_導出記錄.xls' #file命名,自由選擇
        try:
            with  open(filename, 'wb') as  res.raw:  # res.raw接口返回值原始數據
                res.raw.write(res.content)  # 原始數據寫入文件中
                print('文件下載成功!!')
        except Exception as e:  #try捕獲異常,防止程序進入死循環
            print('文件下載失敗!!')
    else:
        print (res.text) #接口返回的code不爲200時,就打印接口返回值,res.text爲接口返回值的文本格式,也可根據需要打印res.json()
    print('\033[1;31m' + 'TestCase 運行的數目:' + '\033[0m', n)

接口返回值如下:
下載文件後,打印信息
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章