python接口自动化18-multipart/form-data上传多个附件
前言
reuqests上传一张图片到服务器,前面已经介绍过了,那么如何在提交BUG的时候,上传附件呢?
上传附件的时候,文件的name参数名称是一样的,python里面key是不可以重复的,又如何处理参数名称相同的情况?
上传附件
1.以禅道提交BUG的时候上传附件为例

2.fiddler抓包看请求参数,查看到文件上传的参数如下

上传一个附件
1.之前学了一篇ultipart/form-data文件上传,然后学了一篇ultipart/form-data表单提交,这里文件上传,就是把两篇的知识点加起来
2.把参数分开,表单的数据用data提交,文件附件用files提交
# -----------------------前面先登录步骤省略了-------------
# 提交bug, 带上附件
url1 = host+"/zentao/bug-create-1-0-moduleID=0.html"
d= {
"product": "1",
"module": "0",
"project": "",
"openedBuild[]": "trunk",
"assignedTo": "admin",
"type": "codeerror",
"os": "all",
"browser": "all",
"color": "",
"title": "yoyoketang-这是一个带附件的1",
"severity": "3",
"pri": "0",
"steps": '<p>[步骤]</p>\
<p>1、第一步点</p>\
<p>2、第二步点</p>\
<p>3、点三步点</p>\
<p>[结果]</p>\
<p><img src="data/upload/1/201712/072254170557cdn.png" alt="" /></p>\
<p>[期望]</p>',
"story": "0",
"task": "0",
"mailto[]": "",
"keywords": "",
# "files[]": ("1.png", open("d:\\1.png", "rb"), "image/png"),
# "labels[]": "tu1",
"uid": "5a2955c884f98",
"case": "0",
"caseVersion": "0",
"result": "0",
"testtask": "0"
}
file = {
"files[]": ("1.png", open("d:\\1.png", "rb"), "image/png"),
"labels[]": "tu1",
}
r = s.post(url1, data=d, files=file) # 分开传
print r.content
传多个附件
1.传多个文件的时候如下,这两个参数的name都是一样的,如果用字典去传key值,很显然python的key值是不能重复的
Content-Disposition: form-data; name="files[]"; filename="1.png"
Content-Type: image/png
Content-Disposition: form-data; name="files[]"; filename="2.png"
Content-Type: image/png
2.这时候需要换个格式,传list数据
# file = {
# "files[]": ("1.png", open("d:\\1.png", "rb"), "image/png"),
# "labels[]": "tu1",
# }
#-------------多个文件用list类型------------
file = [
("files[]", ("2.png", open("d:\\1.png", "rb"), "image/png")),
("labels[]", "tu1"),
("files[]", ("2.png", open("d:\\2.png", "rb"), "image/png")),
("labels[]", "tu2"),
]
3.上传之后,查看禅道上是可以提交成功的

