# 以在禪道上傳文件為例:
一、創建一個類,類里面寫一個登錄方法:
import requests
class LoginZentao():
def __init__(self, s): # 初始化
self.s = s # 定義一個全局的s
def login(self):
r = self.s.post() # self.s調用全局的s
pass
if __name__=='__main__':
s = requests.session()
zentao = LoginZentao(s) # 類實例化為對象,傳入參數s
zentao.login() # 調用zentao里面的login() 方法
二、上傳圖片接口:
# 文件上傳:content-Type: multipart/form-data類型
import requests
class SendFile():
def __init__(self, s):
self.s = s
def sendImg(self, jpgpath, jpgname='1.jpg', jpgtype='image/jpeg'):
# 登錄並更新cookies
f = open('1.jpg', 'rb') # 絕對路徑
url2 = ''
body = {
'localurl': (None, jpgname),
'imgFile': ('1.jpg', open(jpgpath, 'rb'), jpgtype)
# 1、絕對路徑 2、open('1.jpg', 'rb') 3、content-type的值
}
# 上傳圖片的時候,不data和json,用files
r = self.s.post(url2, files=body) # 1、調用全局的s,用self.s 2、files
print(r.text)
# 上傳到服務器,每傳一次地址都不一樣
# 解決拋異常
try:
jpg_url = r.json()['url'] # (相對路徑)
print(jpg_url)
return jpg_url
except Exception as msg: # 返回報錯信息
print('圖片上傳失敗,原因:%s'%msg) # 打印報錯信息
# raise # 主動拋原始異常
# raise ··· # 拋出異常內容為:“···”
return ''
if __name__=='__main__':
s = requests.session()
from test.test_009_003_zentaologin import LoginZentao
# 調登錄方法
login = LoginZentao(s) # 實例化類LoginZentao為對象
login.login()
# 上傳文件
send = SendFile(s) # 把類sendfile()實例化為對象
send.sendImg() # 調用sendfile()里面的sendImg方法
三、編寫、執行測試用例:
import unittest
import requests
from test.test_009_003_zentaologin import LoginZentao # 從文件夾.文件名導入LoginZentao類
from test.test_009_002_sendfile import SendFile # 從文件夾.文件名導入sendfile類
import os
# 獲取文件路徑
parpath = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) # 定位當前文件夾
jpgpath = os.path.join(parpath, 'testdata', '1.jpg') # “testdata”:存放文件的文件夾名,“1.jpg”:文件名
class TestSendFile(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.s = requests.session()
# 實例化調用的類
cls.login = LoginZentao(cls.s ) # 實例化類LoginZentao為對象
cls.send = SendFile(cls.s) # 把類sendfile()實例化為對象
def test_01(self):
# 上傳文件:第一步,登錄
self.login.login()
# 第二步,傳文件
result = self.send.sendImg(jpgpath)
# 第三步:斷言:返回的結果里面包含'.jpg'
self.assertIn('.jpg', result)
# # 調登錄方法
# login = LoginZentao(s) # 實例化類LoginZentao為對象
# login.login()
# # 上傳文件
# send = SendFile(s) # 把類sendfile()實例化為對象
# send.sendImg() # 調用sendfile()里面的sendImg方法