Python 有多個測試框架如unittest doctest pytest nose
選擇pytest是因為它容易上手,且能夠支持簡單的單元測試和復雜的功能測試,有很多的第三方插件可以自定義擴展,支持allure
安裝pytest
進入命令行pip install pytest
或者通過pycharm的插件安裝
Pytest測試樣例的命名規則
- 測試文件以test_開頭或結尾(否則用py.test命令行不能自動識別)
- 測試類以Test開頭,且不能帶有init方法
- 測試函數以test_開頭
- 斷言使用assert
- fixture的文件名必須是conftest.py
舉例說明上述規則
新建一個pytest-sample項目
項目結構如下圖所示
打開gitbash到該項目目錄下
運行 py.test
可以看到只有test_sample.py 的文件兩個測試用例運行了,sample.py卻沒有運行
如果我們指定運行的是sample.py,才會執行此測試用例
Fixture是pytest特有的功能,用pytest.fixture標識,定義在函數前面,在編寫測試函數的時候,可以將此函數名稱作為傳入參數,pytest將會以依賴注入的方式,將函數的返回值當作參數傳遞給測試函數
這個函數指定了fixture的初始化規則
@pytest.fixture(scope=”session”)
表示全局初始化一次,用于全局系統的初始化
@pytest.fixture(scope=”module”)
表示一個模塊只初始化一次,如果一個模塊使用多次該fixture,將會使用同個對象
@pytest.fixture(scope=”function”)
表示每個function都初始化一次
上面的截圖表示只全局化初始一次count,則在test_sample.py中兩個測試用例中的兩個count 只會被初始一次
可以使用py.test –fixture test_module.py
查看綁定的fixture
Fixture的自動執行autouse
需要某些fixture在全局自動執行,如某些全局變量的初始化操作,或者全局化的清理或者初始化函數
@pytest.fixture(session=”session”,autouse=true)
Pytest 的 fixture的存在使得我們在編寫測試函數的準備函數、銷毀函數或者多個條件的測試提供了更加靈活的選擇。