python接口自动化7-post文件上传
前言
文件上传在我们软件是不可少的,最多的使用是体现在我们后台,当然我们前台也会有。但是了解过怎样上传文件吗?这篇我们以禅道文档-创建文档,上传文件为例。
post请求中的:Content-Type:multipart/form-data 这种类型便是上传文件。

一、环境安装、抓包分析
1、pip install requests_toolbelt,post请求 multipart/form-data 类型
C:\Users\Administrator>pip install requests_toolbelt
Requirement already satisfied: requests_toolbelt in d:\path_python\lib\site-packages (0.9.1)
Requirement already satisfied: requests<3.0.0,>=2.0.1 in d:\path_python\lib\site-packages (from requests_toolbelt) (2.20.1)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in d:\path_python\lib\site-packages (from requests<3.0.0,>=2.0.1->requests_toolbelt) (3.0.4)
Requirement already satisfied: certifi>=2017.4.17 in d:\path_python\lib\site-packages (from requests<3.0.0,>=2.0.1->requests_toolbelt) (2019.6.16)
Requirement already satisfied: idna<2.8,>=2.5 in d:\path_python\lib\site-packages (from requests<3.0.0,>=2.0.1->requests_toolbelt) (2.7)
Requirement already satisfied: urllib3<1.25,>=1.21.1 in d:\path_python\lib\site-packages (from requests<3.0.0,>=2.0.1->requests_toolbelt) (1.24.3)

2、先抓下登录接口,因为先登录成功后才能上传文件。写上登录代码,让其能正常登录。
import requests s = requests.session()
login_url = 'http://127.0.0.1/zentao/user-login.html' # 登录url
data = 'account=admin&password=e10adc3949ba59abbe56e057f20f883e&keepLogin%5B%5D=on&referer=http%3A%2F%2F127.0.0.1%2Fzentao%2Fdoc-browse-1-byModule-0-id_desc-doc.html'
login_r = s.post(login_url, params=data) # 传 params 参数 r1 = s.get('http://127.0.0.1/zentao/doc-browse-1-byModule-0-id_desc-doc.html') # 登录访问的 html
print(r1.content.decode('utf-8'))

2、操作上传文件(文件我就上传一个桌面的:test.png),fiddler 切换至WebForms就看得比较清楚了。

二、写python代码请求
1、将抓包的接口写下,顺序:调试登录、上传、检查点。
2、也需导入模块from requests_toolbelt import MultipartEncoder
3、MultipartEncoder 传的参数注意,特别是图片参数,这里list里面元组:fields=[(name,value), (name2, value)]
4、禅道文件上传代码参考如下:
from requests_toolbelt import MultipartEncoder
import requests # 登录
s = requests.session()
login_url = 'http://127.0.0.1/zentao/user-login.html'
data = 'account=admin&password=e10adc3949ba59abbe56e057f20f883e&keepLogin%5B%5D=on&referer=http%3A%2F%2F127.0.0.1%2Fzentao%2Fdoc-browse-1-byModule-0-id_desc-doc.html'
login_r = s.post(login_url, params=data) # 传 params 参数 # 断言是否登录成功
r1 = s.get('http://127.0.0.1/zentao/doc-browse-1-byModule-0-id_desc-doc.html')
if '产品主库' in r1.content.decode('utf-8'):
print('登录成功')
else:print('登录失败') # 文件上传保存
# 传参数,name 对应 value,注意图片路径的填写。为空的一些参数不影响的去前提下可以删除。
s_url = 'http://127.0.0.1/zentao/doc-create-1-0.html'
body = MultipartEncoder(
fields=[
('lib', ''),
('uid', '5dec436e32b85'),
('module', ''),
('title', '我的一个title'),
('type', 'text'),
('contentType', 'html'),
('files[]', ('test.png', open('C:\\Users\\Administrator\\Desktop\\test.png', 'rb'), 'image/png'))
])
r2 = s.post(s_url, data=body, headers={'Content-Type': body.content_type}) # Content-Type 自动获取 # 检查是否成功上传图片
res = s.get('http://127.0.0.1/zentao/doc-browse-1.html')
if '我的一个title' in res.content.decode('utf-8'):
print('已上传成功')
else:print('上传失败')

5、python控制台说“已上传成功”,但是我们首次执行最好还是肉眼看一下有没有问题。(下图显然没有问题)

