• 接口测试中request上传文件


     

    request官方网站地址:https://www.osgeo.cn/requests/user/advanced.html#post-multiple-multipart-encoded-files

     

    前言

    滴滴滴! 今天聊聊接口自动化,遇到文件上传的接口怎么去测试。

    近期也有不少的小伙伴在工作中遇到了文件上传的接口,表示不知道应该如何去传递文件上传的参数。

    为了帮大家解决这个疑惑,我这边特地写了一个文件上传的接口,那么接下来我们结合这个接口给大家来讲讲解决方案。

    接口说明

    • 接口地址:http://127.0.0.1:5000/upload(注:老师自己写的一个接口,运行在本地)
    • 请求方法:POST
    • 请求类型:Content-Type: multipart/form-data;
    • 响应类型: Content-Type:application/json
    • 接口入参
      参数名参数类型说明
      nickname string 用户昵称
      age int 年龄
      sex string 性别
      pic file(文件) 上传的文件
    • 出参(返回值)
      字段名类型说明
      code int 业务码(1代表上传成功,0代码上传失败)
      data obj 相关的数据信息
      msg string 相关的描述信息

      返回参考示例:

      {
          "code": 1,
          "data": {
              "age": "456",
              "datetime": "Thu, 12 Mar 2020 16:22:57 GMT",
              "filename": "handle_sign.py",
              "name": "123",
              "sex": ""
          },
          "msg": "文件上传成功,文件保存的地址为:http://127.0.0.1:5000/images/handle_sign.py"
      }
      

    针对上面的接口文档简要的说明一下:

    该接口需要四个参数,其中一个是用来接收上传的文件的,看上去和其他的接口并没有什么不一样的,返回的数据是json类型的;

    关于文件上传接口,需要我们引起注意的一个地方就是:

    请求参数类型都是Content-Type: multipart/form-data;

    那么这种类型的参数,我们在发送请求的时候要特别注意!他

    传参的方式和其他参数类型是不一样的。接下来我们分别使用postman和python来请求这个接口。

    使用postman上传文件

    使用postman来上传文件,操作起来比较简单。

    关于接口参数直接选择form-data这一栏进行填写就好了,要注意的点就是上传文件的参数,要选择文件类型,然后再对应参数值那一栏选择对应的文件即可,点击请求,服务器返回了上传成功的相关信息,详细操作如下图:

     

    使用requests模块来上传

    前面我们已经成功的使用了postman来上传文件,那么我们在使用python去做接口自动化的时候,如何来解决这个文件上传的问题呢?

    在python中关于发送http请求,我们通常都会使用requets模块,那么接下来我们就使用requests模块来上传文件。

    requests模块发送post请求直接调用post方法就可以了,那么关于文件上传这里传参的时候要特别注意,

    requests传参类型:

    requests模块传参有四种方式:params、data,、json和files。接下来给大家详细讲解一下requests模块中这几种传参方式的区别。

    • parmas: 传递查询字符串参数(常用于get请求)

    • data: 传递表单类型的参数(参数类型为:Content-Type:application/x-www-form-urlencoded)

    • json: 传递json类型的参数(参数类型为:Content-Type:application/json)

    • files: 用于上传文件(参数类型: content-type:multipart/form-data;)

    上传文件的的接口参数的类型为content-type:multipart/form-data,那么我们使用requests来发送请求的时候,接口中文件上传的参数需要使用files来传递。files参数格式如下

    # fiels为字典类型数据,上传的文件为键值对的形式,参数名作为键,
    # 参数值是一个元组,内容为以下格式(文件名,打开的文件流,文件类型)
    files = {
        "pic": ("test01.gif", open("test01.gif", "rb"), "images/git")
    }
    # 注意点:除了上传的文件,接口其他参数不能放入files中

    文件上传的参数准备好了,那么接口中其他的参数怎么处理呢?其他的参数使用data传递即可。参数组织如下:

    # 其他的参数
    data = {
        "nickname": "木森",
        "age": 18,
        "sex": "男",
    }
    

    参数都准备好了,那么接下来就可以发送请求了,完整的请求代码如下:

     
     1 """
     2 ============================
     3 Author:柠檬班-木森
     4 Time:2020/3/13   13:40
     5 E-mail:3247119728@qq.com
     6 Company:湖南零檬信息技术有限公司
     7 ============================
     8 """
     9 
    10 import requests
    11 
    12 # 如何请求文件上传的接口
    13 url = "http://127.0.0.1:5000/upload"
    14 
    15 # 上传的文件参数
    16 files = {
    17     "pic": ("test01.gif", open("test01.gif", "rb"), "images/git")
    18 }
    19 # 其他的参数
    20 data = {
    21     "nickname": "木森",
    22     "age": 18,
    23     "sex": "男",
    24 }
    25 # 发送请求
    26 response = requests.post(url=url, files=files, data=data)
    27 # 打印结果
    28 print(response.json())
     

    运行以上代码,结果如下:

     
    {
     'code': 1, 
     'data': {
         'age': '18', 
         'datetime': 'Fri, 13 Mar 2020 10:32:24 GMT', 
         'filename': 'test01.gif', 
         'name': '木森', 
         'sex': '男'}, 
     'msg': '文件上传成功,文件保存的地址为:http://127.0.0.1:5000/images/test01.gif'
    }
     

    PS:很神奇有木有,上传成功了,附上一张图

     

    转载自:https://www.cnblogs.com/Simple-Small

  • 相关阅读:
    iptables学习笔记
    启动级别和单用户模式
    Apache虚拟主机配置模板
    LAMP环境搭建问题
    LAMP环境搭建
    C++面向对象高级编程(九)Reference与重载operator new和operator delete
    C++面向对象高级编程(八)模板
    C++面向对象高级编程(七)point-like classes和function-like classes
    C++面向对象高级编程(六)转换函数与non-explicit one argument ctor
    C++面向对象高级编程(五)类与类之间的关系
  • 原文地址:https://www.cnblogs.com/charles2018/p/13219439.html
Copyright © 2020-2023  润新知