前言

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
 # 上海悠悠,QQ交流群:750815713
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脚本,以下只是一个请求示例

 # 上海悠悠,QQ交流群:750815713
- 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是你图片放的地址,如果不在一个目录就写绝对路径,在同一目录可以直接写文件名称

httprunner学习25-文件上传multipart/form-data的更多相关文章

  1. MVC&WebForm对照学习:文件上传(以图片为例)

    原文  http://www.tuicool.com/articles/myM7fe 主题 HTMLMVC模式Asp.net 博客园::首页::  ::  ::  ::管理 5 Posts :: 0 ...

  2. Spring MVC学习笔记——文件上传

    1.实现文件上传首先需要导入Apache的包,commons-fileupload-1.2.2.jar和commons-io-2.1.jar 实现上传就在add.jsp文件中修改表单 enctype= ...

  3. nodejs学习之文件上传

    最近要做个图片上传的需求,因为服务端春节请假回家还没来,所以就我自己先折腾了一下,大概做出来个效果,后台就用了nodejs,刚开始做的时候想网上找一下资料,发现大部分资料都是用node-formida ...

  4. springMVC3学习(十一)--文件上传CommonsMultipartFile

    使用springMVC提供的CommonsMultipartFile类进行读取文件 需要用到上传文件的两个jar包 commons-logging.jar.commons-io-xxx.jar 1.在 ...

  5. requests 进阶用法学习(文件上传、cookies设置、代理设置)

    一.文件上传 1.模拟网站提交文件 提交此图片,图片名称:timg.jpg import requests files={ 'file':open('timg.jpg','rb') } respons ...

  6. JavaWeb学习总结——文件上传和下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  7. Struts2学习总结——文件上传与下载

    Struts2文件上传与下载 1.1.1新建一个Maven项目(demo02) 在此添加Web构面以及 struts2 构面 1.2.1配置Maven依赖(pom.xml 文件) <?xml v ...

  8. golang学习之文件上传

    首先是上传页面upload.html: <!doctype html> <html> <head> <meta charset="utf-8&quo ...

  9. 1.6(Spring MVC学习笔记)文件上传与下载

    一.文件上传 实现文件上传多数是采用表单提交数据, 但对于进行文件上传的表单需要满足一下几个条件 1.表单的method设置为post 2.表单的enctype设置为multipart/form-da ...

随机推荐

  1. Python爬虫练习

    例一:爬取信息关于'gbk' codec can't encode character '\xa0' in position 6: illegal 错误提示: #初始化class 得到对象 draw= ...

  2. C#:ref关键字和out关键字的区别

    1.在不使用关键字(比如ref关键字.out关键字等)修饰函数的情况下,大部分函数的参数是以值传递的方式,也就是说,“调用函数”在使用参数(比如myNumber)时,是把该参数复制多一份,然后将其传递 ...

  3. python 属性描述符

    import numbers class IntField: # 一个类只要实现了这个魔法函数,那么它就是属性描述符 #数据描述符 def __get__(self, instance, owner) ...

  4. 【More Effective C++ 条款1】仔细区别pointers和references

    1)操作符的差别 指针使用"*"和"->"操作符,而引用使用"."操作符 2)初始化的差别 有空指针,但是没有空引用,和const对象 ...

  5. Mysql load data infile 命令导入含中文csv源数据文件 【错误代码 1300】

    [1]Load data infile 命令导入含中文csv源数据文件 报错:Invalid utf8 character string: '??֧' (1)问题现象 csv格式文件源数据: 导入SQ ...

  6. Mysql系列(九)—— 性能分析explain执行计划

    explain是mysql中sql优化的一个重要手段.顾名思义,explain就是解释sql,用于表示sql是怎样执行的信息,即sql执行计划! 语法 explain statement statem ...

  7. redux的本质是一套行为解释系统

    redux的本质是一套行为解释系统. 首先构建解释系统: 然后使用解释系统对行为进行解释,进而完成对store和状态的维护.

  8. 【Navicat】使用navicat执行sql 查询速度很慢解决方法

    ========================== Navicat 远程连接Mysql执行普通sql速度慢问题: 场景: navicat可以连接上 远程服务器的mysql.但是在navicat执行最 ...

  9. SpringBoot热部署(实战)详解

    热部署是什么 大家都知道在项目开发过程中,常常会改动页面数据或者修改数据结构,为了显示改动效果,往往需要重启应用查看改变效果,其实就是重新编译生成了新的 Class 文件,这个文件里记录着和代码等对应 ...

  10. 去掉eslint代码校验

    找到.eslintrc文件,去掉extend下面的'@vue/standard'.