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

相关推荐
乘云数字DATABUFF4 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--6 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森6 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜7 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB8 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode9 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户03284722207010 天前
如何搭建本地yum源(上)
运维
大树8813 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠13 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质13 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务