1. 程式人生 > 其它 >python - 讀取yaml 檔案

python - 讀取yaml 檔案

yaml簡介

  1. yaml : Yet Another Markup Language :另一種標記語言。yaml 是專門用來寫配置檔案的語言,非常簡潔和強大,更直觀,更方便,有點類似於json格式。在自動化測試用的相當多,所以需要小夥伴們要熟練掌握,把測試資料存放在yaml檔案,也可以進行引數化。

  2. yaml基本語法規則:

  • 大小寫敏感
  • 使用縮排表示層級關係
  • 縮排時不允許使用Tab鍵,只允許使用空格。
  • 縮排的空格數目不重要,只要相同層級的元素左側對齊即可
  • '#'表示註釋,從這個字元一直到行尾,都會被解析器忽略,這個和python的註釋一樣

  1. yaml支援的資料結構有三種:
  • 物件:鍵值對的集合,又稱為對映(mapping)/ 雜湊(hashes) / 字典(dictionary)
  • 陣列:一組按次序排列的值,又稱為序列(sequence) / 列表(list)
  • 純量(scalars):單個的、不可再分的值。字串、布林值、整數、浮點數、Null、時間、日期



yaml的使用

1.使用pip安裝pyyaml模組

pip install pyyaml -i https://pypi.douban.com/simple



2.yaml的基本使用

在同一目錄下新建test_data.yamlread_yaml.py檔案。

yaml檔案:
test_data.yaml

-
 phone : 1326557
 key : 01829bab25a57e4c11eff56db56d1f94
 except : 200

py檔案:
read_yaml.py

# -*- coding:utf-8 -*-

import yaml
f = open('test_data.yaml', 'r', encoding='utf-8')
cfg = f.read()
d = yaml.load(cfg, Loader=yaml.FullLoader) # 用load轉字典
# yaml5.1版本後棄用了yaml.load(file)這個用法,因為覺得很不安全,5.1版本之後就修改了需要指定Loader,通過預設載入器(FullLoader)禁止執行任意函式
# Loader=yaml.FullLoader 加上這行程式碼,告警就沒了
print(d)

去掉告警的方法看以上備註:

執行結果:

[{'phone': 1326557, 'key': '01829bab25a57e4c11eff56db56d1f94', 'except': 200}]



3.封裝yaml

以上是yaml檔案的讀取的簡單用法,將她進行封裝好,後續使用直接呼叫即可。

import yaml
import os


class GetYaml():
    def __init__(self, file_path):
        # 判斷檔案是否存在
        if os.path.exists(file_path):
            self.file_path = file_path
        else:
            print('沒有找到%s檔案路徑' % file_path)

        self.data = self.read_yaml()

    def read_yaml(self):
        with open(self.file_path, 'r', encoding='utf-8')as f:
            p = f.read()
            return p

    def get_data(self, key=None):
        result = yaml.load(self.data, Loader=yaml.FullLoader)
        # 判斷key是否存在
        if key == None:
            return result
        else:
            return result.get(key)


if __name__ == '__main__':
    read_yaml = GetYaml('test_data.yaml')
    r = read_yaml.get_data()
    print(r)



4.python常用資料型別在yaml中的書寫格式

做介面自動化或者UI自動化的時候,要進行資料分離,把測試資料寫在yaml檔案中,即在yaml檔案中寫測試用例。
把常用的格式列出來:

1.yaml是鍵值對的格式,python中字典也是鍵值對的形式。

yaml檔案的格式:

 user: admin
 psw: 123456

python3.7中的格式:

{'user': 'admin', 'psw': 123456}

2.字典巢狀字典

yaml檔案的格式:

input:
 user: admin
 psw: 123456

python3.7中的格式:

{'input': {'user': 'admin', 'psw': 123456}}

3.列表中巢狀字典(list)

yaml裡面寫一個數組,前面加一個'-'符號.
yaml檔案的格式:

- test1: 123456
- test2: 111111
- test3: 222222

python3.7中的格式:

[{'test1': 123456}, {'test2': 111111}, {'test3': 222222}]

4.list巢狀dict

yaml檔案格式:

- user: admin1
  pwd: '123456'

- user: admin2
  pwd: '123321'

- user: admin3
  pwd: '123457'

python3.7中的格式

[{'user': 'admin1', 'pwd': '123456'}, 
 {'user': 'admin2', 'pwd': '123321'}, 
 {'user': 'admin3', 'pwd': '123457'}]

5.dict巢狀list

yaml檔案中的格式:

input1:
 - admin1
 - '123456'

input2:
 - admin2
 - '123321'

input3:
 - admin3
 - '123457'

python3.7中的格式:

{'input1': ['admin1', '123456'], 
 'input2': ['admin2', '123321'], 
 'input3': ['admin3', '123457']}