Python 有多個(gè)測試框架如unittest doctest pytest nose
選擇pytest是因?yàn)樗菀咨鲜职蠢澹夷軌蛑С趾唵蔚膯卧獪y試和復(fù)雜的功能測試,有很多的第三方插件可以自定義擴(kuò)展,支持allure
安裝pytest
進(jìn)入命令行pip install pytest
或者通過pycharm的插件安裝
Pytest測試樣例的命名規(guī)則
- 測試文件以test_開頭或結(jié)尾(否則用py.test命令行不能自動(dòng)識(shí)別)
- 測試類以Test開頭春感,且不能帶有init方法
- 測試函數(shù)以test_開頭
- 斷言使用assert
- fixture的文件名必須是conftest.py
舉例說明上述規(guī)則
新建一個(gè)pytest-sample項(xiàng)目
項(xiàng)目結(jié)構(gòu)如下圖所示
打開gitbash到該項(xiàng)目目錄下
運(yùn)行 py.test
可以看到只有test_sample.py 的文件兩個(gè)測試用例運(yùn)行了严望,sample.py卻沒有運(yùn)行
如果我們指定運(yùn)行的是sample.py村象,才會(huì)執(zhí)行此測試用例
Fixture是pytest特有的功能,用pytest.fixture標(biāo)識(shí)鹅很,定義在函數(shù)前面嘶居,在編寫測試函數(shù)的時(shí)候,可以將此函數(shù)名稱作為傳入?yún)?shù)促煮,pytest將會(huì)以依賴注入的方式邮屁,將函數(shù)的返回值當(dāng)作參數(shù)傳遞給測試函數(shù)
這個(gè)函數(shù)指定了fixture的初始化規(guī)則
@pytest.fixture(scope=”session”)
表示全局初始化一次,用于全局系統(tǒng)的初始化
@pytest.fixture(scope=”module”)
表示一個(gè)模塊只初始化一次菠齿,如果一個(gè)模塊使用多次該fixture佑吝,將會(huì)使用同個(gè)對(duì)象
@pytest.fixture(scope=”function”)
表示每個(gè)function都初始化一次
上面的截圖表示只全局化初始一次count,則在test_sample.py中兩個(gè)測試用例中的兩個(gè)count 只會(huì)被初始一次
可以使用py.test –fixture test_module.py
查看綁定的fixture
Fixture的自動(dòng)執(zhí)行autouse
需要某些fixture在全局自動(dòng)執(zhí)行绳匀,如某些全局變量的初始化操作芋忿,或者全局化的清理或者初始化函數(shù)
@pytest.fixture(session=”session”,autouse=true)
Pytest 的 fixture的存在使得我們?cè)诰帉憸y試函數(shù)的準(zhǔn)備函數(shù)、銷毀函數(shù)或者多個(gè)條件的測試提供了更加靈活的選擇疾棵。