python pytest進級のxunit fixture詳細解


前言
今日はpytestフレームワークとunittestフレームワークは同じfixtureを使っています。unittestを知っている人は、初期化環境と廃棄作業において、unittestがsetUp、tearDown方法を使っていることを知っています。pytestフレームの中にも同様の方法があります。今日は具体的に説明します。
まずはオフィシャル文書の説明を添付します。
1.各クラスのsetup/teardownは何度も多重化できます。
2.対応する初期化関数が失敗またはスキップされた場合、teardownメソッドは実行されません。
3.pytest 4.2の前にxunit fixtureはfixtureの作用規則に従わないので、一つのsessionレベルでパラメータaut=Trueのfixtureの前にsetup_を実行することができます。methodの方法
ただし、これまでのところ、すべてのxunit fixtureはfixtureの実行規則に従っています。
functionレベル
実例

 def setup_function(function):
 print('
--------------------') print(' ') print('
--------------------') def teardown_function(function): print('
--------------------') print(' ') print('
--------------------') def test_function_1(): print('
1') def test_function_2(): print('
2') if __name__ == '__main__': import pytest pytest.main(['-sq', 'functionLevel.py'])
出力結果

functionLevel.py 
--------------------
          
--------------------
    1
--------------------
          
--------------------
--------------------
          
--------------------
    2
--------------------
          
--------------------
[100%]
========================== 2 passed in 0.03 seconds ===========================
説明
出力結果によってまとめられます。セットアップ_Functionは、各テスト関数の前に初期化動作を実行します。teardownFunctionは各テスト関数の実行後に廃棄作業を実行します。
methodレベル
実例

 class TestMethod(object):
 def setup_method(self, method):
 print('
--------------------') print(' ') print('
--------------------') def teardown_method(self, method): print('
--------------------') print(' ') print('
--------------------') def test_method_1(self): print('
1') def test_method_2(self): print('
2') if __name__ == '__main__': import pytest pytest.main(['-sq', 'methodLevel.py'])
出力結果

methodLevel.py 
--------------------
          
--------------------
    1
--------------------
          
--------------------
--------------------
          
--------------------
    2
--------------------
          
--------------------
[100%]
========================== 2 passed in 0.03 seconds ===========================
説明
出力結果によってまとめられます。セットアップ_methodは、各テスト方法の前に初期化動作を実行します。teardownmethodは各テスト方法の実行後に廃棄作業を実行します。そして、方法レベルのfixtureはテストクラスの方法に作用します。
クラスレベル
実例

 class TestClass(object): 
 @classmethod
 def setup_class(cls):
 print('
setup_class() for {}'.format(cls.__name__)) @classmethod def teardown_class(cls): print('
teardown_class() for {}'.format(cls.__name__)) def test_1(self): print('self.test_1()') def test_2(self): print('self.test_2()') if __name__ == '__main__': import pytest pytest.main(['-sq', 'classLevel.py'])
出力結果

classLevel.py 
setup_class() for TestClass
.self.test_1()
.self.test_2()
teardown_class() for TestClass
[100%]
========================== 2 passed in 0.06 seconds ===========================
説明
出力結果によってまとめられます。セットアップ_クラスはテストクラスの実行前に一回の初期化操作を実行します。teardownクラスはテストクラスの実行後に廃棄作業を一回実行します。そして、クラスレベルのfixtureは@classmethodを使って装飾する必要があります。
moduleレベル
実例

def setup_module(module):
 print('
setup_module() for {}'.format(module.__name__)) def teardown_module(module): print('
teardown_module() for {}'.format(module.__name__)) def test_1(): print('test_1()') def test_2(): print('test_2()') class TestClass(object): def test_3(self): print('self.test_3()') def test_4(self): print('self.test_4()') if __name__ == '__main__': import pytest pytest.main(['-sq', 'moduleLevel.py'])
出力結果

moduleLevel.py 
setup_module() for moduleLevel
.test_1()
.test_2()
.self.test_3()
.self.test_4()
teardown_module() for moduleLevel
[100%]
========================== 4 passed in 0.04 seconds ===========================
説明
出力結果によってまとめられます。セットアップ_moduleはテストファイル全体、つまりモジュール内のテストクラスまたはテスト関数で、テスト方法の実行前に初期化操作を実行します。teardownmoduleはテストファイル全体、つまりモジュール中のテストクラスまたはテスト関数を実行します。
以上がxunit fixtureの4つのレベルですが、実際の仕事ではどのように使うべきかについて練習してみて、理解を深めてこそ、うまくいくと思います。
公式文書を添付します。英語ですが、詳しいです。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。