yaml文件存放測試用例
一、YAML簡介
YAML 是一種可讀性非常高,與程序語言數據結構非常接近。同時具備豐富的表達能力和可擴展性,並且易於使用的數據標記語言。
YAML是 "YAML Ain't a Markup Language"(YAML不是一種標記語言)的遞歸縮寫。
這么命名的方式,表示 YAML 強調的不是標記,而是數據本身。
二、基本語法
- 1.大小寫敏感
- 2.使用縮進表示層級關系
- 3.不允許使用 TAB 鍵來縮進,只允許使用空格鍵來縮進
- 4.縮進的空格數量不重要
- 5.使用"#"來表示注釋
三、支持的數據格式
- 1.對象:鍵值對的集合,又稱映射 (mapping) / 哈希(hashes)/ 字典 (dictionary)
- 2.數組: 一組按次序排列的值,又稱序列 (sequence) / 列表 (list)
- 3.純量 (scalars) :單個的,不可再分的值,
- 常見的純量: 字符串、布爾值、整數、浮點數、null、時間、日期
四、數據格式簡單示例
1、對象數據格式
yaml格式:
name: xiaoming
讀取出來的格式:
{'name':'xiaoming'}
2、數組數據格式(在前面添加 ‘-’ 讀出來就是數組格式)
yaml格式:
- list1
- list2
- list3
讀取出來的格式:
['list1', 'list2', 'list3']
3、純量數據格式
yaml格式:
number: 18.5
string: hello
bool: true
nothing: ~
date: 2020-04-21
time: 2020-04-21 13:14:21
讀取出來的格式:
{
'number': 18.5,
'string': 'hello',
'bool': True,
'nothing': None,
'date': datetime.date(2020, 4, 21),
'time': datetime.datetime(2020, 4, 21, 13, 14, 21)
}
五、YAML使用
1、安裝yaml庫
pip install pyyaml
2、導入yaml庫
import yaml
3、讀取數據
with open(file="conf.yaml", encoding='utf8') as f:
data = yaml.load(f, yaml.FullLoader)
【注】:YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
data = yaml.load(f)
為了去除這個警告,我們可以在yaml.load( )加一個參數 yaml.FullLoader 即可
4、寫入數據(mode參數:w,覆蓋寫入, a,追加寫入)
new_data = {'name': 'Tom'}
with open(file="conf.yaml", mode='w', encoding="utf-8") as f:
yaml.dump(new_data, f)
六、YAML文件存放測試用例數據
yaml測試用例示例
register:
- case_id: 1
title: 注冊用例1
method: POST
url: /register
data:
account: '123456789'
pwd: '12345678'
expect:
code: 0
msg: OK
- case_id: 2
title: 注冊用例2
method: POST
url: /register
data:
account: '123456788'
pwd: '12345678'
type: 1
expect:
code: 0
msg: OK
login:
- case_id: 1
title: 登陸用例1
method: POST
url: /login
data:
account: '123456789'
pwd: '12345678'
expect:
code: 0
msg: OK
- case_id: 2
title: 登陸用例2
method: POST
url: /login
data:
account: '123456788'
pwd: '12345678'
expect:
code: 0
msg: OK
讀取出的數據(清晰明了)
{
'register': [
{'case_id': 1, 'title': '注冊用例1', 'method': 'POST', 'url': '/register', 'data': {'account': '123456789', 'pwd': '12345678'}, 'expect': {'code': 0, 'msg': 'OK'}},
{'case_id': 2, 'title': '注冊用例2', 'method': 'POST', 'url': '/register', 'data': {'account': '123456788', 'pwd': '12345678', 'type': 1}, 'expect': {'code': 0, 'msg': 'OK'}}
],
'login': [
{'case_id': 1, 'title': '登陸用例1', 'method': 'POST', 'url': '/login', 'data': {'account': '123456789', 'pwd': '12345678'}, 'expect': {'code': 0, 'msg': 'OK'}},
{'case_id': 2, 'title': '登陸用例2', 'method': 'POST', 'url': '/login', 'data': {'account': '123456788', 'pwd': '12345678'}, 'expect': {'code': 0, 'msg': 'OK'}}
]
}
七、對讀取YAML文件進行封裝
class YamlHandle(object):
def __init__(self, conf_file):
self.conf_file = conf_file
def load(self) -> dict:
"""
讀取yaml文件,獲取全部數據
:return: dict
"""
with open(file=self.conf_file, encoding='utf8') as f:
data = yaml.load(f, yaml.FullLoader)
return data
def get_data(self, node) -> list:
"""
獲取節點數據
:param node: 節點名稱
:return: dict&str
"""
return self.load()[node]
