Python接口测试文件上传实例解析_python

来源:脚本之家  责任编辑:小易  

有些网页需要你登录之后才可以访问,你需要提供账户和密码。只要在发送http请求时,带上含有正常登陆的cookie就可以了。1.首先我们要先了解cookie的工作原理。Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服务器端开发自己定义,对于JSP而言也可以直接写入jsessionid,这样服务器可以知道该用户是否合法用户以及是否需要重新登录等。2.之后我们要获取到用户正常登录的cookie.python提供了cookieJar的库,只要把cookieJar的实例作为参数传到urllib2的一个opener里面。然后访问一次登录的页面,cookie就已经保存下来了。之后通过这个实例访问所有的页面都带有正常登陆的cookie了。以人人网为例子。Python代码encoding=utf-8import urllib2import urllibimport cookielibdef renrenBrower(url,user,password):登陆页面,可以通过抓包工具分析获得,如fiddler,wiresharklogin_page="hLogin.dotry:获得一个cookieJar实例cj=cookielib.CookieJar()cookieJar作为参数,获得一个opener的实例opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))伪装成一个正常的浏览器,避免有些web服务器拒绝访问。opener.addheaders=[('User-agent','Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.1)')]生成Post数据,含有登陆用户名密码。data=urllib.urlencode({"email":user,"password":password})以post的方法访问登陆页面,访问之后cookieJar会自定保存cookieopener.open(login_page,data)以带cookie的方式访问页面op=opener.open(url)读取页面源码data=op.read()return dataexcept Exception,e:print str(e)访问某用户的个人主页,其实这已经实现了人人网的签到功能。print renrenBrower("httm/homewww.zgxue.com防采集请勿采集本网。

接口测试中,上传文件的测试场景非常常见。例如:上传头像(图片)、上传文件、上传视频等。下面以一个上传图片的例子为大家讲解如何通过 python 测试上传文件接口。

在机器上安装了 Python 的 setuptools,可以通过下面的命令来安装 poster: easy_install poster装完之后,就可以像用下面代码模拟上传文件表单了: from poster.encode import multipart_encode

首先通过抓包分析上传文件接口的请求参数:

建议你参考我之前回答过的一个问题,我注意到你的变量名是:files,所以你上传的其实应该是多个文件.你可以参考我的回答,用files[0].file上传第一个文件,用files[1].file上传第二个文件.多多尝试

下面是上传文件接口脚本。把目标文件以open打开,然后存储到变量file。并且使用files参数指明请求的参数名称、上传文件的类型、以及上传文件的路径。

可以使用-outputdir 参数来指定日志和报告产生的路径,在命令行中使用。在RIDE 中也可以填写命令行参数,且每次打开都会是上次的命令参数。

这里注意:content-type参数,如果我们通过form-data的方式上传文件,我们发送post请求的时候,headers这个参数中一定不能要包括这个值,requests库会帮忙添加这个元素,加了可能会报错。

调用requests包的post方法,拼接所需要的data和headers模拟上传,如果需要cookie,需要获取 eg: data=表单数据+文件 headers={'':'','':''} cookie=requests('登录接口',data=data,headers=headers).

代码实现:

首先要安装一个qiniu的包,下面是示例代码 上传文件 retData,respInfo=put_data(token,key,data) return 'xxx.clouddn.com/' + key with open('meelo.jpg','rb')as f: url=upload_data(f.read(),'xxxx')

import requestsfrom utils.LogUtil import my_logfrom faker import Fakerlog=my_log()faker = Faker('zh_CN')class marketCreate(): def loginToken(self,mobile,code): ''' 登陆、注册接口 :param mobile: 手机号 :param code: 验证码 :return: ''' url='http://api.xxxxxx.net/v1/user/loginOrRegister' #登陆接口请求地址 headers={'Content-Type': 'application/json'} #请求头信息,json数据类型 json={"code":code,"deviceId":"5de548ad0e268bc0","deviceName":"HWNXT","mobile":mobile,"mobilePrefix":"63","version":"39"} #请求数据 r=requests.post(url,headers=headers,json=json) #发送请求 token=r.json()['data']['userVO']['token'] #获取token log.info('手机号'+mobile+'的token值为:'+token) #打印日志 return token #将token返回出去 def uploadimages(self,mobile,file_path,filename): ''' 上传图片接口 :param mobile: 手机号 :param file_path: 文件路径 :param filename: 文件名称 :return: ''' token = self.loginToken(mobile=mobile, code='789789') #请求登陆接口,获取token url='http://api.xxxxxx.net/v1/upload/images' #上传文件接口请求地址 headers={'token': token} #请求头信息关联token。不需要赋值Content-Type,requests库会帮忙添加这个元素,加了可能会报错。 file_data={'file':(filename,open(file_path,'rb'),'image/jpeg')} #重点:上传文件请求数据。 r=requests.post(url=url,headers=headers,files=file_data) #发送请求 print(r.json()) #打印响应结果if __name__ == '__main__': m=marketCreate() # 测试,输入手机号、文件地址、文件名称信息; m.uploadimages(mobile='639266558329',file_path='D:\pyCharm_work\cmkjProject\data\market.jpg',filename='123456.jpg')

执行结果:

