1. 程式人生 > 實用技巧 >【自動化測試學習筆記】yaml檔案操作

【自動化測試學習筆記】yaml檔案操作

什麼是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檔案

文章首發於公眾號程式設計師一凡,願你我相遇皆有所獲!