pytest進階之conftest.py
前言
前面幾篇隨筆基本上已經瞭解了pytest 命令使用,收集用例,finxture使用及作用範圍,今天簡單介紹一下conftest.py檔案的作用和實際專案中如是使用此檔案!
例項場景
首先們思考這樣一個問題:如果我們在編寫測試用的時候,每一個測試檔案裡面的用例都需要先登入後才能完成後面的操作,那麼們該如何實現呢?這就需要我們掌握conftest.py檔案的使用了。
例項程式碼
建立如下一個目錄
ConftestFile |conftest.py |test_file_01.py |test_file_02.py |__init__.py
# conftest.py import pytest @pytest.fixture() def login(): print('\n---------------conftest檔案login方法開始執行----------------------------') print('login in conftest.py') print('----------------conftest.py檔案login方法執行結束---------------------------')
# test_file_01.py def test_01(login): print('\n------------------用例檔案1測試用例1開始執行------------------') print('login after : in test_file_01->case test_01') print('-------------------用例檔案1測試用例1執行結束------------------------')
# test_file_02.py def test_02(login): print('\n------------------用例檔案2測試用例2開始執行------------------') print('login after : in test_file_01->case test_01') print('-------------------用例檔案2測試用例2執行結束------------------------')
我們先來執行一下這個例項程式碼看看輸出結果
1.在pycharm可以右鍵目錄執行
2.可以在cmd目錄中輸入 pytest -vs 來執行
test_file_01.py ---------------conftest檔案login方法開始執行---------------------------- login in conftest.py ----------------conftest.py檔案login方法執行結束--------------------------- . ------------------用例檔案1測試用例1開始執行------------------ login after : in test_file_01->case test_01 -------------------用例檔案1測試用例1執行結束------------------------ [ 50%] test_file_02.py ---------------conftest檔案login方法開始執行---------------------------- login in conftest.py ----------------conftest.py檔案login方法執行結束--------------------------- . ------------------用例檔案2測試用例2開始執行------------------ login after : in test_file_01->case test_01 -------------------用例檔案2測試用例2執行結束------------------------ [100%] ========================== 2 passed in 0.04 seconds ===========================
可以看到每個測試檔案的測試用例執行前都執行了conftest.py檔案中的login方法,通過這種模式我們就可以實現測試用例前置條件的準備工作了!
conftest檔案實際應用中需要結合fixture來使用,那麼fixture中引數scope也適用conftest中fixture的特性,這裡再說明一下
1.conftest中fixture的scope引數為session,那麼所有的測試檔案執行前執行一次
2.conftest中fixture的scope引數為module,那麼每一個測試檔案執行前都會執行一次conftest檔案中的fixture
3.conftest中fixture的scope引數為class,那麼每一個測試檔案中的測試類執行前都會執行一次conftest檔案中的fixture
4.conftest中fixture的scope引數為function,那麼所有檔案的測試用例執行前都會執行一次conftest檔案中的fixture
總結
理論往往都需要實踐的驗證,所以要想掌握conftest具體的使用,還需要多加使用程式碼驗證!我上面的程式碼只是驗證了測試檔案中測試函式使用conftest.py,實際工作中不僅僅只有函式使用,也往往不僅存在一個conftest.py檔案。下面是我總結的特性,希望對大家有幫助吧!
1.conftest.py檔名字是固定的,不可以做任何修改
2.檔案和用例檔案在同一個目錄下,那麼conftest.py作用於整個目錄
3.conftest.py檔案所在目錄必須存在__init__.py檔案
4.conftest.py檔案不能被其他檔案匯入
5.所有同目錄測試檔案執行前都會執行conftest.py檔案