pytest 导入文件时处理multipart/form-data请求

写接口自动化时遇到一个接口,功能是导入文件到系统,试了几个解决方法都不生效,最后找到解决方案:
requests_toolbelt库
什么是multipart/form-data:

multipart/form-data的请求体是一个字符串,但是和post的请求体不同,因为它的构造方式不一样,post是name=value,但multipart/form-data是添加了分隔符等内容的构造体,如下:
在这里插入图片描述

应用在pytest 里的做法:
1、导入第三方库

pip install requests-toolbelt

2、使用该第三方库

import requests
from requests_toolbelt import MultipartEncoder 


url = "此处输入url地址"
m = MultipartEncoder(
        fields={'uploadFile': (
            'spark-learning-1.0-SNAPSHOT.jar', open(datas_dir + r'/spark-learning-1.0-SNAPSHOT.jar', 'rb'),
            'text/plain')}
    )
headers = zdata_info_dict["headers"]
headers['Content-Type'] = m.content_type
resp = requests.post(url=url, data=m, headers=headers)
headers['Content-Type'] = 'application/json' # 恢复全局的请求头,以免后续请求报错
return resp

执行结果:
在这里插入图片描述

可参考链接:
https://www.cnblogs.com/wangjunjiehome/p/13716503.html
官网:
https://toolbelt.readthedocs.io/en/latest/user.html

-------------------------------分割线·更新与2022.3.29----------------------------------------

调试接口又遇到上传文件,使用之前的代码一直在报错,研究了下官网文档,是需要将参数补齐,在此记录一下:
f12截图,贴在这:
在这里插入图片描述
后面使用了fiddler抓包去看的参数:
在这里插入图片描述
官方文档是这么说:
在这里插入图片描述
我的代码修改后是这样,再运行就不报错了:

def test_todo_upload(frame_info_dict):
    """待办任务-上传附件"""
    taskId = getattr(EnvData, "taskId")
    url = "{}/api/flow/attachment/upload/{}".format(frame_info_dict["pre_url"], taskId)
    m = MultipartEncoder(
        fields={'file': ('depart_add.xlsx', open(datas_dir + r'/depart_add.xlsx', 'rb'), 'text/plain'),
                'name': 'depart_add.xlsx', 'description': 'depart_add.xlsx'})
    headers = frame_info_dict["headers"]
    headers['Content-Type'] = m.content_type
    resp = requests.post(url=url, data=m, headers=headers)
    headers['Content-Type'] = 'application/json'
    setattr(EnvData, "attachmentId", resp.json()['data'])
    assert resp.json()["success"]
    return resp

运行截图:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值