python之yaml文件+接口自动化

首先安装好yaml, 命令:pip install PyYAML

第一步:新建yaml文件,并写入接口数据

新建yaml文件

 

写入接口所属数据

上图代码

复制代码
# 【login】:登录接口名称(自定义)
login1:
  
  # 【method】:请求方法,post或get
  method: "post"
  
  # 【url】:请求地址(字符串格式)
  url: "https://www.baidu.com"
  
  # 【head】:请求头信息(字典格式)
  head:
      "Content-Type": "application/json;charset=UTF-8"
  
  # 【data】:请求体(字典格式)
  data:
      "uuid": "BD123456"
      "password": "BD111111"

# 登录接口2
login2:
  method: "post"
  url: "https://www.baidu.com"
  head:
    "Content-Type": "application/json;charset=UTF-8"
  data:
    "uuid": "BD123456"
    "password": "BD111111"
复制代码

 

第二步:写一个打开yaml文件的公用方法(另建一个文件py)

编写打开yaml文件方法

上图代码

复制代码
import yaml


def load_yaml(path):
    """
    :param path: yaml文件地址
    :return: 返回yaml文件数据
    """
    file = open(path, 'r', encoding='utf-8')
    data = yaml.load(file, Loader=yaml.FullLoader) # 表示全加载文件
    return data
复制代码

 

第三步:写一个接口请求方法(另建一个文件)

上图代码

复制代码
import json
import requests
from UI.Common.OpenYamlFileMethod import load_yaml

def test_url(txt='status_code'):
    """
    接口请求
    :param url_title: 需要测试的yaml文件中的接口标题
    :param txt: 需要返回相应的内容,默认返回相应状态码
    :return:
    """
    # 将yaml文件数据传入
    data_yaml = load_yaml(r'../UI/TestExampleFile/UrlYamlFile.yaml')

    # 从yaml文件中获取接口标题,并传入data。(指定哪条接口测试)
    data = data_yaml['login']

    # data是一个字典,需将数据拆分出来保存到变量中, 然后才能引用到接口中,不用变量直接引用会报错
    url = data['url']
    method = data['method']
    datas = data['data']
    heads = data['head']

    # 用于保持会话(session)
    s = requests.session()
    # getattr:对象映射。json.dumps:将datas的数据转换成json格式。(method: 请求方法;url: 请求地址;datas: 请求体;head: 请求头)
    res = getattr(s, method)(url=url, data=json.dumps(datas), headers=heads)
    # 对象映射, 默认返回相应状态码
    print(getattr(res, f'{txt}'))

test_url()
复制代码

 

 requests模块传请求体参数时, 有两种方式:

  data传参:

    数据报文:当传入类型为dict字典类型,默认情况下以form表单的方式传参,格式:a=1&b=2&c=3

    数据报文:当传入类型为sit类型,默认情况下:text/plain

  json传参:

    不管是dict还是str,默认格式都为:{"a"=1,"b"=2}

数据格式转换:

json.dumps(data) 序列化:把字典格式数据转换为str格式

json.loads(data) 反序列化:把str格式转换成字典格式

 

请求方法

requests.get()
requests.post()
requests.put()

requests.session(): 用于保持会话(session)
除了requests.session()外,其他请求方法的参数都差不多,都包含url,params, data, headers, cookies, files, auth, timeout等等

 

请求参数

url: 字符串格式,参数也可以直接写到url中params:url参数,字典格式
data: 请求数据,字典或字符串格式
headers: 请求头,字典格式
cookies: 字典格式,可以通过携带cookies绕过登录
files: 字典格式,用于混合表单(form-data)中上传文件
auth: Basic Auth授权,数组格式 auth=(user,password)
timeout: 超时时间(防止请求一直没有响应,最长等待时间),数字格式,单位为秒

 

响应解析

res.status_code: 响应的HTTP状态码
res.reason: 响应的状态码含义
req.text:响应的文本格式,按req.encoding解码
req.content: 响应的二进制格式
req.encoding: 解码格式,可以通过修改req.encoding='utf-8'来解决一部分中文乱码问题
req.apparent_encoding:真实编码,由chardet库提供的明显编码
req.json(): (注意,有括号),响应的json对象(字典)格式,慎用!如果响应文本不是合法的json文本,或报错
req.headers: 响应头
req.cookies: 响应的cookieJar对象,可以通过req.cookies.get(key)来获取响应cookies中某个key对应的值

 

参考文章:https://www.cnblogs.com/superhin/p/10338930.html

posted @   博无止境  阅读(1022)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示