Python介面自動化測試之檔案上傳
阿新 • • 發佈:2018-12-18
在介面測試中,經常會涉及到檔案上傳,檔案上傳一般包含的檔案是圖片,視訊以及如csv,excel,記事本等檔案,它的請求頭中Content-Type對應的value值是multipart/form-data,這裡依據實際的案例來說明檔案上傳的具體案例。這裡以網際網路產品人人網為案例,人人網上傳成功後,在個人的主頁,上傳圖片,見上傳圖片的請求引數如下圖所示:
見圖片上傳請求頭的資訊如下圖所示:
在上傳檔案的請求引數中,其它引數都比較好處理,檔案的這部分,必須要指定檔案的路徑,檔案的Content-Type型別,其實可以在Raw中可以看到,見如下圖所示:
那麼檔案部分的請求引數具體就為:
files = {"file":("wx.jpg", open("c:/wx.jpg", "rb"), "image/jpeg",{})}
這地方特別需要強調的是file其實就是請求引數中的file,必須與請求引數中的引數名稱一一對應,在請求頭中cookie比較很好處理,直接在登入成功後,獲取到r.cookies並且把該內容返回。那麼檔案上傳的完整業務流是先登入系統,登入成功後再進行上傳檔案,見實現的全部原始碼:
#!/use/bin/env python #coding:utf-8 #Author:WuYa import requests def loginData(): data = { 'email': '13484545195', 'icode': '', 'origURL': 'http://www.renren.com/home', 'domain': 'renren.com', 'key_id': 1, 'captcha_type': 'web_login', 'password': '8d9a71152919613bbe3df9bfa0e1b390eb2b13dd1bdde270c2816cf04dd1b7c5', 'rkey': 'b4cdc6acc1d36171e3de73dd4676208e', 'f': 'http%3A%2F%2Fname.renren.com%2F'} return data def login(): r = requests.post( url='http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=201894216799', data=loginData(), headers={'Content-Type': 'application/x-www-form-urlencoded'}) return r.cookies def uploadData(): data = { "upload": "提交", "__channel": "renren", "privacyParams": '{"sourceControl": 99}', 'hostid': '967004081', 'requestToken': '-1124080368', '_rtk': '88c0e36a'} return data def upload(): r = requests.post( url='http://upload.renren.com/upload.fcgi?pagetype=addpublishersingle&hostid=967004081&' 'callback=window.parent.handlePhotoData&uploadid=profile_publisher_photo_1540215890321', data=uploadData(), headers={'Conteny-Type': 'multipart/form-data'}, files={"file": ("wx.jpg", open("c:/wx.jpg", "rb"), "image/jpeg", {})}, cookies=login()) print(r.status_code) print(r.text) if __name__ == '__main__': upload()