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 ...
随机推荐
- 团队项目之Scrum3
小组:BLACK PANDA 时间:2019.11.23 每天举行站立式会议 提供当天站立式会议照片一张 2 昨天已完成的工作 2 完善用户注册的 ...
- Linux笔记16 使用Vsftpd服务传输文件;使用Samba或NFS实现文件共享。
FTP协议有下面两种工作模式. 1.主动模式:FTP服务器主动向客户端发起连接请求. 2.被动模式:FTP服务器等待客户端发起连接请求(FTP的默认工作模式).Vsftpd服务程序vsftpd作为更加 ...
- LeetCode刷题-最长公共前缀(简单)
题目描述 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow ...
- JSON.parse和JSON.stringify方法
1.JSON.parse(“要转换的数据”) 2.JSON.stringify(“要转化的数据”) 3.首先,两个方法的用法是有差别的: ①.JSON.stringify是从一个对象中解析出字符串 ② ...
- 如何在Mac上使用Netstat命令
macOS上的netstat命令是一个终端命令,用于显示有关Mac网络通信的详细信息.网络通信包括Mac通过所有端口和所有应用程序与外界进行交流的所有方式.掌握netstat可以帮助您了解计算机之间的 ...
- ACM课内练习_1
题意很简单就是一个一个素数因子只有2,3,5,7的整数,让你求它的约束的个数(暴力会超时),一开始的思路是先计算2,3,5,7这四个素数因子的个数,求出来之后想了很久没有想出他们个数和约束个数之间的数 ...
- Qt 信号和槽异常: QObject::connect: No Such slot baseClassName::subClassfunction() in ......
2019-08-14起笔 小熊的情况描述: 父类A继承自QWidget,所以父类A自动添加了Q_OBJECT. 子类B继承自父类A,子类B没有添加Q_OBJECT.在子类B中给动态创建的控件添加事件 ...
- IT兄弟连 HTML5教程 多媒体应用 HTML图像地图
图像地图是带有可点击区域的图像,通常情况下,每个区域是一个相关的超级链接.点击某个区域,就会到达相关的链接,也可以通过图像地图实现图片切换效果. 1 什么是图像地图 把一幅图像分成为多个区域,每个区 ...
- 在eclipse中添加jdk源码
window->Preferences->java->Installed JREs 点击你的jre然后点右边的Edit 找到以rt.jar结尾的jar,点击右边的Source Att ...
- 目前下载VS2017你可能会遇到这个坑
可能现在大伙都已经开始使用VS2019进行开发了.VS2019的下载使用也都很简单.由于工作需要,今天要在笔记本上安装VS2017,结果发现,VS2017的下载变得不是那么容易了,官方的下载方式也隐藏 ...