C:\Python38\python.exe D:/pyCharm_work/cmkjProject/page/marketPage.py2020-01-02 13:48:09,580-D:\pyCharm_work\cmkjProject\utils\LogUtil.py-INFO-手机号639266558329的token值为:ba9b4f622fa4d6461523870c0d00df46{'code': 0, 'data': '/group1/M00/00/00/rBDKPF4NhE-ABIFmAAGhT9tm-NA158.jpg', 'success': True}Process finished with exit code 0

  7a686964616fe4b893e5b19e31333363353735python接口测试  1.安装python环境  2.下载python IDE(pyCharm)  备注:  requests是python的要给HTTP客户端库,跟urllib,urllib2类似,那为什么要用requests而部用urllib2呢?官方文档中是这样说的:  python的标准库urllib2提供了大部分需要的HTTP功能,但API太逆天了,一个简单的功能需要一大堆代码。而requests比较简洁,能用更少的代码实现。  3.下载 安装 requests第三方模块  下面就进行接口测试  要使用 requests 首先需要在文件中引用  [python] view plain  import requests  [python] view plain  # 解析json需要  [python] view plain  import json  [python] view plain  # url:接口地址  [python] view plain  # data: 接口需要的数据  [python] view plain  # headers:接口需要的传递的headers数据  [python] view plain  # files:若是接口中需要上传文件则需要用到该参数  [python] view plain  r = requests.post(url, data=data, headers=headers)  [python] view plain  r = requests.post(url, data=data, headers=headers, files=files)  [python] view plain  # 获取 接口返回的数据信息并解析(如果返回的是json格式的话)  [python] view plain  json_data = json.loads(r.text)  [python] view plain  我一直用这样的方法写了20个接口进行测试,突然发现好像代码有很多重复的呀,是不是可以把重复的内容进行封装一下了?  [python] view plain  封装如下:  [python] view plain  Basics_Requests.py  [python] view plain  import requests  import json  '''''  #xx_url:接口连接url  #data:接口data需要传递的数据(数据格式一般为Dictionary)  #headers:接口headers需要传递的数据(数据格式一般为Dictionary)  #variable:headers 中需要改变的参数字段(数据格式为list)  '''  class Basics():  # 初始化  def __init__(self, xx_url, data, headers, variable):  self.xx_url = xx_url  self.data = data  self.headers = headers  self.variable = variable  def basicsparameter(self):  # 发起post请求  url_data = requests.post(self.xx_url, data=self.data, headers=self.headers)  # 把得到的数据转成json格式  data_json = json.loads(url_data.text)  # 改变请求中的参数值  if self.variable != '':  for i in self.variable:  self.headers[i] = data_json[i.lower()]  # 把请求的 数据 和 headers 存入 list中  dic_data = {'data_json': data_json, 'headers': self.headers}  return dic_data  调用封装方法:  [python] view plain  Test.py  [python] view plain  Basics_Requests  [python] view plain  Basics_Requests.Basics(url, row_data, headers, variable).basicsparameter()  [python] view plain内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • python利用excel读取和存储测试数据完成接口自动化教程
  • python接口测试get请求过程详解
  • python + requests + unittest接口自动化测试实例分析
  • python3+requests+excel完整接口自动化测试框架的实现
  • python实现接口并发测试脚本
  • python脚本完成post接口测试的实例
  • python http接口自动化测试框架实现方法示例
  • 对python自动生成接口测试的示例讲解
  • python的一些加密方法及python 加密模块
  • python中字符串的处理技巧分享
  • python对绑定事件的鼠标、按键的判断实例
  • 基于python 凸包问题的解决
  • python3.0中普通方法、类方法和静态方法的比较
  • pycharm 更改创建文件默认路径的操作
  • 浅谈numpy生成数组的零值问题
  • python函数的参数常见分类与用法实例详解
  • python的string模块中的template类字符串模板用法
  • python切图九宫格的实现方法
  • python的哪个模块可以做接口测试
  • python测试接口时需要登录怎么解决
  • 如何利用cURL和python对服务端和web端进行接口测试
  • Python的文件上传
  • python如何模拟含有文件上传的表单
  • 用postman测试文件上传接口参数怎么定
  • robotframework 做接口测试,怎么传raw格式的参数
  • 如何在 Python 中模拟 post 表单来上传文件
  • 如何通过python上传文件到七牛
  • 如何通过python上传文件到七牛
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全vbsdos/bathtahtcpythonperl游戏相关vba远程脚本coldfusionruby专题autoitseraphzonepowershelllinux shellluagolangerlang其它首页python利用excel读取和存储测试数据完成接口自动化教程python接口测试get请求过程详解python + requests + unittest接口自动化测试实例分析python3+requests+excel完整接口自动化测试框架的实现python实现接口并发测试脚本python脚本完成post接口测试的实例python http接口自动化测试框架实现方法示例对python自动生成接口测试的示例讲解python的一些加密方法及python 加密模块python中字符串的处理技巧分享python对绑定事件的鼠标、按键的判断实例基于python 凸包问题的解决python3.0中普通方法、类方法和静态方法的比较pycharm 更改创建文件默认路径的操作浅谈numpy生成数组的零值问题python函数的参数常见分类与用法实例详解python的string模块中的template类字符串模板用法python切图九宫格的实现方法python入门教程 超详细1小时学会python 列表(list)操作方法详解python 元组(tuple)操作详解python 字典(dictionary)操作详解pycharm 使用心得(一)安装和首python strip()函数 介绍python 中文乱码问题深入分析python中使用xlrd、xlwt操作excepython科学计算环境推荐——anacpython逐行读取文件内容的三种方python 命令行参数sys.argvpython简单的制作图片验证码实例python 计算平均平方误差(mse)的实例简单介绍ruby中的cgi编程深入解析python中的变量和赋值运算符django中几种重定向方法python创建n行m列数组示例python cookbook(数据结构与算法)筛选及提python交互式图形编程的实现python多任务及返回值的处理方法
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved