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 ...
随机推荐
- CF911B
题解: 枚举一下x x<=min(a,b) 然后判断a/x+b/x是否>=x 代码: #include<bits/stdc++.h> using namespace std; ...
- 2018-2019-2 《网络对抗技术》Exp2 后门原理与应用 20165210
2018-2019-2 <网络对抗技术>Exp2 后门原理与应用 20165210 实验内容: 使用netcat获取主机操作Shell,cron启动. 使用Socat获取主机操作Shell ...
- L153
警言是指传达一般真理或某种言论的短小句子.An aphorism is a short witty sentence which expresses a general truth or commen ...
- ECMAScript 6.0 学习笔记
1.ECMAScript 6.0(也就是ES2015 以下简称 ES6)是 JavaScript 语言的下一代标准,已经在2015年6月正式发布了.它的目标,是使得 JavaScript 语言可以用来 ...
- iOS 阶段学习第六天笔记(数组)
iOS学习( ...
- [Err] 1449 - The user specified as a definer ('student'@'%') does not exist
1.错误描述 [SQL]use student; 受影响的行: 0 时间: 0.001s [SQL] call alter_student('t_student','MODIFY COLUMN `we ...
- js 由快到慢的执行
let t=0; for(var i=0;i<len;i++){ (function (t) { $timeout(function(){ console.log(t); },t); })(t) ...
- Ubuntu下使用openssl为apache2配置ssl
安装apache2 sudo apt-get install apache2 安装openssl 一般系统自带,可以通过openssl version查看,如果没有, sudo apt-get ins ...
- Eclipse中注释方法操作(两种)
Eclipse 中的两种注释方法:(1)多行注释 /* */ (2)单行注释 // 多行注释操作方法. 选中注释部分-菜单栏右上角 source: Add block comment.必须选中需要注释 ...
- jquery resize监听dom
添加如下代码即可(function($,h,c){var a=$([]),e=$.resize=$.extend($.resize,{}),i,k="setTimeout",j=& ...