文章目录

1、YAML语法详解

重点:

  1. yaml完全兼容json
  2. yaml和json一样,是数据,不是语句
  3. 序列化:将编程语言中数据,转为文件
  4. 反序列化:将文件中内容,转为编程语言中数据
  5. 文本文件:使用使用记事本之类的工具进行创建、编辑

优点:

  • 结构更加清晰
  • 语法更加简洁,支持注释
  • 和python(输出字符串是双引号)相似
1.1、序列化:python转yaml

把python数据转为json文件

data = {
    '数字':[1,2,3,-1,3],
    '字符串':['1','3','-1.3'],
    '布尔值':[True,False],
    '空值':None,
    '列表':[[1,2,3],[-1,-2,-3]],
    '字典':[{'a':1},{'b':2}]
}

import json

s = json.dumps(data,ensure_ascii=False) # python转json,ensure_ascii=False显示中文字符

with open('data.json','w',encoding = 'utf-8') as f:
    f.write(s) # 创建json文件


把python数据转为yaml文件

pip install pyyaml

data = {
    '数字':[1,2,3,-1,3],
    '字符串':['1','3','-1.3'],
    '布尔值':[True,False],
    '空值':None,
    '列表':[[1,2,3],[-1,-2,-3]],
    '字典':[{'a':1},{'b':2}]
}

import yaml
import json
s = yaml.safe_dump(data,allow_unicode=True,sort_keys=False) # python转yaml

with open('data.yaml','w',encoding = 'utf-8') as f:
    f.write(s) # 创建yaml文件

1.2、反序列化:yaml转python

把json文件转为python

import json

data_json = ""

with open('data.json',encoding='utf-8') as f:
    s = f.read()  # 得到字符串
    data_json = json.loads(s) # 得到数据

print(data_json) # 打印python数据

把yaml文件转为python

import yaml

data_yaml = ""

with open('data.yaml',encoding='utf-8') as f:
    s = f.read()  # 得到字符串
    data_yaml= yaml.safe_load(s) # 得到数据

print(data_yaml) # 打印python数据

1.3、yaml特色
  1. 完全兼容json

  2. 支持注释,python语言风格

  3. 成员通过换行表示

    -:表示列表(数组)成员
    -::表示字典(对象)成员

  4. 通过缩进(2个空格)来表示层级,python使用4个空格

  5. 自动处理类型

  6. 强制指定类型

强制指定类型:
– !!str 12
– !!float 45
– !!str 2025-7-10

输出:[‘12’, 45.0, ‘2025-7-10’]

2、pytest+yaml实现数驱动测试

数据驱动测试(Data Driver Test) = 参数化测试(python内置标记)+数据文件(yaml、json)

2.1、参数化测试用例
import pytest


def add(a,b):
    return a+b

@pytest.mark.parametrize(
    'a,b,c',
    [
        (1,2,3),
        (2,3,5),
        (4,5,9)

    ]
)
def test_add(a,b,c):
    assert add(a,b) == c

2.2、数据内容委托到独立文件

import pytest
import yaml


def add(a, b):
    return a + b


with open('ddt_data.yaml', encoding='utf-8') as f:
    s = f.read()
    data_yaml = yaml.safe_load(s)


@pytest.mark.parametrize(
    'a,b,c',
    data_yaml
)
def test_add(a, b, c):
    assert add(a, b) == c

ddt_data.yaml文件
- [1,2,3]
- [2,2,4]
- [3,2,5]
- [4,2,6]
- [5,2,7]
- [a,2,3]

3、自动化测试框架结构

pytest是通用的测试框架

  • 白盒
  • 单元
  • 集成
  • 黑盒
    • API
    • UI
    • App

获取文件路径
在这里插入图片描述

通用的黑盒测试框架

commons # 常用代码目录
data # 数据目录
logs # 日志目录
report # 测试报告目录
temps # allure临时数据目录
tests # 测试用例目录
conftest.py # pytest动态配置,共享fixture
pytest.ini # 配置文件
run.py # 框架启动文件

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