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)
接口返回值如下: