接口自动化项目实战(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

相关推荐
天天喝旺仔1 小时前
Docker 镜像瘦身实战:多阶段构建把体积缩小 90%
运维·后端·ci/cd·docker·云原生·容器·性能优化
NJCloud1 小时前
Docker 私有仓库部署:Registry、加密传输与认证鉴权
运维·网络·docker·云原生·容器
玖石书2 小时前
Ubuntu 更换 USTC 镜像源完整指南(AMD64 / AARCH64)
linux·运维·ubuntu
zbyyd2 小时前
Linux 进程间通信(IPC):信号、消息队列、共享内存与信号量详解
linux·运维·c语言
智脑API2 小时前
CCSwitch Claude Code 如何配置 MCP?服务器启动、工具权限与安全测试
运维·服务器·claude·codex·ccswitch
qq_426003962 小时前
UI自动化元素定位不到解决方案
前端·pycharm·自动化
闲云野鹤在人间3 小时前
KVM虚拟化实战|CentOS‑Stream8 两种安装方式+模板制作+基础使用
linux·运维·服务器·centos
小张同学a.3 小时前
Docker 容器实战 2—— docker 仓库
linux·运维·服务器·docker·容器
Android系统攻城狮3 小时前
Linux PipeWire深度解析之pw_core_get_registry调用流程与实战(九十一)
linux·运维·服务器·音频进阶·pipewire音频实战进阶
其实防守也摸鱼3 小时前
智能体推荐:精选 AI Agent 工具与实战指南
运维·开发语言·人工智能·学习·web安全·自动化