python接口自动化16-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": '

[步骤]

\

1、第一步点

\

2、第二步点

\

3、点三步点

\

[结果]

\

\

[期望]

',

"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": '

[步骤]

\

1、第一步点

\

2、第二步点

\

3、点三步点

\

[结果]

\

\

[期望]

',

"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

```

本文来自企鹅号 - 从零开始学自动化测试媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Hongten

Struts2 ActionMethod DMI(动态方法调用)

如:<action name="user" class="com.b510.hongten.UserAction" method="add">

1192
来自专栏从零开始学自动化测试

python接口自动化16-multipart/form-data上传多个附件

前言 reuqests上传一张图片到服务器,前面已经介绍过了,那么如何在提交BUG的时候,上传附件呢? 上传附件的时候,文件的name参数名称是一样的,pyt...

3214
来自专栏iOSDevLog

Action API目录

2979
来自专栏企鹅号快讯

如何通过Smem命令行检查Ubuntu上的内存使用情况

如何检查Ubuntu Linux上的内存使用情况,我们可以安装并使用Smem内存报告工具来显示Ubutnu Linux系统上的内存使用情况。 Smem是一个命令...

2238
来自专栏王磊的博客

ReactNative环境搭建扩展篇——安装后报错解决方案

之前一篇写了《逻辑性最强的React Native环境搭建与调试》说了RN的安装,今天在这里做一个复盘,让我们能够更直观更深入的了解React Native(以...

3488
来自专栏开源优测

分享 | 使用Grafana实现 Jmeter实时监控

作者博客: http://www.jianshu.com/u/be71e0f7ca59

1651
来自专栏黑白安全

PHPWindv7.5-v8.0最新漏洞利用

前几天在危险漫步的博客看到一篇关于PHPWind v7.5/v8.0漏洞的文章,考虑到PHPWind是国内著名的论坛程序,利用它建站的网站非常多,我顿时来了兴趣...

812
来自专栏沈唁志

Python爬虫常用的小技巧-设置代理IP

1705
来自专栏SDNLAB

Open vSwitch源码阅读笔记(下)

引言 本文主要对OpenvSwitch(基于2.3.90版本)重点模块的源码实现流程做了简要的阅读记录,Open vSwitch源码阅读笔记(上)已提供,此篇是...

3396
来自专栏叔叔的博客

cookie、session、token三者使用

区别 cookie是保存客户端的数据。 session是保存在服务端的数据。 token是个令牌。 登陆实现demo 登陆的记住密码 这里使用到cookie,登...

33710

扫码关注云+社区