Python自动化测试全套教程-第十三天(接口自动化基础之Pytest框架之YAML详解以及Parametrize 数据驱动)
本文介绍了YAML语法及其在自动化测试中的应用。第一部分详解YAML语法特点:完全兼容JSON、支持注释、通过缩进表示层级,并演示Python与YAML之间的序列化/反序列化操作。第二部分讲解如何结合pytest实现数据驱动测试,包括参数化测试用例和将测试数据独立存储在YAML文件中。最后提出一个通用的自动化测试框架结构,包含数据目录、日志目录、测试用例目录等标准组件,适用于API、UI等多种黑盒
文章目录
1、YAML语法详解
重点:
- yaml完全兼容json
- yaml和json一样,是数据,不是语句
- 序列化:将编程语言中数据,转为文件
- 反序列化:将文件中内容,转为编程语言中数据
- 文本文件:使用使用记事本之类的工具进行创建、编辑
优点:
- 结构更加清晰
- 语法更加简洁,支持注释
- 和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特色
-
完全兼容json
-
支持注释,python语言风格
-
成员通过换行表示
-:表示列表(数组)成员
-::表示字典(对象)成员 -
通过缩进(2个空格)来表示层级,python使用4个空格
-
自动处理类型
-
强制指定类型
强制指定类型:
– !!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 # 框架启动文件

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