但说到这里,不得不说这只是一次的测试请求,但是以后迭代,无数次回归咋办呢?这个问题和我们手工操作是一样的,好比如你想title每次都一样,但是只能存在一条数据。
那么就可以①逻辑删除:操作删除按钮、物理删除:连接数据库执行删除语句。欢迎来QQ交流群:482713805
python接口自动化7-post文件上传的更多相关文章
- requests接口自动化7-Multi/form-data文件上传形式的post请求:files
Multi/form-data文件上传形式的post请求:用files传参 fiddler里请求响应内容; 代码: import requests from requests_toolbelt imp ...
- python接口自动化测试——简单的文件上传代码实现,人人网登陆后上传图片举例
import requests '''人人网登陆,图片上传 '''def loginData(): '''登录请求参数''' data = { 'email': '13484545195', 'ico ...
- Selenium2学习-039-WebUI自动化实战实例-文件上传下载
通常在 WebUI 自动化测试过程中必然会涉及到文件上传的自动化测试需求,而开发在进行相应的技术实现是不同的,粗略可划分为两类:input标签类(类型为file)和非input标签类(例如:div.a ...
- 基于python的selenium两种文件上传操作
方法一.input标签上传 如果是input标签,可以直接输入路径,那么可以直接调用send_keys输入路径,这里不做过多赘述,前文有相关操作方法. 方法二.非input标签上传 这种上传方 ...
- python利用socket写一个文件上传
1.先将一张图片拖入‘文件上传’的目录下,利用socket把这张图片写到叫‘yuan’的文件中 2.代码: #模拟服务端 import subprocess import os import sock ...
- python写个简单的文件上传是有多难,要么那么复杂,要么各种,,,老子来写个简单的
def upload(url,params): ''' 上传文件到server,不适合大文件 @params url 你懂的 @params {"action":"xxx ...
- 用python写一个简单的文件上传
用Pycharm创建一个django项目.目录如下: <!DOCTYPE html> <html lang="en"> <head> <m ...
- python+selenium基础篇,文件上传
1.百度查询图片,上传文件 2.实现代码如下: from selenium import webdriverfrom time import sleepdr=webdriver.Firefox()dr ...
- 【python接口自动化框架-unittest】如何传参数到下一个case
1.前提 平时我们用unittest的时候,都知道每个test_ 都是相互独立的,但是很多现实情况是,我们下一个接口参数,可能会用到上一个接口返回的json字段,那么,我们怎么去实现呢 2.实例 1. ...
- uedit修改文件上传路劲,支持api文件接口
首先修改一个东西ueditor/ueditor.config.js serverUrl: URL + "php/controller.php" 原来 serverUrl: &quo ...
随机推荐
- Docker动态添加端口,不需要重新建立镜像
Docker容器在运行期间有时可能会需要修改或者添加暴露的端口,但是有时候运行的容器又不想再另外建立一个新的镜像.这时可以找到docker容器的存放地方,然后直接修改配置文件. 我们的容器都是保存在/ ...
- 基于C# 百度AI和科大汛飞语音合成SDK
一.百度语音合成 百度语音合成C# SDK主要是基于Rest API,需要互联网调用HTTP接口,Rest API 仅支持最多512个汉字,合成的格式文件为MP3,没有其它的格式.如果想离线使用需下载 ...
- Oracle - SPM固定执行计划
1. 通过dbms_xplan.display_cursor查看指定sql都有哪些执行计划 SQL> select * from table(dbms_xplan.display_cursor( ...
- 百度BAE专业版申购SSL证书
这几天开发了一个小程序,本来想放到BAE基础版的,但是基础版现在不能再新增项目了,想了一下,出点血,配了个专业版.但是专业版的SSL证书是需要配的,而小程序必须使用https,所有必须申请一个证书.在 ...
- react生命周期函数的应用-----1性能优化 2发ajax请求
知识点1:每次render其实就会将jax的模板生成一个虚拟dom,跟上一个虚拟dom进行比对,通过diff算法找出不同,再更新到真实dom上去. 1性能优化 每次父组件render一次(除了第一次初 ...
- nginx基础(1)
目录 一.概念 基础概念 响应码 请求和响应报文的格式 http无连接 我叫张贺,贪财好色.一名合格的LINUX运维工程师,专注于LINUX的学习和研究,曾负责某中型企业的网站运维工作,爱好佛学和跑步 ...
- JSON.parse解决Unexpected token ' in JSON at position 1报错
壹 ❀ 引 我们知道JSON.parse能将JSON字符串转变成JS对象,但在一些转换中可能出现Unexpected token ' in JSON at position 1的错误,这是因为被转换 ...
- Latex学习与使用
Table of Contents Latex学习与使用 简介 文档结构 排版 表格 图片 公式 索引 简介 Latex(发音lay-tek)是一个用来产生专业文档的系统,但它并不是一个单词处理器.它 ...
- 自己开发的网站压力测试(阿里云1M带宽)
背景 项目采用微服务架构设计,独立商城系统,博客系统,搜索系统,sso单点系统部署在docker环境下 商城系统(django) 博客系统(flask) 搜索系统(es+flask+restful) ...
- mysql中concat函数的使用相关总结
concat(str1,str2) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. mysql> select concat('11','22','33') ...