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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?