7-conftest.pyとfixture


文書ディレクトリ
  • 一、conftest.py
  • 二、fixture
  • 一、conftest.py
    conftest.pyはfixtureを専用に格納するプロファイルです.ログイン、パラメータの取得など、一般的な前置き操作を中に入れることができます.
    注:1、名前はconftestでなければなりません.py 2、役割ドメイン:現在のパッケージのみに作用する3、プロジェクトに複数のconftestが存在する.pyの場合、外部から内部へ、上から下へ有効4、pytestはデフォルトでconftestを実行する.pyにおけるfixture 5、試験用例を実行する場合、conftest.pyは手動でインポートせずに直接使用できます

    二、fixture
    fixtureは、unittestのsetup/teardownよりも柔軟に、いくつかの特定のインスタンスを実行する前に実行できます.1、fixtureソースの詳細
    fixture(scope=‘function’,params=None,autouse=False,ids=None,name=None)
    ①scope:次の4つのレベルのパラメータがあります.
  • function:デフォルト値、conftestスコープでは、各テストメソッドが実行される前に
  • が実行されます.
  • class:conftest役割ドメインでは、各テストクラスが実行される前に
  • が実行されます.
  • module:conftest役割ドメインでは、各テストモジュールが実行される前に
  • が実行されます.
  • session:conftest役割ドメインでは、各パケットが実行される前に
  • が実行されます.
    scopeパラメータ作用範囲fixtureの作用範囲を制御する:session>module>class>function
    ②params:オプションのパラメータリストです.複数のパラメータがfixture関数を呼び出し、すべてのテストで使用されます.
    ③autouse:デフォルトのFalse、例を使って手動でこのfixtureを呼び出す必要がある;Trueの場合、すべての役割ドメイン内のテスト・インスタンスが自動的に呼び出されます.
    ④ids:paramsテストIDの一部.paramsから自動的に生成されない場合
    ⑤name:デフォルト:装飾器の名前、同じモジュールのfixtureが互いに呼び出して異なるnameを書くことを提案します.
     2、使用方法:
    ①関数名を使用して直接呼び出しますが、戻り値はありません
    #conftest.py  
    import pytest
    @pytest.fixture()
    def login():
        print('  ')
    
    #test.py  
    import pytest
    @pytest.mark.usefixtures('login')
    def test1():
        print("test1    ")
     
    if __name__ == '__main__':
        pytest.main(["-s", "test.py"])
    

    実行結果:
    test.py   
    test1    
    .
    
    def test1(login):
        print(login[1])
        print("
    test1 "
    )

    ②関数に戻り値があり、関数名をパラメータとして入力する必要がある
    #conftest.py  
    import pytest
    @pytest.fixture()
    def login():
        a = 1
        b = 2
        return a,b
    
    #test.py  
    import pytest
    def test1(login):
        print(login[0])  #  login      
        print("test1    ")
     
    if __name__ == '__main__':
        pytest.main(["-s", "test.py"])
    

    実行結果:
    test.py 1
    test1    
    .
    

    ③複数のfixture間で相互に呼び出す場合は、②と同様に関数名を入力するだけでよい
    #conftest.py  
    @pytest.fixture(scope='class')
    def a_init():       
        a = 1
        return a
    
    @pytest.fixture(scope='class')
    def n_init(a_init):    
        b = a_init+1
        return b