軟件測試 | YAML是什么?
數(shù)據(jù)驅(qū)動
在實際的測試工作中,通常需要對大量的測試數(shù)據(jù)進行驗證,以保證軟件的正確性。這種數(shù)據(jù)量大的測 試,在功能測試中非常耗費人力物力,但是在自動化測試中,卻非常容易實現(xiàn)。只要編寫好測試的操作 步驟,然后將多組不同的測試數(shù)據(jù)傳入到相同的測試用例中,就能輕松實現(xiàn)對不同測試數(shù)據(jù)的驗證。 前面學(xué)習(xí)了參數(shù)化用例,當數(shù)據(jù)量非常大的時候,我們不能把所有的用例都放在測試模塊中。可以將數(shù) 據(jù)存放到一個外部文件中,使用的時候?qū)⑼獠课募臄?shù)據(jù)讀取出來,也方便測試數(shù)據(jù)的管理。數(shù)據(jù)與測 試用例分別管理,可以利用外部數(shù)據(jù)源 YAML、Json、Excel、CSV 等工具管理測試數(shù)據(jù)。這里推薦使 用 YAML 工具。
YAML 介紹
YAML 是在開發(fā)中的一種標記語言,適合用來表達或編輯數(shù)據(jù)結(jié)構(gòu)、各種配置文件等。YAML 不局限于 語言,可以用于不同語言程序間的數(shù)據(jù)傳遞(類似于 Json)。YAML 具有豐富的語法結(jié)構(gòu)和可擴展性, YAML 的配置文件后綴為 .yml 或 .yaml(例如:data.yaml)。
YAML 的基本語法
大小寫敏感
使用縮進表示層級關(guān)系
縮進不允許使用 tab,只允許空格
縮進的空格數(shù)不重要,只要相同層級的元素左對齊即可
'#'表示注釋
YAML 支持數(shù)據(jù)類型
對象:鍵值對的集合,又稱為映射(mapping)/ 哈希(hashes) / 字典(dictionary)
數(shù)組:一組按次序排列的值,又稱為序列(sequence) / 列表(list)
純量:單個的、不可再分的值
YAML 表示列表
以 - 開頭的行表示構(gòu)成一個數(shù)組:
對應(yīng)的 python 的數(shù)據(jù)結(jié)構(gòu)是:['hogwarts1','hogwarts2','hogwarts3']
也可以列表嵌套列表,例如:
對應(yīng)的 python 的數(shù)據(jù)結(jié)構(gòu)是: [['hogwarts1','hogwarts2','hogwarts3']]
YAML 表示字典
key: value,冒號后面要加空格。
上面表達 python 里的字典: {'id': 1, 'name': 'company1', 'price': '200W'} 相對復(fù)雜的例子:
對應(yīng)的 python 的數(shù)據(jù)結(jié)構(gòu)是: {'hogwarts': [{'id': 1, 'name': '格蘭芬多', 'price': 200}, {'id': 2, 'name': '拉文克勞', 'price': 200}]}
YAML 表示純量
純量是最基本的,不可再分的值,包括:
字符串
布爾值
整數(shù)
浮點數(shù)
Null
時間
日期
pytest 結(jié)合 YAML
PyYAML 模塊在 python 中用于處理 YAML 格式數(shù)據(jù),主要使用 yaml.safe_dump() 和 yaml.safe_load() 函數(shù)將 Python 對象和 YAML 格式數(shù)據(jù)相互轉(zhuǎn)換。
安裝
案例
創(chuàng)建用例文件以及數(shù)據(jù)文件來完成數(shù)據(jù)驅(qū)動的測試案例,創(chuàng)建一個文件夾 testdata,在這個文件夾下創(chuàng) 建 data.yml 和 test_yaml.py 文件。
創(chuàng)建 data.yml 文件:
創(chuàng)建“test_yaml.py”,代碼如下:
代碼分析:
yaml 文件里定義了列表數(shù)據(jù),通過 open( ) 方法獲取 data.yml 文件對象,使用 yaml.safe_load() 加載這個文件對象,將 yaml 格式文件轉(zhuǎn)換為 Python 對象,分別傳遞到用例中生成多條用例執(zhí)行。
運行結(jié)果:
運行結(jié)果中 [1-2] 和 [20-30] 表示傳入的兩組參數(shù),分別傳入 test_foo( ) 用例方法中執(zhí)行,并且 分別生成兩條測試結(jié)果。pytest 結(jié)合 yaml 實現(xiàn)數(shù)據(jù)驅(qū)動,yaml 文件作為用例數(shù)據(jù)源,驅(qū)動測試用例的 執(zhí)行,使測試用例數(shù)據(jù)維護更加方便快捷。