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 ...
随机推荐
- 使用C#面向对象实现简易计算器(简单工厂模式)
操作流程: 1. 新建Operation类 2. 新建OperationAdd类,并继承Operation类 3. 新建OperationSub类,并继承Operation类 4. 新建Operati ...
- November 24th, Week 48th, Sunday, 2019
Once you replace negative thoughts with positive ones, you will start having positive results. 淘汰消极思 ...
- a是什么??
//解决Linux下默认中文字体乱码问题 QFont font("simsun", 11, QFont::Normal, false); a.setFont(font);
- vuex——action,mutation,getters的调用
一.子模块调用根模块的方法 mutation调用 context.commit('clearloginInfo',{key_root:data},{root:true}); action调用 co ...
- [考试反思]1112csp-s模拟测试112:二返
连着两场... 信心赛.但是题锅了,我也锅了. 然后Day2就不用考了. T1没开够long long.(a+b+c+0ll)与(0ll+a+b+c)还是有一点区别的. T2出题人用Windows出数 ...
- C语言程序设计100例之(21):折半查找
例21 折半查找 问题描述 顺序查找是一种最简单和最基本的检索方法.其基本思想是:从检索表的一端(如表中第一个记录或最后一个记录)开始,逐个进行记录的关键字和给定值的比较.若某个记录的关键字和给定值 ...
- JavaScript中使用正则表达式
JavaScript中正则表达式的使用 创建正则对象 RegExp 对象是带有预定义属性和方法的正则表达式对象. 方式一: var reg = new RegExp("\d", ' ...
- ej3-0开端
开始 编码多年,总有一些最佳实践,Java也是,比如设计模式,比如Effective Java 3 (ej3) . 设计模式先后看过<大话设计模式>,<HeadFirst 设计模式& ...
- 普通的maven项目,如何打成一个fat jar(包括了全部依赖jar包)?
1.前言 用过spring boot的同学肯定知道,现在web项目可以直接打成jar包运行,相当方便. 那么普通项目如何配置(非spring boot),才能打成一个类似的jar包呢? 2.解决方案: ...
- Centos 7 下安装 Jenkins
Jenkins介绍 Jenkins是一个开源的支持自动化构建.部署等任务的平台.基本上可以说是持续集成(CI).持续发布(CD)不可或缺的工具. 安装Java环境 CentOS 7 安装 JAVA环境 ...