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

相关推荐
一个有温度的技术博主9 分钟前
网安实验系列七:域名收集
linux·运维·服务器
我爱学习好爱好爱12 分钟前
Ansible 环境搭建
linux·运维·ansible
人工智能训练1 小时前
从 1.1.3 到 1.13.2!Ubuntu 24.04 上 Dify 升级保姆级教程(零数据丢失 + 一键迁移)
linux·运维·人工智能·windows·ubuntu·dify
袖手蹲1 小时前
Arduino UNO Q 板载 Nanobot 自动化编程指南之七
运维·人工智能·自动化
我要成为嵌入式大佬1 小时前
正点原子MP157--问题详解--四(关于根文件系统驱动模块指令的注意事项)
linux·运维·服务器
feng68_1 小时前
Redis架构实践
linux·运维·redis·架构·bootstrap
欧云服务器1 小时前
宝塔计划任务怎么自动删除多少个以外的文件?
linux·运维·服务器
淼淼爱喝水1 小时前
openEuler 系统下 Ansible 一键安装教程(保姆级)
运维·ansible·openeuler
XXOOXRT2 小时前
零基础掌握Linux常用命令
linux·运维·服务器
桌面运维家2 小时前
KVM虚拟机:快照增量备份与Linux系统快速恢复
linux·运维·服务器