接口自动化项目实战(3):YAML读取+登录获取Token +YAML写入

3. YAML读取+登录获取Token +YAML写入

这份代码是接口自动化测试的核心基础代码 ,核心功能:读取YAML测试用例 → 发送登录请求 → 获取Token → 写入YAML文件

整体功能总结

  1. 读取 login.yaml 里的登录接口信息(URL、请求方法、参数)
  2. 自动发送登录请求
  3. 从登录响应里提取 token
  4. 把 token 写入 extract.yaml(供后续接口鉴权使用)

3.1. 模块导入

复制代码
import os
import yaml
from sendrequests import SendRequest
  • import os:文件/路径操作工具(本代码没直接用,但自动化常用)
  • import yaml:核心库,专门读写 YAML 格式文件
  • from sendrequests import SendRequest:导入封装好的请求工具类
    • 作用:发送 HTTP 请求(get/post/put...),不用重复写 requests 代码

3.2. 工具函数:读取 YAML 文件

复制代码
def get_testcase_yaml(file):
    """
    获取yaml文件的数据
    :param file: yaml文件的路径
    :return:
    """
    try:
        with open(file, 'r', encoding='utf-8') as f:
            yaml_data = yaml.safe_load(f)
            return yaml_data
    except Exception as e:
        print(e)
  1. def get_testcase_yaml(file):
    定义函数,参数 file 是 YAML 文件路径(如 login.yaml)
  2. try...except
    异常捕获:文件不存在/格式错误时,不会直接报错崩溃
  3. with open(file, 'r', encoding='utf-8') as f:
    • r:只读模式
    • encoding='utf-8':支持中文,不乱码
    • with:自动关闭文件,安全规范
  1. yaml.safe_load(f)
    • 把 YAML 文本 → Python 字典/列表
    • safe_load:安全加载,防止恶意代码(比 load 安全)
  1. return yaml_data
    返回解析后的 Python 数据(给后面调用使用)

3.3. 类:读写 YAML 数据

复制代码
class ReadYamlData():
    """
    读取yaml数据,以及写入到yaml文件
    """

    def __init__(self, yaml_file=None):
        if yaml_file is not None:
            self.yaml_file = yaml_file
        else:
            self.yaml_file = 'login.yaml'

构造方法 init

  • 初始化类的时候,可以传 YAML 文件名
  • 不传默认用:login.yaml
  • 作用:灵活指定要读取的文件

复制代码
def write_yaml_data(self, data):
    """
    写入数据到yaml文件
    :param data: (dict)写入到yaml文件的数据
    :return:
    """
       file_path = 'extract.yaml'

        if not os.path.exists(file_path):
            with open(file_path, 'w', encoding='utf-8') as f:
                pass

        with open(file_path, 'w', encoding='utf-8') as f:
            if isinstance(data, dict):
                # 中文不乱码 + 保持顺序
                yaml.dump(data, f, allow_unicode=True, sort_keys=False)

写入方法核心知识点

  1. file_path = 'extract.yaml'
    固定写入到这个文件(专门存提取的变量:token、userId 等)
  2. 'w'模式 = 覆盖写入
    • 每次运行都会清空旧 token,写入新 token
    • 保证永远用最新 token,非常关键
  1. yaml.dump()
    把 Python 字典 → 写入 YAML 文件
  2. 参数解释
    • allow_unicode=True:支持中文
    • sort_keys=False:不自动排序 key(保持你写的顺序)

3.4. 主函数:程序入口

复制代码
if __name__ == '__main__':
  • Python 固定写法:直接运行这个文件时,才执行下面代码
  • 被其他文件导入时,不执行

  1. 读取登录用例

    res = get_testcase_yaml('login.yaml')[0]

  • 读取 login.yaml 所有数据
  • [0]:YAML 最外层是列表,取第一个用例

  1. 拼接请求信息

    url = 'http://127.0.0.1:8787' + res['baseInfo']['url']
    data = res['testCase'][0]['data']
    method = res['baseInfo']['method']


  1. 发送请求

    send = SendRequest()
    res = send.run_main(url, data, None, method)
    print(res)

  • SendRequest():创建请求对象
  • run_main():发送请求(封装了 requests)
  • 参数顺序:URL、请求参数、请求头、请求方法
  • 返回值 res = 接口响应结果(字典格式)

  1. 提取 Token

    token = res.get('token')
    print("获取到的token:", token)

  • .get('token'):安全取值
    • 有 token → 返回值
    • 无 token → 返回 None,不报错

  1. 写入 Token 到文件

    write_data = {"Token": token}
    read = ReadYamlData()
    read.write_yaml_data(write_data)

  • 构造字典 {"Token": token}
  • 调用写入方法,存入 extract.yaml

最终 extract.yaml 内容:

复制代码
Token: xxxxxxx

相关推荐
Fluxproxy22 分钟前
大模型批量数据采集:AI 自动化工作流搭建实战
大数据·人工智能·自动化
AI_Lab011 小时前
宝塔用了两年,有没有必要换成轻量方案?
linux·运维·服务器
众壹新能源科技1 小时前
逆变器直流开关柜温度监测与预防:红外巡检发现3个120度热点
运维·人工智能·自动化
by209991 小时前
Linux GDB 调试与 CGDB 使用
linux·运维·服务器·经验分享
小Ti客栈1 小时前
Netty 零拷贝原理与实战
运维·服务器·网络
ai_coder_ai1 小时前
AIOps 智能运维架构设计及其应用
运维
静以修身zzz1 小时前
计算云服务
运维·网络·云计算
万联WANFLOW2 小时前
异地组网速度忽快忽慢到底怎么回事?直连与中继的判断方法和处理步骤
运维·网络·网络协议·p2p
SDWAN_Cheap2 小时前
物理服务器跟云服务器有什么区别,使用于什么场景
运维·服务器
万岳软件开发小城3 小时前
AI数字人系统源码如何实现批量视频生成?任务队列与自动化生产流程解析
人工智能·自动化·语音识别·ai数字人小程序·ai数字人系统源码·ai数字人软件开发·ai数字人平台开发