python + requests + unittest 接口自动化进阶篇一

奋斗吧
奋斗吧
擅长邻域:未填写

标签: python + requests + unittest 接口自动化进阶篇一 博客 51CTO博客

2023-07-25 18:24:13 186浏览

python + requests + unittest 接口自动化进阶篇一,本文主要介绍使用pythonrequests处理不同类型Content-Type的接口

前言

关于接口 headers 中的 Content-Type:

Get 请求的 headers 中没有 Content-Type 这个字段,

Post 的 Content-Type 有 :

  • application/x-www-form-urlencoded 一般是文本表单用 post 传递数据;
  • multipart/form-data 用于文件上传,此时 form 的 enctype 属性必须指定为multipart/form-data 请求体被分割成多部分,每部分使用—boundary分割;
  • application/json 将数据以 json 对象的格式传递;
  • text/xml 请求体是 xml 格式;

对应 requests 传参的 4 种类型:

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

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

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

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

其中 multipart/form-data、text/xml 的 params 经过处理后,也可以使用data传参,下文中有实例;

在上一篇文章中,我们已经涉及了 Get 接口,Post 接口的 application/json、application/x-www-form-urlencoded,本文我们介绍下 requests 如何处理 Post 的 multipart/form-data 及 text/xml 类型的接口;

一、multipart/form-data 请求体为文件的接口请求

multipart/form-data 介绍

multipart/form-data 是 HTTP 协议中用于上传文件的一种类型。它允许客户端向服务器发送文件以及一些额外的元数据(例如文件名、MIME 类型、图片等)。

在 postman 中,处理上传文件类型接口

body 选择 form-data , key 的类型选择 File

python + requests + unittest 接口自动化进阶篇一_text/xml

header 中的 Content-Type 填写 multipart/form-data

python + requests + unittest 接口自动化进阶篇一_接口自动化_02

接口调用成功

python + requests + unittest 接口自动化进阶篇一_text/xml_03

python requests处理上传文件类型接口

  • 准备工作:

下载 requests-toolbelt 模块

pip requests-toolbelt
  • 总体思路:

将要上传的图片,放置在了工程目录的 config 文件夹中;

本次 headers 和 params 值的处理比较复杂,故将其取值的代码放到了接口函数的代码中,而不是 xml 中,其余参数的内容还是在 xml 文件中;

注:本例中,headers 中 Content-Type 格式如下:

python + requests + unittest 接口自动化进阶篇一_接口自动化_04

  • 具体步骤

xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<datas>
    <testMultipart>
        <methodtype>post</methodtype>
       <url>http://www.testingedu.com.cn/mypro/api/user/setavatar</url>
        <params>{}</params>
        <headers>{}</headers>
    </testMultipart>
</datas

引用 MultipartEncoder 模块

from requests_toolbelt import MultipartEncoder

获取 headers 和 params 的值

headers = {}
filepath = psetting.ROOT_DIR + "/config/logo.jpg"
with open(file=filepath, mode="rb") as fis:
    file_content = fis
    files = {
        'filename': filepath,
        'Content-Disposition': 'form-data;',
        'Content-Type': 'image/jpeg',
        'file': (filepath, file_content, 'image/jpeg')}
    form_data = MultipartEncoder(files)
    headers["Content-Type"] = form_data.content_type
    headers["Cookie"] = self.cookies


    params = form_data
    headers = headers

其余参数从 xml 文件中调用,之后将各参数的值传入调用接口的方法中,其中 params 用 data 接收即可;

二、text/xml 请求体为 xml 的接口请求

用 Postman 调用请求体为 xml 的接口

Content-Type 值为 text/xml :

python + requests + unittest 接口自动化进阶篇一_requests_05

Body 选择 raw XML:

python + requests + unittest 接口自动化进阶篇一_接口自动化_06

接口调用成功;

python requests 处理请求体为 xml 的接口

将 params 的值写在了接口函数中,其余参数在 xml data文件中:

<?xml version="1.0" encoding="UTF-8"?>
<datas>
    <testXml>
        <methodtype>post</methodtype>
       <url>https://httpbin.org/post</url>
        <params>{}</params>
        <headers>{"Content-Type":"text/xml"}</headers>
    </testXml>
</datas>

对 params 的处理:

params = '<?xml version=“1.0” encoding = “UTF-8”?>'\
         '<COM>'\
         '<REQ name="测试">'\
         '<USER_ID>bjhongge</USER_ID>'\
         '<COMMODITY_ID>123456</COMMODITY_ID>'\
         '<SESSION_ID>absbnmasbnfmasbm1213</SESSION_ID>'\
         '</REQ>'\
         '</COM>'
params = json.dumps(params)
params = params.encode("utf-8")

其余参数从 xml 文件中调用,将各参数传入调用接口的方法中,其中 params 用 data 接收即可;

好博客就要一起分享哦!分享海报

此处可发布评论

评论(0展开评论

暂无评论,快来写一下吧

展开评论

您可能感兴趣的博客

客服QQ 1913284695