前言
httprunner上传文件接口,其实跟requests上传文件的接口是一样的,之前在python接口系列里面有案例 python接口自动化16-multipart/form-data上传图片
用fiddler抓包,查看抓到的接口,以下这种接口就是multipart/form-data
——————————————-22165374713946 Content-Disposition: form-data; name=”localUrl”
yoyoketang.png ——————————————-22165374713946 Content-Disposition: form-data; name=”imgFile”; filename=”yoyoketang.png” Content-Type: image/png
上传文件的时候用 files= 去接受请求参数,请求参数是字典类型,根据fiddler的抓包去拼接请求参数,比如我们抓包看到的文件参数
Content-Disposition: form-data; name=”imgFile”; filename=”yoyoketang.png” Content-Type: image/png
那么 key 就是 name= 后面的值”imgFile”, value值是一个元祖类型(list类型也可以),
import requests
s = requests.session() # 保持会话
# 上车文件地址
url1 = "http://127.0.0.1:81/zentao/file-ajaxUpload-5a26aca290b59.html?dir=image"
f ={
"localUrl": (None,"1.png"),
"imgFile": ("1.png", open("d:\\1.png", "rb"), "image/png")
}
r = s.post(url1, files=f)
try:
jpgurl = base+r.json()["url"]
print(u"上传图片后的url地址:%s"%jpgurl)
except Exception as msg:
print(u"返回值不是json格式:%s"%str(msg))
print(r.content)
如果上面的脚本确定能跑的通,再去写httprunner脚本,以下只是一个请求示例
- config:
name: 上传文件
variables: {}
- test:
name: files
request:
files:
imgFile: ['name35.jpg', '${get_file()}','image/jpeg']
headers:
Authorization: Bearer 登陆的token
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
method: POST
url: http://x.x.x.x/path/files
validate:
- eq:
- status_code
- 200
- eq:
- headers.Content-Type
- application/json;charset=UTF-8
get_file() 读取文件的方法写在debugtalk.py文件
# debugtalk.py
# 读取文件内容
def get_file(filePath="name35.jpg"):
return open(filePath, "rb")
filePath是你图片放的地址,如果不在一个目录就写绝对路径,在同一目录可以直接写文件名称