当前位置: 首页 > news >正文

YAML在自动化测试中的三大核心作用

YAML在自动化测试中的三大核心作用

  1. 配置中心:管理测试环境/参数

    # config.yaml  
    environments:dev: url: "http://dev.api.com"timeout: 5prod:url: "https://api.com"timeout: 10
  2. 数据驱动:分离测试数据与脚本

    # test_data.yaml
    login_cases:- name: "正确账号"username: "admin"password: "P@ssw0rd"expected: "登录成功"- name: "密码错误"username: "admin"password: "wrong"expected: "密码错误"
    
  3. 流程定义:描述测试步骤序列

    # test_flow.yaml
    smoke_test:- step: "打开首页"action: "get"url: "/home"- step: "用户登录"action: "post"url: "/login"body: user: "${admin_user}"  # 引用变量pwd: "${admin_pwd}"

零基础YAML语法速成(附避坑指南)

基础规则(5分钟掌握)

# 1. 键值对(冒号后必须空格!)
name: "登录测试"   # ✅ 正确
version:1.0       # ❌ 错误(冒号后缺空格)# 2. 列表(用短横线表示)
test_tags:- smoke- regression   # 注意缩进对齐# 3. 嵌套结构(缩进=2空格)
database:host: "localhost"port: 3306credentials:   # 嵌套对象user: "root"password: "123456"# 4. 多行文本(|保留换行 >折叠换行)
description: |  这是第一行这是第二行  # 输出两行summary: >这是一段很长很长的文本,实际输出会变成一行  #### 自动化测试专用技巧  
```yaml
# 1. 变量引用(配合框架实现)
api_config:base_url: "https://api.example.com"login: "${base_url}/auth"  # → https://api.example.com/auth# 2. 复用代码块(锚点&别名)
common_headers: &default_headers  # 定义锚点Content-Type: "application/json"User-Agent: "AutoTest/1.0"test_cases:case1:headers: <<: *default_headers        # 继承锚点X-Token: "abc123"           # 新增字段

实战:用YAML驱动Pytest测试(完整案例)

目录结构

project/
├── config/
│   ├── env.yaml        # 环境配置
│   └── users.yaml      # 用户数据
├── test_cases/
│   └── login_test.yaml # 测试用例  
└── test_login.py       # 测试脚本
步骤1:定义YAML配置文件
# env.yaml
prod:base_url: "https://api.myapp.com"timeout: 10# users.yaml
credentials:admin:username: "admin@company.com"password: "S3cret!2024"guest:username: "guest@test.com"password: "TempP@ss"

步骤2:设计数据驱动测试用例

# login_test.yaml
test_suite: "用户登录验证"test_cases:- case_id: "TC-LOGIN-01"description: "管理员正常登录"data:username: "${credentials.admin.username}"password: "${credentials.admin.password}"expected:code: 200message: "success"- case_id: "TC-LOGIN-02"description: "错误密码登录"data:username: "${credentials.admin.username}"password: "wrong_password"expected:code: 401message: "invalid password"

步骤3:Python测试脚本解析YAML

import yaml
import pytest# 加载YAML文件
def load_yaml(file_path):with open(file_path) as f:return yaml.safe_load(f)# 动态生成测试用例
@pytest.mark.parametrize("case", load_yaml("test_cases/login_test.yaml")["test_cases"])
def test_login(case):# 模拟实际测试逻辑response = fake_api_login(case["data"]) # 断言验证assert response["code"] == case["expected"]["code"]assert case["expected"]["message"] in response["text"]print(f"测试通过: {case['description']}")# 伪代码:模拟API调用
def fake_api_login(data):if data["password"] == "wrong_password":return {"code":401, "text":"invalid password"}return {"code":200, "text":"success"}

执行结果

$ pytest -v
=========================
test_login.py::test_login[TC-LOGIN-01] PASSED  [50%]
test_login.py::test_login[TC-LOGIN-02] PASSED  [100%]

YAML使用高频避坑指南

  1. 缩进陷阱

    • 必须使用空格(严禁Tab键)
    • 同级元素缩进必须对齐
  2. 特殊字符处理

    # 错误:未转义冒号
    key: "value:contains:colon"   # ❌ 解析错误# 正确:用引号包裹
    key: "value:contains:colon"   # ✅
  3. 数据类型混淆

    version: 1.0     # 浮点数 → 1.0
    version: "1.0"   # 字符串 → "1.0"
    is_prod: true    # 布尔值 → True (Python)
    
  4. 大文件优化技巧

    # 避免超过500行(拆分多个文件)
    # 使用锚点减少重复代码
    

「小贴士」:点击头像→【关注】按钮,获取更多软件测试的晋升认知不迷路! 🚀

相关文章:

  • RADIUS-管理员获取共享密钥
  • 拆装与维修汇总帖
  • Qt/C++学习系列之QGroupBox控件的简单使用
  • Linux项目自动化构建工具——make/Makefile
  • 掌握YOLOv8:从视频目标检测到划定区域统计计数的实用指南
  • 6.824 lab1
  • float、double 这类 浮点数 相比,DECIMAL 是另一种完全不同的数值类型
  • 动态表单 LiveCycle 与 AcroForms 对比
  • 东南亚用工合规困境破解:从文化冲突到数字化管理升级
  • 央国企人力资源数字化转型:全景路径与6类挑战解析
  • vite+vue3项目中,单个组件中使用 @use报错
  • 群晖NAS套件历史版本资源
  • 动态规划---股票问题
  • AiPy实战:10分钟用AI造了个音乐游戏!
  • Kinova机械臂在Atlas手术导航系统中的核心作用
  • 数论~~~
  • redis配置及优化
  • 兰亭妙微 | 医疗软件的界面设计能有多专业?
  • windows环境Google-sparsehash安装
  • 数据库设计的三大范式
  • 南京seo报价/seo搜索推广
  • 网站建设合同属于技术服务合同吗/火爆产品的推广文案
  • 小白如何制作微信小程序/盐城seo优化
  • 建设银行的登录网站/长沙seo优化价格
  • 用花生壳免费域名做公司网站/百度招商客服电话
  • 备案的域名做电影网站/上海谷歌seo