参考代码
# coding:utf-8
import requests
base = 'http://127.0.0.1:81' # 禅道的服务器地址
loginUrl = base+"/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": base+"/zentao/user-login.html",
# "Cookie": # 头部没登录前不用传cookie,因为这里cookie就是保持登录的
"Connection": "keep-alive",
"Content-Type": "application/x-www-form-urlencoded",
}
body = {"account":"admin",
"password":"e10adc3949ba59abbe56e057f20f883e",
"keepLogin[]":"on",
"referer":base+"/zentao/my/"
}
s = requests.session() # 保持会话
r = s.post(loginUrl, data=body, headers=h)
print r.content # 打印结果看到location='http://127.0.0.1/zentao/my/'说明登录成功了
# 提交bug, 带上附件
url1 = base+"/zentao/bug-create-1-0-moduleID=0.html"
f = {
"product": "1",
"module": "0",
"project": "",
"openedBuild[]": "trunk",
"assignedTo": "admin",
"type": "codeerror",
"os": "all",
"browser": "all",
"color": "",
"title": "yoyoketang-这是一个带附件的1和2",
"severity": "3",
"pri": "0",
"steps": '<p>[步骤]</p>\
<p>1、第一步点</p>\
<p>2、第二步点</p>\
<p>3、点三步点</p>\
<p>[结果]</p>\
<p><img src="data/upload/1/201712/072254170557cdn.png" alt="" /></p>\
<p>[期望]</p>',
"story": "0",
"task": "0",
"mailto[]": "",
"keywords": "",
# "files[]": ("1.png", open("d:\\1.png", "rb"), "image/png"),
# "labels[]": "tu1",
"uid": "5a2955c884f98",
"case": "0",
"caseVersion": "0",
"result": "0",
"testtask": "0"
}
# file = {
# "files[]": ("1.png", open("d:\\1.png", "rb"), "image/png"),
# "labels[]": "tu1",
# }
#-------------多个文件用list类型------------
file = [
("files[]", ("2.png", open("d:\\1.png", "rb"), "image/png")),
("labels[]", "tu1"),
("files[]", ("2.png", open("d:\\2.png", "rb"), "image/png")),
("labels[]", "tu2"),
]
r = s.post(url1, data=f, files=file)
print r.content
---------------------------------python接口自动化完整版-------------------------
全书购买地址 https://yuedu.baidu.com/ebook/585ab168302b3169a45177232f60ddccda38e695
作者:上海-悠悠 QQ交流群:588402570
也可以关注下我的个人公众号:
python接口自动化18-multipart/form-data上传多个附件的更多相关文章
- python接口自动化测试二十四:上传多个附件,参数化
# 添加多个附件参数化files = [("1.png", "1.png") ("2.png", "2.png") ]d ...
- python接口自动化测试二十三:文件上传
# 以禅道为例: 一.创建一个类,类里面写一个登录方法: import requestsclass LoginZentao(): def __init__(self, s): # 初始化 self.s ...
- 【python+selenium自动化】基于Autolt实现上传
在UI自动化过程中,总会遇到文件上传的操作,一般的,标签为input,可以直接使用sendkeys 如果他仅仅是一个button,那则无法直接sendkeys,则需要用到autoIT这个工具 基于Au ...
- python接口自动化11-post传data参数案例
前言: 前面登录博客园的是传json参数,有些登录不是传json的,如jenkins的登录,本篇以jenkins登录为案例,传data参数. 一.登录jenkins抓包 1.登录jenkins,输入账 ...
- python接口自动化25-发xml格式post请求
前言 post请求相对于get请求多一个body部分,body部分常见的数据类型有以下四种(注意是常见的,并不是只有4种) application/x-www-form-urlencoded appl ...
- python接口自动化(十)--post请求四种传送正文方式(详解)
简介 post请求我在python接口自动化(八)--发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等.我们要知道post请求四种传送正文方式首先需要先 ...
- python接口自动化16-multipart/form-data上传图片
前言 在提交表单操作的时候,经常会遇到图片上传的操作,图片上传是一个单独的接口,本篇以禅道为例,介绍如何上传图片 上传接口 1.以禅道上提交bug为例,在选择图片时,点确定按钮,就是上传图片了 2.用 ...
- python接口自动化4-绕过验证码登录(cookie)
前言 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接). 获取不到也没关系,可以通过添加cookie的方式绕过验证码. 一.抓登录coo ...
- python接口自动化3-自动发帖(session)
前言 上一篇模拟登录博客园,但这只是第一步,一般登录后,还会有其它的操作,如发帖,评论等,这时候如何保持会话呢? (敲黑板!!!由于博客园最近登录机制变了,登录全部走cookie登录) 一.sessi ...
随机推荐
- zk集群部署
一.环境准备 当前环境:centos7.3三台软件版本:zookeeper-3.5.2部署目录:/usr/local/zookeeper启动端口:2181配置文件:/usr/local/zookeep ...
- Tensorflow问题
TypeError: 'urban' has type str, but expected one of: bytes 在前面添加"b"(例如,b'urban'),或者处理为var ...
- vue前端项目中excel文件下载
模仿 https://github.com/PanJiaChen/vue-element-admin/ 的下载 创建文件夹vendor 创建文件 Export2Excel.js 内容: /* esli ...
- [LeetCode] 401. Binary Watch 二进制表
A binary watch has 4 LEDs on the top which represent the hours (0-11), and the 6 LEDs on the bottom ...
- [LeetCode] 461. Hamming Distance 汉明距离
The Hamming distance between two integers is the number of positions at which the corresponding bits ...
- nightmare API
nightmare API 简单介绍 2016-04-18 nightmare 的 API 不是特别的多,平常使用比较多的主要是配置 nightmare 以及与页面交互的相关API,这里是官方给出的 ...
- Dubbo版本升级
一.背景 早期内部使用的是当当网fork的Dubbox,由于现在Dubbo又开始重新维护,而且阿里将其捐献给了Apache,并成为了Apache的顶级项目.因此dubbo版本升级到2.7.1势在必行. ...
- idea创建一个springboot项目
第一种通过maven创建: 1.点击Create New Project 2.创建maven项目,选择jdk版本,点击next. 3.填写GroupId和ArtifactId,都是自定义的,然后点击n ...
- git pull时 git cannot lock ref XXXXXX (unable to update local ref)错误解决方案
git pull : git cannot lock ref XXXXXX (unable to update local ref) pull代码的时候出现的错误,导致代码拉不下来. 看了一下 ...
- 有关java中的try{}catch(){}的讲解
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qq_38225558/article/d ...