YAML
-
YAML是一個對所有編程語言都很友好的數據序列化標準,它是一種直觀的能夠被電腦識別的數據序列化格式,是一種可讀性高且容易被人類閱讀的腳本語言
-
YAML語言的本質是一種通用的數據串行化格式
-
適用場景
- 可以直接序列化為數組、字典
- 解析成本低
- 專門寫配置文件的語言,比JSON格式方便,比ini文檔功能更強
-
支持的三種數據結構
- 對象:鍵值對的集合,例如:映射、哈希、字典
- 數組:一組按次序排列的值,例如:序列、列表
- 純量:單個的,不可再分的值,例如:字符串、float、int
-
建議將數據都放在YAML中,而測試用例中只保留流程
YAML字典的寫法
- 最外層的key頂格,后面value里的字典,空兩格,不同的鍵值對之間換行隔開
YAML數組的寫法
- 最外層的key頂格,后面value里的數組空兩格,然后跟
-
再空一格后跟元素,元素之間換行隔開
- 元素也可以是一個字典,但是字典和字典之間需要用
-
和換行隔開
- 元素也可以是一個數組,數組之間也需要用
-
和換行隔開
示例
- 注意,
hero
和hero2
等價,我們可以用yaml字典的寫法可以加{}
,也可以不加,但是加{}
時需要加,
- YAML不需要寫
" "
讀取yaml文件
- 首先需要安裝
pyyaml
依賴,但是導入時使用yaml
- 然后需要創建文件流,可以使用
open()
讀取yaml
文件 - 接著需要把文件流用
yaml
依賴打開
- 稍復雜的yaml數據
YAML + parametrize,實現參數化
單參數單次循環
- 我們首先需要在
utils
目錄中定義好讀取yaml數據的方法 - 此處的路徑,我們需要動態獲取,可以根據以下的三個方法獲得
os.path.realpath(_ _file_ _)
是可以獲取當前文件的絕對路徑os.path.dirname()
是可以獲取上一級目錄的目錄名os.path.join()
可以將三個字符串憑借起來,中間用/
連接
- 其次我們可以在測試方法中導入這個方法,并在裝飾器
parametrize
中將yaml數據作為參數值傳給自定義的參數 - 注意:參數值需要是可迭代類型
yaml
中heros_name
的數據如下:
多參數多次循環
- 我們需要寫一個符合以下形式的yaml代碼
- 注意,列表內的每一個元素都需要用
-
開頭,且后要空一格 - 這里一個大列表里由兩個子列表,所以每個子列表前都需要加上
-
,且子列表內的每個元素也需要加上-
,如下:
- 而我們的測試用例可以這么寫,用兩個自定義參數來接收返回值: