python接口自动化32-上传文件时自动判断文件类型(filetype)

Posted 上海-悠悠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python接口自动化32-上传文件时自动判断文件类型(filetype)相关的知识,希望对你有一定的参考价值。

前言

如何判断一个文件的类型呢,判断这个文件是png还jpg,还是mp3文件?
filetype 包是 python 用来判断文件类型的依赖包,github地址https://github.com/h2non/filetype.py

filetype 安装

pip install filetype

简介

一个小巧自由开放Python开发包,主要用来获得文件类型。包要求Python 3.+

功能特色

  • 简单友好的API
  • 支持宽范围文件类型
  • 提供文件扩展名和MIME类型判断
  • 文件的MIME类型扩展新增
  • 通过文件(图像、视频、音频…)简单分析
  • 可插拔:添加新的自定义类型的匹配
  • 快,即使处理大文件
  • 只需要前261个字节表示的最大文件头,这样你就可以通过一个单字节
  • 依赖自由(只是Python代码,没有C的扩展,没有libmagic绑定)
  • 跨平台文件识别

使用示例

import filetype


def main():
    kind = filetype.guess(\'tests/fixtures/sample.jpg\')
    if kind is None:
        print(\'Cannot guess file type!\')
        return

    print(\'File extension: %s\' % kind.extension)
    print(\'File MIME type: %s\' % kind.mime)

if __name__ == \'__main__\':
    main()

结合文件上传使用示例

接下来看下使用场景,在前面接口测试文件上传的时候,参考这篇https://www.cnblogs.com/yoyoketang/p/8024039.html

from requests_toolbelt import MultipartEncoder
import requests

m = MultipartEncoder(
    fields = [
    (\'source\', (\'f1.ext\', f1, \'application/x-example-mimetype\')),
    (\'source\', (\'f2.ext\', f2, \'application/x-example-mimetype\')),
]
    )

r = requests.post(\'http://httpbin.org/post\', 
                  data=m,
                  headers={\'Content-Type\': m.content_type})

imgFile 后面的参数 ("1.png", open("d:\\\\1.png", "rb"), "image/png"), 每次都需要根据不同的文件类型去修改成对应的mime类型。
接下来可以用上面的自动获取文件类型的方法,写个函数,只需传文件的路径即可自动获取

import filetype
import os
from requests_toolbelt import MultipartEncoder
import requests
# 作者-上海悠悠 QQ交流群:717225969


def upload(filepath="files/122.png"):
    \'\'\'根据文件路径,自动获取文件名称和文件mime类型\'\'\'
    kind = filetype.guess(filepath)
    if kind is None:
        print(\'Cannot guess file type!\')
        return
    # 媒体类型,如:image/png
    mime_type = kind.mime
    # 文件真实路径
    file_real_path = os.path.realpath(filepath)
    # 获取文件名 122.png
    fullflname = os.path.split(file_real_path)[-1]
    return (fullflname, open(file_real_path, "rb"), mime_type)


m = MultipartEncoder(
    fields = [
                (\'source\', upload(filepath="files/122.png")),
                (\'source\', upload(filepath="files/123.png")),
            ]
            )

r = requests.post(\'http://httpbin.org/post\',
                  data=m,
                  headers={\'Content-Type\': m.content_type})

这样就可以只关注文件的路径,不需要关注具体类型了。

以上是关于python接口自动化32-上传文件时自动判断文件类型(filetype)的主要内容,如果未能解决你的问题,请参考以下文章

python+requests接口自动化4. 接口实现文件(图片)上传

python+requests接口自动化4. 接口实现文件(图片)上传

python接口自动化测试二十三:文件上传

接口自动化测试中,文件上传该如何测试?

接口自动化遇到上传文件或者图片时,接口不通应该做些什么?

接口自动化遇到上传文件或者图片时,接口不通应该做些什么?