Python接口自动化测试之文件上传(二十二)

在接口测试中,经常会涉及到文件上传,文件上传一般包含的文件是图片,视频以及如csv,excel,记事本等文件,它的请求头中Content-Type对应的value值是multipart/form-data,这里依据实际的案例来说明文件上传的具体案例。这里以互联网产品人人网为案例,人人网上传成功后,在个人的主页,上传图片,见上传图片的请求参数如下图所示:

见图片上传请求头的信息如下图所示:

在上传文件的请求参数中,其它参数都比较好处理,文件的这部分,必须要指定文件的路径,文件的Content-Type类型,其实可以在Raw中可以看到,见如下图所示:

那么文件部分的请求参数具体就为:

files = {"file":("wx.jpg", open("c:/wx.jpg", "rb"), "image/jpeg",{})}

这地方特别需要强调的是file其实就是请求参数中的file,必须与请求参数中的参数名称一一对应,在请求头中cookie比较很好处理,直接在登录成功后,获取到r.cookies并且把该内容返回。那么文件上传的完整业务流是先登录系统,登录成功后再进行上传文件,见实现的全部源码:

#!/use/bin/env python
#coding:utf-8 

#Author:WuYa

import  requests

def loginData():
   data = {
      'email': '13484545195',
      'icode': '',
      'origURL': 'http://www.renren.com/home',
      'domain': 'renren.com',
      'key_id': 1,
      'captcha_type': 'web_login',
      'password': '8d9a71152919613bbe3df9bfa0e1b390eb2b13dd1bdde270c2816cf04dd1b7c5',
      'rkey': 'b4cdc6acc1d36171e3de73dd4676208e',
      'f': 'http%3A%2F%2Fname.renren.com%2F'}
   return data


def login():
   r = requests.post(
      url='http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=201894216799',
      data=loginData(),
      headers={'Content-Type': 'application/x-www-form-urlencoded'})
   return r.cookies


def uploadData():
   data = {
      "upload": "提交",
      "__channel": "renren",
      "privacyParams": '{"sourceControl": 99}',
      'hostid': '967004081',
      'requestToken': '-1124080368',
      '_rtk': '88c0e36a'}
   return data


def upload():
   r = requests.post(
      url='http://upload.renren.com/upload.fcgi?pagetype=addpublishersingle&hostid=967004081&'
          'callback=window.parent.handlePhotoData&uploadid=profile_publisher_photo_1540215890321',
      data=uploadData(),
      headers={'Conteny-Type': 'multipart/form-data'},
      files={"file": ("wx.jpg", open("c:/wx.jpg", "rb"), "image/jpeg", {})},
      cookies=login())
   print(r.status_code)
   print(r.text)


if __name__ == '__main__':
   upload()

原文发布于微信公众号 - Python自动化测试(wuya-python)

原文发表时间:2018-10-23

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏源哥的专栏

开发统一的博客接口

现在博客很流行,很多人都在使用博客,有些人同时拥有几个不同的博客网站,不知你有没有这样的烦恼,就是你写了一篇文章,这时想传到不同的博客网站上去,就得打开不同的...

883
来自专栏钟绍威的专栏

scope='request'的bean预加载冲突

Error creating bean with name ‘authenticationSuccessServlet’: Scope ‘request’ is...

1946
来自专栏钟绍威的专栏

web服务器集群集群是什么?分布式是什么?集中式是什么?例子缺点

概述 集群和分布式都是从集中式进化而来的。分布式和集群会相互合作的,同时的集群和分布式。在这里重点说说集群 集群是什么? 集群能提高单位时间内处理的任务数量,提...

4179
来自专栏编程软文

postman从入门到精通

今天总监让我给测试同事们培训postman,使用过postman的朋友应该知道,这个简直就是前后端接口调试神器。根据平时的经验以及自己到网上看了相关的帖子,对于...

1201
来自专栏游戏杂谈

替换系统自带的记事本

系统自带的记事本功能比较弱,所以一般我会选择使用notepad2.exe来替代它。

2723
来自专栏Scott_Mr 个人专栏

Git从入门到速成

3966
来自专栏互联网技术栈

Tair数据迁移三步走

在多机房数据迁移中,整个过程分为三个阶段:历史数据迁移阶段、redolog迁移阶段、实时复制阶段。

1173
来自专栏叔叔的博客

阿波罗配置中心的体验

这个好用,可以对部分实例进行灰度发布,比如对部分服务器的实例进行测试,观察一段时间没问题,再正式发布,就是体验服。

1284
来自专栏程序员互动联盟

【答疑释惑】如何知道电脑是32位还是64位

近来在联盟中经常看到有人问64位系统与32位系统的问题。这里把相关问题几种回答下。 首先我们要明白一个常识,64位操作系统可以使用32位系统的软件,但是32位系...

2883
来自专栏张善友的专栏

SQL Server 2005的负载均衡

SQL Server 2005仍然不直接地支持负载均衡——但是它为以前SQL Server版本中可用的所有负载均衡方法提供了令人激动的改善和支持。   目录 1...

21510

扫码关注云+社区

领取腾讯云代金券