接口测试遇到的一个二进制数据流传递问题


今天在接口测试的过程中,遇到了一个二进制数据流的传参问题,也就是form_data传递file的问题.

需求背景

我有一个图片上传的接口, 用postman 可以调用成功, 但是用 python 脚本不可以.

问题表现

浏览器上的接口图片
使用的form data , 传递的是file
postman接口调用
用 postman 可以发送接口成功.

但是在 python 的脚本中, 却遇到了问题, 一直都是 400, 操作失败.
python代码1
python代码2
python代码3

问题的原因是请求头的multipart/form-data

multipart/form-data这个东西在网页表单上传用的,非页面的话指定为空.data 和 files 同时存在,上面的multipart/form-data就直接挂掉.这个就 涉及到requests的优先级处理了.
解决方法是将这个注释了.

@login_get_token
def test_edit_user_info_head_img(self, info):
    headers = {'authorization': 'Bearer %s' % self.token,
               # 'content-Type': 'application/x-www-form-urlencoded',
               "accept-Encoding": "gzip, deflate, br"
               }
    file_path = init_config.InitConfig.get_file_path() + "/Img/picture.jpeg"
    #  如果加上 .read() 就不行, 必须是数据流对象
    # fp = open(file_path, "rb").read()
    filename = "picture.jpeg"
    # file = {'file': fp}
    file = {'file': open(file_path, 'rb')}
    response = self.login.get_post_user_head_img_url_response(self.session, headers, file)
    print(response.json())



    @allure.step("调用上传用户头像的接口")
def get_post_user_head_img_url_response(self, session, headers, file):
    return session.post(self.post_user_head_img_url_post, headers=headers, files=file)
    # 如果是传递文件数据流就是用files 这个参数, 否则就是data 去传递一般的表单数据
    # return session.post(self.post_user_head_img_url_post, headers=headers, data=data)

感谢友链里的那个全能爬虫大佬的讲解, 受益良多.


文章作者: 陌上人如玉
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 陌上人如玉 !
  目录