python接口自动化19-requests-toolbelt处理multipart/form-data
requests-toolbelt
1.官方文档地址:requests-toolbelt官方文档
2.环境安装
pip install requests-toolbelt

multipart/form-data传文件
from requests_toolbelt import MultipartEncoder
import requests
m = MultipartEncoder(
fields={'field0': 'value',
'field1': 'value',
'field2': ('filename', open('file.py', 'rb'), 'text/plain')}
)
r = requests.post('http://httpbin.org/post',
data=m,
headers={'Content-Type': m.content_type})
multipart/form-data表单提交(传非文件)
from requests_toolbelt import MultipartEncoder
import requests
m = MultipartEncoder(
fields={'field0': 'value',
'field1': 'value'})
r = requests.post('http://httpbin.org/post',
data=m,
headers={'Content-Type': m.content_type})
多个文件参数重复
1.参数重复的时候,就不用字典了,用list类型
from requests_toolbelt import MultipartEncoder
import requests
m = MultipartEncoder(
fields = [
('source', ('f1.ext', f1, 'application/x-example-mimetype'),
('source', ('f2.ext', f2, 'application/x-example-mimetype'),
]
)
r = requests.post('http://httpbin.org/post',
data=m,
headers={'Content-Type': m.content_type})
参考代码:
# coding:utf-8
import requests
from requests_toolbelt import MultipartEncoder
host = 'http://127.0.0.1:81' # 禅道的服务器地址
def login(s,user="admin",psw="e10adc3949ba59abbe56e057f20f883e"):
u'''登录禅道'''
loginUrl = host+"/zentao/user-login.html"
h = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
"Accept-Encoding": "gzip, deflate",
"Referer": host+"/zentao/user-login.html",
# "Cookie": # 头部没登录前不用传cookie,因为这里cookie就是保持登录的
"Connection": "keep-alive",
"Content-Type": "application/x-www-form-urlencoded",
}
body = {"account": user,
"password": psw,
"keepLogin[]": "on",
"referer": host+"/zentao/my/"
}
try:
r = s.post(loginUrl, data=body, headers=h)
print(r.content) # 打印结果看到location='http://127.0.0.1/zentao/my/'说明登录成功了
if "/zentao/my/" in r.content:
print("登录成功!")
return True
else:
print("登录失败:%s" % r.content)
return False
except Exception as msg:
print("登录失败:%s"%str(msg))
return False
def upload_jpg(s):
u'''上传图片'''
url1 = host+"/zentao/file-ajaxUpload-5a26aca290b59.html?dir=image"
m = MultipartEncoder(
fields={
"localUrl": (None, "1.png"),
"imgFile": ("1.png", open("d:\\1.png", "rb"), "image/png")
})
try:
r1 = s.post(url1, data=m, headers={'Content-Type': m.content_type})
jpg_url = r1.json()["url"]
return jpg_url
except Exception as msg:
print("上传失败:%s"%str(msg))
return ""
def submit_bug(s,jpg_url,title="yoyoketang-这是一个带附件的内容"):
# 提交bug, 带上附件
url2 = host+"/zentao/bug-create-1-0-moduleID=0.html"
m = MultipartEncoder(
fields = [
("product", "1"),
("module","0"),
("project", ""),
("openedBuild[]", "trunk"),
("assignedTo", "admin"),
("type", "codeerror"),
("os", "all"),
("browser", "all"),
("color", ""),
("title", title), # bug标题参数化
("severity", "3"),
("pri", "0"),
("steps", u'<p>[步骤]</p>\
<p>1、第一步点</p>\
<p>2、第二步点</p>\
<p>3、点三步点</p>\
<p>[结果]</p>\
<p><img src="%s" alt="" /></p>\
<p>[期望]</p>' % jpg_url), # 正文图片地址参数
("story", "0"),
("task", "0"),
("mailto[]", ""),
("keywords", ""),
# 这里的四个参数就是上传文件附件了
("files[]", ("1.png", open("d:\\1.png", "rb"), "image/png")), # 附件1
("labels[]", "tu1"),
("files[]", ("2.png", open("d:\\2.png", "rb"), "image/png")), # 附件1
("labels[]", "tu2"),
("uid", "5a2955c884f98"),
("case", "0"),
("caseVersion", "0"),
("result", "0"),
("testtask", "0")
])
try:
r2 = s.post(url2, data=m, headers={'Content-Type': m.content_type})
print r2.content
except Exception as msg:
print("提交BUG失败:%s"%str(msg))
if __name__ == "__main__":
s = requests.session() # 保持会话
login(s, user="admin", psw="e10adc3949ba59abbe56e057f20f883e") # 登录
jpg = upload_jpg(s) # 上传图
# 获取上传图片后用的url地址传给提交bug的正文
submit_bug(s, jpg, title="yoyoketang-这是一个带附件的内容")
python接口自动化19-requests-toolbelt处理multipart/form-data的更多相关文章
- python接口自动化测试之requests库详解
前言 说到python发送HTTP请求进行接口自动化测试,脑子里第一个闪过的可能就是requests库了,当然python有很多模块可以发送HTTP请求,包括原生的模块http.client,urll ...
- Python接口自动化【requests处理Token请求】
首先说一下使用python模拟登录或注册时,对于带token的页面怎么登录注册模拟的思路: 1.对于带token的页面,需要先从最开始的页面获取合法token 2.然后使用获取到的合法token进行后 ...
- python接口自动化:requests+ddt+htmltestrunner数据驱动框架
该框架分为四个包:xc_datas.xc_driven.xc_report.xc_tools. xc_datas:存放数据,xc_driven:存放执行程序,xc_report:存放生成的报告,xc_ ...
- python接口自动化(十一)--发送post【data】(详解)
简介 前面登录博客园的是传 json 参数,由于其登录机制的改变没办法演示,然而在工作中有些登录不是传 json 的,如 jenkins 的登录,这里小编就以jenkins 登录为案例,传 data ...
- python接口自动化(十)--post请求四种传送正文方式(详解)
简介 post请求我在python接口自动化(八)--发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等.我们要知道post请求四种传送正文方式首先需要先 ...
- python接口自动化16-multipart/form-data上传图片
前言 在提交表单操作的时候,经常会遇到图片上传的操作,图片上传是一个单独的接口,本篇以禅道为例,介绍如何上传图片 上传接口 1.以禅道上提交bug为例,在选择图片时,点确定按钮,就是上传图片了 2.用 ...
- python接口自动化25-发xml格式post请求
前言 post请求相对于get请求多一个body部分,body部分常见的数据类型有以下四种(注意是常见的,并不是只有4种) application/x-www-form-urlencoded appl ...
- python接口自动化-Cookie_绕过验证码登录
前言 有些登录的接口会有验证码,例如:短信验证码,图形验证码等,这种登录的验证码参数可以从后台获取(或者最直接的可查数据库) 获取不到也没关系,可以通过添加Cookie的方式绕过验证码 前面在“pyt ...
- python接口自动化28-requests-html爬虫框架
前言 requests库的好,只有用过的人才知道,最近这个库的作者又出了一个好用的爬虫框架requests-html.之前解析html页面用过了lxml和bs4, requests-html集成了一些 ...
- python接口自动化-参数化
原文地址https://www.cnblogs.com/yoyoketang/p/6891710.html python接口自动化 -参数关联(一)https://www.cnblogs.com/11 ...
随机推荐
- 转载-lvs官方文档-Linux服务器集群系统(二)
Linux服务器集群系统(二) LVS集群的体系结构 章文嵩 (wensong@linux-vs.org) 2002 年 4 月 本文主要介绍了LVS集群的体系结构.先给出LVS集群的通用体系结构,并 ...
- asp.net设置gridview页码显示遇到的问题
问题:分页部分显示的页码撑开占满整个表格底部 解决方法: 1.通过浏览器察看源,发现是分页部分的table样式受到整个页面的table设置的样式的影响,分页是一个tr里面的td里面的table 2.设 ...
- 深度学习(六十七)metal forge深度学习库使用
1.设置输入: let input = Input() 或者 let input = Input(width: 100, height: 100, channels: 3) 2.创建网络: let o ...
- python中的字典两种遍历方式
dic = {"k1":"v1", "k2":"v2"} for k in dic: print(dic[K]) for ...
- U盘格式和对齐扇数(常识)
一.文件系统常见的四种格式:FAT16.FAT32.NTFS.ExFAT. 虽然四种文件系统的存储方式和特性各不相同,但对于传输速度并不快的存储卡和U盘来说, 实际传输性能却大同小异,理论测试数据相差 ...
- Lua table
获取数组长度 在Lua中可以使用“#”和table.maxn两种方法来获取数组的长度 arr = {,,,} arr[] = 7 都仅统计数字key的长度: #是从1递增到nil的长度: table. ...
- iOS应用截屏
iPhone自从推出后就自带了截屏功能,简单而易用,所以应用就没什么截屏的需求了,不过有些时候我们还是会遇到这个需求.比如,我们开发了一个播放器,用openGL进行video render,此时直接截 ...
- iphone——日期处理
http://blog.csdn.net/lingedeng/article/details/6996599 Dates NSDate类提供了创建date,比较date以及计算两个date之间间隔的功 ...
- python3 的字符串格式判断
在python编程中,我们经常要面临将字符串进行转换的情况,那么字符串是否符合转换的要求呢?python中内置了字符串类的方法供我们使用进行字符串格式的判断. 1.isalnum() 所有字符都是数字 ...
- 洛谷P1309 瑞士轮
传送门 题目大意: 2*n个人,有初始的比赛分数和实力值. 每次比赛前总分从大到小排序,总分相同编号小的排在前面. 每次比赛是1和2比,3和4比,5和6比. 实力值大的获胜得1分. 每次比赛前排序确定 ...