专栏首页从零开始学自动化测试httprunner学习25-文件上传multipart/form-data

httprunner学习25-文件上传multipart/form-data

前言

httprunner上传文件接口,其实跟requests上传文件的接口是一样的,之前在python接口系列里面有案例 python接口自动化16-multipart/form-data上传图片

文件上传multipart/form-data

用fiddler抓包,查看抓到的接口,以下这种接口就是multipart/form-data

  • Content-Type: multipart/form-data
  • body参数是这种格式:

——————————————-22165374713946 Content-Disposition: form-data; name=”localUrl”

yoyoketang.png ——————————————-22165374713946 Content-Disposition: form-data; name=”imgFile”; filename=”yoyoketang.png” Content-Type: image/png

对应的python代码

上传图片

上传文件的时候用 files= 去接受请求参数,请求参数是字典类型,根据fiddler的抓包去拼接请求参数,比如我们抓包看到的文件参数

Content-Disposition: form-data; name=”imgFile”; filename=”yoyoketang.png” Content-Type: image/png

那么 key 就是 name= 后面的值”imgFile”, value值是一个元祖类型(list类型也可以),

  • 第一个参数是文件名称: “xxx.jpg”
  • 第二个参数是open打开文件的对象如: open(‘filepath’,’rb’)
  • 第三个参数是文件类型Content-Type后面对应的值: image/png
 
import requests

s = requests.session()  # 保持会话

# 上车文件地址
url1 = "http://127.0.0.1:81/zentao/file-ajaxUpload-5a26aca290b59.html?dir=image"

f ={
    "localUrl": (None,"1.png"),
    "imgFile": ("1.png", open("d:\\1.png", "rb"), "image/png")
  }
r = s.post(url1, files=f)
try:
    jpgurl = base+r.json()["url"]
    print(u"上传图片后的url地址:%s"%jpgurl)
except Exception as msg:
    print(u"返回值不是json格式:%s"%str(msg))
    print(r.content)

httprunner脚本

如果上面的脚本确定能跑的通,再去写httprunner脚本,以下只是一个请求示例

-   config:
        name: 上传文件
        variables: {}
-   test:
        name: files
        request:
            files:
                imgFile: ['name35.jpg', '${get_file()}','image/jpeg']
            headers:
                Authorization: Bearer 登陆的token
                User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
            method: POST
            url: http://x.x.x.x/path/files
        validate:
        -   eq:
            - status_code
            - 200
        -   eq:
            - headers.Content-Type
            - application/json;charset=UTF-8

get_file() 读取文件的方法写在debugtalk.py文件

# debugtalk.py

# 读取文件内容
def get_file(filePath="name35.jpg"):
    return open(filePath, "rb")

filePath是你图片放的地址,如果不在一个目录就写绝对路径,在同一目录可以直接写文件名称

本文分享自微信公众号 - 从零开始学自动化测试(yoyoketang),作者:上海悠悠

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

原始发表时间:2019-11-15

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python接口自动化14-multipart/form-data上传图片

    前言 在提交表单操作的时候,经常会遇到图片上传的操作,图片上传是一个单独的接口,本篇以禅道为例,介绍如何上传图片 一、上传接口 1.以禅道上提交bug为例,...

    上海-悠悠
  • selenium+python自动化78-autoit参数化与批量上传

    前言 前一篇autoit实现文件上传打包成.exe可执行文件后,每次只能传固定的那个图片,我们实际测试时候希望传不同的图片。 这样每次调用的时候,在命令行里面加...

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

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

    上海-悠悠
  • 【实战】利用鸡肋上传点配合beef劫持游览器权限

    在项目中遇到一个上传图片点,尝试绕过测试后始终没能成功,脚本上传成功后也无法利用解析,修改任何位置,都以404返回,测试后发现:

    用户1631416
  • 渲染平台对话Isotropix | 深入了解Clarisse的颠覆与创新

    Isotropix是一家快速增长的全球性公司,致力于为VFX(视觉效果)和动画行业开发专业、高端的图形制作软件。自2012年发布了Clarisse的第一个版本后...

    Renderbus云渲染农场
  • Charles 4.2.1 HTTPS抓包

    马哥Python
  • 《进击的前端工程师》-Node.js事件循环

    事件循环的执行顺序从图中可以看出,每次的事件循环都包含了上图中的6个阶段,接下来我们来一一解读它们。

    童欧巴
  • 转载:POST请求的Content-Type

    https://imququ.com/post/four-ways-to-post-data-in-http.html

    gojam
  • Python3 图像识别(一)

    1.Python3.x(我是用的是Python3.6.5),这个问题不大,只要3.4以上就OK。

    用户2398817
  • 中国IT圈的1024程序节礼品图鉴

    腾讯云通信团队

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动