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

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

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

    # config.yaml  
    environments:
      dev: 
        url: "http://dev.api.com"
        timeout: 5
      prod:
        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: 3306
  credentials:   # 嵌套对象
    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: 200
      message: "success"

  - case_id: "TC-LOGIN-02"
    description: "错误密码登录"
    data:
      username: "${credentials.admin.username}"
      password: "wrong_password"
    expected:
      code: 401
      message: "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行(拆分多个文件)
    # 使用锚点减少重复代码
    

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值