在實(shí)際的測(cè)試工作中抖单,通常需要對(duì)多組不同的輸入數(shù)據(jù)萎攒,進(jìn)行同樣的測(cè)試操作步驟,以驗(yàn)證我們的軟件質(zhì)量矛绘。這種測(cè)試耍休,在功能測(cè)試中非常耗費(fèi)人力物力,但是在自動(dòng)化中货矮,卻比較好實(shí)現(xiàn)羊精,只要實(shí)現(xiàn)了測(cè)試操作步驟,然后將多組測(cè)試數(shù)據(jù)以數(shù)據(jù)驅(qū)動(dòng)的形式注入囚玫,就可以實(shí)現(xiàn)了喧锦。
前面文章學(xué)習(xí)了參數(shù)化,當(dāng)數(shù)據(jù)量非常大的時(shí)候抓督,我們可以將數(shù)據(jù)存放到外部文件中燃少,使用的時(shí)候?qū)⑽募械臄?shù)據(jù)讀取出來(lái),方便測(cè)試數(shù)據(jù)的管理铃在。數(shù)據(jù)與測(cè)試用例分別管理阵具,可以利用外部數(shù)據(jù)源 YAML、JSON涌穆、Excel怔昨、CSV 管理測(cè)試數(shù)據(jù)。
pytest 結(jié)合 YAML
YAML 是一種容易閱讀宿稀、適合表示程序語(yǔ)言的數(shù)據(jù)結(jié)構(gòu)趁舀、可用于不同程序間交換數(shù)據(jù)、豐富的表達(dá)能力和可擴(kuò)展性祝沸、易于使用的語(yǔ)言矮烹。通過(guò)縮進(jìn)或符號(hào)來(lái)表示數(shù)據(jù)類型越庇。
pyyaml 模塊在 Python 中用于處理 YAML 格式數(shù)據(jù),主要使用 yaml.safe_dump()
和 yaml.safe_load()
函數(shù)將 Python 值和 YAML 格式數(shù)據(jù)相互轉(zhuǎn)換奉狈。工作中常常使用 YAML 格式的文件存儲(chǔ)測(cè)試數(shù)據(jù)卤唉。
安裝
pip install PyYAML
案例
創(chuàng)建用例文件以及數(shù)據(jù)文件來(lái)完成數(shù)據(jù)驅(qū)動(dòng)的測(cè)試案例,創(chuàng)建一個(gè)文件夾 testdata仁期,在這個(gè)文件夾下創(chuàng)建 data.yml
和 test_yaml.py
文件桑驱。
創(chuàng)建 data.yml
文件:
- - 1 - 2- - 20 - 30
創(chuàng)建“test_yaml.py”,代碼如下:
import pytestimport yaml@pytest.mark.parametrize("a,b", yaml.safe_load(open("datas.yml",\encoding='utf-8')))def test_foo(a,b): print(f"a + b = {a + b}")
代碼分析:
yaml 文件里定義了列表數(shù)據(jù)跛蛋,通過(guò) open()
方法獲取 data.yml 文件對(duì)象熬的,使用 yaml.safe_load()
加載這個(gè)文件對(duì)象,將 YAML 格式文件轉(zhuǎn)換為 Python 值赊级,分別傳到到用例中生成多條用例分別執(zhí)行押框。
運(yùn)行結(jié)果:
省略...test_params.py::test_foo[1-2] test_params.py::test_foo[20-30] 省略...
運(yùn)行結(jié)果中 [1-2]
和 [20-30]
代碼傳入的兩組參數(shù),分別傳入 test_foo()
用例方法中執(zhí)行理逊,并且分別生成兩條測(cè)試結(jié)果橡伞。
以上,pytest 組合 YAML 實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)晋被,YAML 文件作為用例數(shù)據(jù)源兑徘,控制測(cè)試用例的執(zhí)行,使測(cè)試用例數(shù)據(jù)維護(hù)更加方便快捷墨微。
【相關(guān)閱讀】
Python 測(cè)試開(kāi)發(fā)實(shí)戰(zhàn)進(jìn)階道媚,挑戰(zhàn)阿里P6+,年薪50W+翘县!
干貨 | 一文搞定 Linux 常用高頻命令
你好呀最域,喜歡這篇文章的話煩請(qǐng)點(diǎn)個(gè)“贊”哦!萬(wàn)分感謝~(▽) PS:有問(wèn)題可以聯(lián)系我們哦~v ceshiren001