接口自动化项目实战(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 小时前
Nginx 缓存命中率监控:从 X-Cache-Status 到实时统计
运维·nginx·缓存
Apipi*2 小时前
30天速通Linux 第六章信号及信号处理
linux·运维·信号处理
慧都小项2 小时前
从原理图到 PCB 制造数据:设计交付的 4 个核对关口
程序人生·自动化·pcb工艺·电子设计
运维行者_3 小时前
网络性能监控怎么做?从自动发现到根因分析的4个环节
运维·服务器·网络·人工智能·支持向量机
此时不提桶,更待何时4 小时前
06-14-A-Kafka集群运维与迁移实战详解
运维·kafka
qq_284274054 小时前
机械原理笔记:平面机构自由度计算(复合铰链、局部自由度、虚约束)与四杆机构入门(含考点)
笔记·学习·平面·自动化·制造
qq_284274055 小时前
数控铣床与加工中心笔记:铣刀与刀柄系统、G54试切对刀、镜像加工指令、孔加工工艺(钻扩铰镗)与固定循环G73/G83/G81/G76/G87/G84
笔记·学习·自动化·制造
IT研究所5 小时前
AI-ITR平台如何减少客户问题反复升级?
大数据·运维·人工智能·低代码·自然语言处理·安全架构·企微
AIgorithmGEEK6 小时前
[Linux]从手写报头到内核套路:序列化、反序列化与自定义协议全链路
linux·运维·服务器·网络·序列化·反序列化
Nil2086 小时前
leetcode 139单词拆分
linux·运维·服务器