首页 > 编程语言 >python + requests + unittest 接口自动化进阶篇一

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

时间:2023-07-25 20:31:49浏览次数:39  
标签:xml form python Type unittest Content 进阶篇 params data

前言

关于接口 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 接口自动化进阶篇一_接口自动化

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

python + requests + unittest 接口自动化进阶篇一_python_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 接口自动化进阶篇一_multipart/form-data_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 接口自动化进阶篇一_python_05

Body 选择 raw XML:

python + requests + unittest 接口自动化进阶篇一_requests_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 接收即可;

标签:xml,form,python,Type,unittest,Content,进阶篇,params,data
From: https://blog.51cto.com/u_15640312/6839592

相关文章

  • python如何生成随机两位小数
    使用Python生成随机两位小数在很多实际应用中,我们常常需要生成随机的两位小数。Python中提供了多种方法来实现这个需求。在本文中,我们将介绍两种常用的方法,分别是使用random模块和使用numpy库。方法一:使用random模块random模块是Python中用于生成伪随机数的模块,其中提供了多个生......
  • python如何将object转换为数值
    项目方案:将图像转换为数值的应用1.项目背景和介绍在现代科技领域中,图像处理和分析是一个非常重要的领域。图像数据通常以像素的形式呈现,而如何将这些像素转换为数值数据是实现图像处理和分析的关键步骤之一。Python是一种功能强大的编程语言,具有丰富的库和工具,可以帮助我们将图......
  • python如何对每一行设置行索引
    Python如何对每一行设置行索引在Python中,我们经常需要对数据进行处理和分析。而对于一些数据集来说,每行数据都需要有一个唯一的标识,这就是行索引。行索引通常是一个整数或字符串,用于区分不同的数据行。在本文中,我们将介绍如何使用Python对每一行设置行索引,并提供一个具体的问题场......
  • python如何调节CT图像的亮度分辨率
    Python如何调节CT图像的亮度分辨率在医学图像处理中,调节CT图像的亮度分辨率是一个重要的任务,它可以用来增强图像的可视化效果和准确性。Python提供了强大的图像处理库,可以方便地对CT图像进行亮度分辨率调节。本文将介绍如何使用Python和OpenCV库来实现。问题描述假设我们有一张C......
  • python如何打开命令行窗口
    在Python中,我们可以使用os模块来打开命令行窗口。os模块提供了与操作系统相关的功能,包括运行命令行命令和打开命令行窗口。首先,我们需要导入os模块:importos然后,我们可以使用os.system()函数来运行命令行命令。为了打开命令行窗口,我们可以使用操作系统提供的命令来启动命令行终......
  • python如何不选取某些行
    项目方案:数据清洗工具背景和目标在数据分析和机器学习的过程中,数据清洗是一个必要且关键的步骤。清洗数据能够帮助我们剔除无效或错误的数据,提高数据质量,并且使得后续的分析和建模工作更加可靠和准确。本项目的目标是设计和实现一个通用的数据清洗工具,能够方便地对数据进行筛选和......
  • python让矩阵乘其转置
    Python让矩阵乘其转置在线性代数中,矩阵乘法是一种常见的操作。然而,有时我们需要计算一个矩阵与其转置的乘积。Python提供了简单而有效的方法来实现这一操作。本文将介绍如何使用Python进行矩阵乘转置,并提供相关的代码示例。矩阵乘法在开始讨论矩阵乘转置之前,我们先来回顾一下矩......
  • python全局变量定义
    Python全局变量定义在编程中,全局变量是在整个程序中都可以被访问和使用的变量。在Python中,我们可以通过在函数外部定义变量来创建全局变量。本文将介绍Python全局变量的定义以及如何在代码中使用它们。定义全局变量Python中定义全局变量非常简单,只需要在函数外部声明变量即可。......
  • python去除背景色
    Python去除背景色在图像处理和计算机视觉领域,去除背景色是一个常见的任务。它可以用于提取图像中的对象,或者用于将图像嵌入到其他背景中。Python作为一种强大的编程语言,在这个任务上有着丰富的库和工具。本文将介绍如何使用Python去除图像的背景色,并提供相应的代码示例。图像背景......
  • python取字符串中的数字
    Python取字符串中的数字作为一名经验丰富的开发者,我愿意教会你如何在Python中取出字符串中的数字。在本文中,我将向你展示一种实现这一目标的流程,并提供每一步所需的代码和解释。流程概述下面是实现“Python取字符串中的数字”的流程概述:步骤描述1读取字符串2遍历......