前面介紹的fixture都是通過函數的方式進行傳參的,如果遇到一個class中都需要傳入一個fixture,那一個個寫進函數中,太麻煩,今天安靜介紹一種方法,通過class直接傳入fixture
usefixtures
usefixtures是fixture用來標記class中的一個方法。用法結果相當於和setup和teardown的結果一樣。每個用例函數都會進行執行fixture中的前置內容和后置內容
#coding:utf-8 import pytest @pytest.fixture() def login(): print('輸入用戶名,密碼。完成登錄') yield print('退出') @pytest.mark.usefixtures('login') class Test_01: def test_01(self): print('---用例01---') def test_02(self): print('---用例02---') def test_03(self): print('---用例03---') if __name__ == '__main__': pytest.main(['-vs', 'test__01.py'])

通過執行結果可以發現,通過使用usefixture方法后,class下的每個用例都會執行前置和后置內容。
多個usefixture使用
如果我們需要對一個class中傳入多個fixture,我們就可以直接疊加2個usefixture方法,有2種寫法:
第一種:
直接在usefixture中進行加入另外的fixture方法名稱
#coding:utf-8 import pytest @pytest.fixture() def fun(): print('這是fun的fixture方法') @pytest.fixture() def login(): print('輸入用戶名,密碼。完成登錄') yield print('退出') @pytest.mark.usefixtures('login','fun') class Test_01: def test_01(self): print('---用例01---') def test_02(self): print('---用例02---') def test_03(self): print('---用例03---') if __name__ == '__main__': pytest.main(['-vs', 'test__01.py'])

這種方法的執行順序,那個fixture名稱在前面,就先執行那個方法
第2種:
通過疊加的形式進行傳參,再次創建一個usefixture方法
#coding:utf-8 import pytest @pytest.fixture() def fun(): print('這是fun的fixture方法') @pytest.fixture() def login(): print('輸入用戶名,密碼。完成登錄') yield print('退出') @pytest.mark.usefixtures('login') @pytest.mark.usefixtures('fun') class Test_01: def test_01(self): print('---用例01---') def test_02(self): print('---用例02---') def test_03(self): print('---用例03---') if __name__ == '__main__': pytest.main(['-vs', 'test__01.py'])

這種方法的執行順序,那個usefixture方法在下面,先執行那個。
混合使用
我們還有一種使用方法就是函數的fixture和類的usefixture同時使用
#coding:utf-8 import pytest @pytest.fixture() def fun(): print('這是fun的fixture方法') @pytest.fixture() def login(): print('輸入用戶名,密碼。完成登錄') yield print('退出') @pytest.mark.usefixtures('login') class Test_01: def test_01(self,fun): print('---用例01---') def test_02(self): print('---用例02---') def test_03(self,fun): print('---用例03---') if __name__ == '__main__': pytest.main(['-vs', 'test__01.py'])

通過上面執行結果可以看出來,usefixture和fixture可以同時使用,執行的順序肯定是先usefixture然后在fixture。
