什么是yaml
- 一種標記語言,yaml 是專門用來寫組態檔的語言,非常簡潔和強大
- 更直觀,更方便,有點類似于json格式
自動化測驗需要做到代碼和資料分離,我們經常需要將不同的資料放到不同的檔案內進行讀取,比如用例放到Excel表里,組態檔放到ini檔案里等等,yaml專門用于寫組態檔
yaml基本語法規則
- 大小寫敏感
- 使用縮進表示層級關系
- 縮進時不允許使用Tab鍵,只允許使用空格,
- 縮進的空格數目不重要,只要相同層級的元素左側對齊即可
- #表示注釋,這個和python的注釋一樣
安裝yaml
pip install pyyaml
讀取yaml
鍵值對(dict)
yaml檔案,test.yaml
user: admin
pwd: 123456
用python讀取yaml檔案案例如下,先用open方法讀取檔案資料,再通過load方法轉成Python對像,這個load跟json里面的load是相似的,
#! /usr/bin/python3
# -*- coding:utf-8 -*-
# @Time : 2020/8/17 9:23
# @Author : 程式員一凡
import yaml
# 定義yaml檔案路徑
yaml_path = "E:\\study\\date.yaml"
# 打開yaml檔案
file = open(yaml_path, "r", encoding="utf-8")
# 讀取
string = file.read()
dict = yaml.load(string)
# 轉換后資料型別為:dict
print(type(dict))
print(dict)
# 運行結果:
{'usr': 'admin', 'pwd': 123456}
序列(list)
- yaml里面寫一個陣列,前面加一個‘-’符號,如下
- admin1
- admin2
- admin3
#! /usr/bin/python3
# -*- coding:utf-8 -*-
# @FileName: day6.py
# @Time : 2020/8/17 9:23
# @Author : 程式員一凡
import yaml
# 定義檔案路徑
yaml_path = "E:\\study\\date.yaml"
file = open(yaml_path, "r", encoding="utf-8")
string = file.read()
print(string)
# 轉換后資料型別為串列
list = yaml.load(string, Loader=yaml.FullLoader)
print(list)
# 運行結果
<class 'list'>
['admin1', 'admin2', 'admin3']
純量(str)
- 單個的、不可再分的值,如:字串、布林值、整數、浮點數、Null、時間、日期
# 布林值true/false
n: true
# int
n1: 12
# float
n2: 12.3
# None
n3: ~
{'n': True, 'n1': 12, 'n2': 12.3, 'n3': None}
混合使用
字典鑲嵌在串列內
- usr:
name: admin
pwd: 123456
- mail:
user: [email protected]
pwd: 123456
運行結果:
[{'usr': {'name': 'admin', 'pwd': 123456}}, {'mail': {'user': '[email protected]', 'pwd': 123456}}]
資料寫入yaml
- 使用yaml下的dump方法將資料寫入到yaml檔案內
#! /usr/bin/python3
# -*- coding:utf-8 -*-
# @Time : 2020/8/17 9:23
# @Author : 程式員一凡
import yaml
寫入鍵值對
# data = https://www.cnblogs.com/WeTester/p/{"send_mail": "[email protected]"}
# 寫入串列
# data =https://www.cnblogs.com/WeTester/p/["[email protected]", "[email protected]"]
# 寫入混合資料
# data = https://www.cnblogs.com/WeTester/p/[{"mai": {"send": "[email protected]"}}]
# yaml檔案路徑
yaml_path = "E:\\study\\date.yaml"
# 打開檔案,a是在檔案末尾寫入內容
file = open(yaml_path, "a", encoding="utf-8")
# 寫入資料, allow_unicode=True
yaml.dump(data, file)
# 關閉檔案
file.close()
運行結果
# 鍵值對
send_mail: [email protected]
# 串列
- [email protected]
- [email protected]
# 混合資料
- mai:
send: [email protected]
實戰
上面我們說了yaml用于在自動化測驗中實作代碼和資料分離,那么我們在企業專案中如何用yaml實作代碼和資料分離呢?有一個場景,我們要發送郵件給指定收件人,
撰寫yaml檔案
- 將收發郵件人資料寫到yaml檔案內
# 發件人郵箱和授權碼
- send_mail: [email protected]
password: QQ郵箱的授權碼
# 收件人郵箱
- get_mail: [email protected]
讀取yaml檔案
#! /usr/bin/python3
# -*- coding:utf-8 -*-
# @FileName: read_yaml.py
# @Time : 2020/8/19 16:21
# 公眾號 : 程式員一凡
import yaml
def read_yaml():
"""讀取yaml檔案"""
# 定義yaml檔案路徑
yaml_path = "E:\\mail\\date\\yaml.yaml"
# 打開yaml檔案
file = open(yaml_path, "r")
# 讀取檔案
string = file.read()
# 轉換為python對像,型別為字典
dict = yaml.load(string)
print(dict)
# 回傳資料為字典型別
return dict
運行結果
[{'send_mail': '[email protected]', 'password': 'code'}, {'get_mail': '[email protected]'}]
發送郵件
#! /usr/bin/python3
# -*- coding:utf-8 -*-
# @FileName: mail.py
# @Time : 2020/8/19 16:20
# 公眾號 : 程式員一凡
import zmail
# 匯入common檔案下的read_yaml函式
from common import read_yaml
# 呼叫yaml檔案里的資料
response = read_yaml.read_yaml()
def send(send_mail, password, get_mail):
"""發送測驗報告"""
report_path = "E:\\mail\\report\\test.html"
MAIL = {
'subject': '郵件主題',
'content_text': '測驗發送郵件',
'attachments': report_path,
}
server = zmail.server(send_mail, password)
server.send_mail(get_mail, MAIL)
send(response[0]["sendmail"], response[0]["password"], response[1]["getmail"])
課后練習
- 寫一個登錄的腳本,把登錄的測驗資料放在yaml檔案中,然后讀取yaml檔案,執行腳本
- 將執行后的結果寫入Yaml檔案
文章首發于公眾號程式員一凡,愿你我相遇皆有所獲!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/237466.html
標籤:其他
