什么是YAML
YAML(YAML Ain’t Markup Language)是一種人類可讀的數據序列化語言。它的設計目標是使數據在不同編程語言之間交換和共享變得簡單。YAML采用了一種簡潔、直觀的語法,以易于閱讀和編寫的方式表示數據結構。
YAML廣泛應用于配置文件、數據序列化、API設計和許多其他領域。它被許多編程語言和框架所支持,包括Python、Java、Ruby等。在Python中,可以使用PyYAML庫來讀取和寫入YAML文件。
YAML的優點包括易讀性高、易于理解、與多種編程語言兼容以及支持豐富的數據結構。它的簡潔語法使得配置文件變得更加直觀和可維護。無論是作為配置文件格式還是數據交換格式,YAML都是一個強大而受歡迎的選擇。
YAML語法規范
YAML的語法特點包括:
使用縮進表示層級關系,不使用大括號或者其他符號。
使用冒號來表示鍵值對。
支持列表和嵌套結構。
使用注釋以 “#” 開頭。
支持引用和錨點,可以在文檔中引用其他部分的數據。
YAML(YAML Ain’t Markup Language)支持多種數據類型,包括字符串、數字、布爾值、列表、字典和空值。下面是每種數據類型的示例代碼和相應的語法規范:
字符串
語法規范:使用單引號或雙引號將字符串括起來。字符串的引號也可以省略
name: "John"
addr: "長沙"
- 數字
語法規范:直接寫入數字即可。
age: 30
- 布爾值
語法規范:使用true表示真,使用false表示假。
isStudent: true
isTeacher: false
- 列表
語法規范:使用短橫線(-)表示列表項,列表項之間使用換行進行分隔。
fruits:- apple- banana- orange
- 字典
語法規范:使用冒號(:)表示鍵值對,鍵值對之間使用空格進行分隔。
person:name: "John"age: 30
- 空值
語法規范:使用null表示空值。
status: null
這些是YAML支持的常見數據類型和相應的示例代碼。您可以根據需要使用這些數據類型來構建復雜的數據結構。
注意 :
YAML對于縮進非常敏感,使用空格進行縮進來表示層級關系。
縮進的空格數目可以是2個或4個,但在整個文檔中必須保持一致。
python操作YAML
Python提供了pyyaml庫來操作YAML文件,操作yaml文件之前,先安裝好pyyaml庫。
在終端(Pycharm-Terminal)或命令提示符(cmd)中運行以下命令來安裝pyyaml庫:pip install pyyaml
1.python讀取yaml文件
第一步:提前準備好的yaml文件,yaml文件后綴為.yaml或者.yml
name: "John"
addr: "長沙"
age: 18
status: null
isStudent: true
fruits:- apple- banana- orange
teacher:name: "Alex"age: 30
第二步:使用python讀取yaml中的數據
import yaml
with open(file="d.yaml", mode="r",encoding='utf-8') as f:res = yaml.safe_load(f)
print(res)
yaml.safe_load()方法:讀取YAML文件中的數據。yaml.safe_load()方法參數是文件對象
運行結果:會自動將yaml中的數據轉為python所支持的數據類型
2.python將數據寫入yaml文件
第一步:將python指定的變量值寫入yaml文件中
import yaml
data = {"Person": {"name": "John","age": 30,"address": {"street": "123 Main St","city": "Anytown","state": "CA"}}
}
# 將data變量存儲的數據寫入YAML文件
with open(file="example.yaml", mode="w") as f:yaml.dump(data, f)
yaml.dump()方法:將數據寫入到yaml文件中。yaml.dump()方法的第一個參數是寫入數據,第二個參數是文件對象。
第二步:查看example.yaml中的顯示
YAML結合UI自動化實現KDT
KDT(Keyword-Driven Testing):關鍵字驅動測試的英文簡稱。
1.yaml數據準備
2.basepage方法封裝
from selenium.webdriver import Chrome,ActionChainsclass BasePage:def __init__(self,driver:Chrome):self.driver = driverdef goto(self,url):'''打開網址'''self.driver.get(url)def click(self,locator):'''點擊操作'''el = self.driver.find_element(*locator)try:el.click()except: ActionChains(self.driver).click(el).perform()def sendkeys(self,value,locator=None):'''發送文本操作'''if locator:# 相當于ActionChains中的send_keys_to_element(ele,value),先做點擊,再做文本輸入el = self.driver.find_element(*locator)el.send_keys(value)else: ActionChains(self.driver).send_keys(value).perform()def assert_text_contains(self,locator,excepted):'''斷言文本是否包含指定的內容'''el = self.driver.find_element(*locator)assert excepted in el.text
3.測試用例編寫—實現關鍵字驅動測試
import time
import yaml
from selenium import webdriver
from basepage import BasePage# 1、讀取yaml文件中的數據
with open(file='test_keyword.yaml',mode='r',encoding='utf-8') as f:data = yaml.safe_load(f)# 2、測試用例編寫
def test_01():# 初始化瀏覽器操作driver = webdriver.Chrome() driver.implicitly_wait(10)driver.maximize_window()# 實例化BasePage的對象basepage = BasePage(driver)# 遍歷讀取到的data數據for step in data:# 獲取動作名稱method_name = step['action']# 獲取參數params = step['params']# 獲取類中方法名method = getattr(basepage, method_name)# 調用方法,輸入參數 method(**params) # 字典解包time.sleep(2)driver.quit()
最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:
這些資料,對于【軟件測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴上萬個測試工程師們走過最艱難的路程,希望也能幫助到你!?