python + requests + unittest 接口自动化进阶篇一
标签: python + requests + unittest 接口自动化进阶篇一 博客 51CTO博客
2023-07-25 18:24:13 186浏览
前言
关于接口 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
header 中的 Content-Type 填写 multipart/form-data
接口调用成功
python requests处理上传文件类型接口
- 准备工作:
下载 requests-toolbelt 模块
pip requests-toolbelt
- 总体思路:
将要上传的图片,放置在了工程目录的 config 文件夹中;
本次 headers 和 params 值的处理比较复杂,故将其取值的代码放到了接口函数的代码中,而不是 xml 中,其余参数的内容还是在 xml 文件中;
注:本例中,headers 中 Content-Type 格式如下:
- 具体步骤
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 :
Body 选择 raw XML:
接口调用成功;
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)展开评论
展开评论
您可能感兴趣的博客