【自動化測試學習筆記】yaml檔案操作
阿新 • • 發佈:2020-12-20
什麼是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 = {"send_mail": "[email protected]"}
# 寫入列表
# data =["[email protected]", "[email protected]"]
# 寫入混合資料
# data = [{"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檔案
文章首發於公眾號程式設計師一凡,願你我相遇皆有所獲!