Pytest中conftest.py共享fixture(五)

  • 2019 年 10 月 7 日
  • 筆記

有一點首先需要確認的的是,pytest中的fixture是pytest用於將測試前後進行預備,清理工作的程式碼分離出核心測試邏輯的一種機制。但是我們更加希望的是在一個測試套件中,能夠共享fixture的機制,這樣所一個測試套件裡面的所有測試點都能夠共同使用,和我在早期介紹的分離測試韌體的思想有點雷同。在pytest中通過conftest.py來共享fixture,如果希望多個測試文件共同使用一個fixture時候,可以在該目錄下創建conftest.py文件,但是切記該文件絕對不能倒入使用,這點一定要注意,創建conftest.py文件後,把需要的fixture加入到裡面,就可以使用了。先來一個簡單的案例,在一個包中,有三個測試模組,每個測試點都顯示開始前執行和結束後執行,也就是說,每個測試點執行的時候,先列印測試開始,然後執行測試點,然後最後列印測試結束,見案例程式碼:

見conftest.py的源碼:

#!/usr/bin/python3  #coding:utf-8  import pytest    @pytest.fixture(autouse=True)  def wuya():      print('開始測試')      yield      print('結束測試')

執行模組test_001.py 或者 test_002.py的測試程式碼,見執行後的結果資訊:

cachedir: .pytest_cache  rootdir: /Applications/code/stack/study/xunit/conftest01, inifile:  plugins: allure-adaptor-1.7.10  collected 2 items    test_001.py::test_login_001          SETUP    F wuya          test_001.py::test_login_001 (fixtures used: wuya)PASSED          TEARDOWN F wuya  test_002.py::test_logout_001          SETUP    F wuya          test_002.py::test_logout_001 (fixtures used: wuya)PASSED          TEARDOWN F wuya

回溯過程使用到的命令為:pytest –setup-show,如上結果資訊就是回溯的過程。

fixture也可以傳遞測試數據,那麼也可以寫到conftest.py的文件中,還是看一個案例,見conftest.py的最新源碼:

#!/usr/bin/python3  #coding:utf-8  import pytest    @pytest.fixture(autouse=True)  def wuya():      print('開始測試')      yield      print('結束測試')    @pytest.fixture()  def login():      return 'adfghjk34567dsfg'

測試程式碼見如下:

#!/usr/bin/python3  #coding:utf-8  import pytest      def test_login(login):      if login=='adfghjk34567dsfg':          assert True      else:          assert  False

執行如上的測試程式碼,見執行後的結果資訊:

platform darwin -- Python 3.7.4, pytest-4.0.2, py-1.8.0, pluggy-0.12.0  rootdir: /Applications/code/stack/study/xunit/conftest01, inifile:  plugins: allure-adaptor-1.7.10  collected 3 items / 2 deselected    test_login.py          SETUP    F wuya          SETUP    F login          test_login.py::test_login (fixtures used: login, wuya).          TEARDOWN F login          TEARDOWN F wuya

依據如上的測試程式碼,可以看出在一個conftest.py中,可以編寫多個共享fixture的程式碼。關於cionftest.py共享fixture的幾個注意事項,再次總結下,具體如下:

1、conftest.py文件絕對不能當平常的模組來倒入,是絕對不能

2、conftest.py很多時候是被當作pytest一個本地插件庫

3、可以 把一個目錄下的conftest.py看成是一個供該目錄下所有測試用例使用的fixture倉庫