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

```

本文分享自微信公众号 - 从零开始学自动化测试(yoyoketang)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-12-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT派

基于OpenCV的摄像头圆心计算

导语:这几天,小编学习到了一个好玩的摄像头图像圆心计算的程序代码。另外,小编Tom邀请你一起搞事情! 在这份程序代码中,小编在Python3下运行,使用到...

40950
来自专栏IT派

Python做机器学习之路

导语:Python 可以说是现在最流行的机器学习语言,而且你也能在网上找到大量的资源。你现在也在考虑从 Python 入门机器学习吗?本教程或许能帮你成功上手,...

62970
来自专栏数说工作室

跟你说个事儿

大家好! 数说君最近在做一个生物大数据的项目汇报,忙成狗了。 因此这段时间更新比较少, 预计下周恢复。 将继续为大家带来: SAS正则表达式、python、我自...

36270
来自专栏IT派

GitHub最流行语言:JS 还第一,Python 反超 Java

转自:开源中国 ? GitHub Universe 是 GitHub 的年度盛会,今年10月10-12日,GitHub Universe 大会在旧金山召开。同时...

39780
来自专栏IT派

从零开始:手把手教你安装深度学习操作系统、驱动和各种python库!

为了研究强化学习,最近购置了一台基于 Ubuntu 和英伟达 GPU 的深度学习机器。尽管目前在网络中能找到一些环境部署指南,但目前仍然没有全面的安装说明。另外...

52880
来自专栏IT派

推荐|2017年最受数据科学欢迎的Top15个Python库!

如果你觉得好的话,不妨分享到朋友圈。 近几年Python已成为数据科学行业中大火的编程语言,我们将根据以往的经验来为大家总结一下数据科学家和工程师几个最实用的...

36240
来自专栏IT派

【源码】Python的开源人脸识别库:离线识别率高达99.38%

如果你觉得好的话,不妨分享到朋友圈。 以往的人脸识别主要是包括人脸图像采集、人脸识别预处理、身份确认、身份查找等技术和系统。现在人脸识别已经慢慢延伸到了ADAS...

1K60
来自专栏数说工作室

数说工作室 2017年干货总结

盘点2017年优质文章,并给出传送链接,方便大家取阅回顾。文末有福利~! 1、Python & R 代码对照速查表 文中将常用机器学习算法的Python和R代码...

39190
来自专栏IT派

干货 | PyTorch相比TensorFlow,存在哪些自身优势?

1、 PyTorch 课替代NumPy 使用:PyTorch 本身主要构件是张量——和 NumPy 看起来差不多。使得 PyTorch 可支持大量相同的 API...

2K40
来自专栏IT派

机器学习实战之Python3实现决策树算法

导语:今天这篇文章也是我们的志愿编辑写出来的文章哦,稳重介绍了如何在python3中实现自己的决策树算法并画出来!另外,小编Tom邀请你一起搞事情! 预备知识:...

59250

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励