1. YAML语法详解
yaml是一个完全类似于json数据序列化格式
重点:
- yaml完全兼容json
- yaml和json,都是数据,不是语句
- 序列化:将内存中的对象,转为文件
- 反序列化:将文件内容,转为内存中的对象
- 文本文件(可以使用记事本进行创建,编辑,修改)
优点:
- 结构更加清晰
- 语法高级,支持注释
- 和python语法相似
1.1 序列化:将Python转为yaml
1.1.1 把python转为json
1 import json 2 3 data={ 4 "数字": [1,2,3,4,5,6,7,-1,-2], 5 "字符串": ["1","2"], 6 "布尔值": [True,False], 7 "空值": None, 8 "列表": [[1,2,3],[-1,-2,-3]], 9 "字典":[{"a":1},{"b":2,"c":3}] 10 } 11 12 with open("data.json","w",encoding="utf-8") as f: 13 s=json.dumps(data) 14 print(s) 15 f.write(s)
1.1.2 把python转为yaml
pip install pyyaml
1 import yaml 2 3 data={ 4 "数字": [1,2,3,4,5,6,7,-1,-2], 5 "字符串": ["1","2"], 6 "布尔值": [True,False], 7 "空值": None, 8 "列表": [[1,2,3],[-1,-2,-3]], 9 "字典":[{"a":1},{"b":2,"c":3}] 10 } 11 12 with open("data.yaml","w",encoding="utf-8") as f: 13 s=yaml.safe_dump(data) 14 print(s) 15 f.write(s)
1.2 反序列化:将yaml转换为Python
1 import yaml 2 3 with open("data.json",encoding="utf-8") as f: 4 s_json=f.read() 5 6 7 with open("data.yaml",encoding="utf-8") as f: 8 s_ytaml=f.read() 9 10 d_json=yaml.safe_load(s_json) 11 d_yaml=yaml.safe_load(s_ytaml) 12 13 print(d_json) 14 print(d_yaml)
1.3 yaml语法特色
- docker-compose
- github action
- springcloud application.yml
- k8s
列表: [[1,2,3],[-1,-2,-3]] #这是字段 字典: - a: 1 - b: 2 c: 3 字符串: - '1' - '2' 布尔值: - true - false 数字: [1, 2, 3, 4, 5, 6, 7, -1, -2] 空值: null 层级: a: b: c: 2 变量类型: !!int '1' 变量类型2: !!str 2 变量类型3: !!str 2024-1-7
- 完全兼容json
- 执行注释,使用#,和python完全一致
- 成员通过换行表示:
- “-”:表示列表的成员
- “:”:表示字典的成员
- 层级通过缩进表示,和python完全一致
- 变量类型
-
变量类型3: !!str 2024-1-7
-
yaml(或者json)存在文件中的字符串
一旦进入Python,只会按照Python的数据结构来使用
2. pytest+yaml实现数据驱动测试
数据驱动测试=参数化测试(pytest)+数据文件(yaml、json、excel等)
2.1 参数化测试用例
1 import pytest 2 3 4 def add(a, b): 5 try: 6 return a + b 7 except Exception: 8 return None 9 10 @pytest.mark.parametrize( 11 "a,b,c", 12 [ 13 (1, 1, 2), 14 ('1', '1', '11'), 15 ('1', 1, None), 16 (True, False, 1), 17 (1,False,1), 18 ("1", None, None) 19 ] 20 ) 21 def test_add(a, b, c): 22 assert add(a, b) == c