Pytest学習ノート3:fixture構成用例プリセット条件


setupとteardownは、テスト・インスタンスの前または後にいくつかの操作を加えることができますが、これはスクリプト全体がグローバルに有効になります.もし私が以下のシーンを実現したい場合は、インスタンス1は先にログインする必要があります.インスタンス2はログインする必要がありません.インスタンス3は先にログインする必要があります.これはsetupとteardownでは実現できないことは明らかです.これが本編学習の目的であり,テスト用例のプリセット条件をカスタマイズする.
firtureはsetupやteardownに比べて以下の利点があるはずです
  • ネーミング方式は柔軟で、setupとteardownのいくつかのネーミング
  • に限らない.
  • conftest.py構成ではデータ共有が可能で、importを必要とせずに自動的にいくつかの構成
  • を見つけることができます.
  • scope="module"は複数実現可能である.pyファイル間共有フロント
  • scope="session"を複数実現する.pyファイル間で1つのセッションを使用して複数のインスタンス
  • を完了
    conftest.pyプリセットの操作シーンを管理する
  • conftest.py構成スクリプト名は固定されており、名前を変更することはできません
  • conftest.pyと実行例は同じpakageの下にあり、initがある.pyファイル
  • import導入conftestは不要である.py,pytestインスタンスは
  • を自動的に検索します
    conftest.py
    import pytest
    
    #fixture   teardown yield   teardown   
    @pytest.fixture()
    def login():
        print("    ,     ")
    
        yield
        print("  teardown!")
        print("       ")
    
    test_fix1.py
    import pytest
    
    
    def test_s1(login):
        print("  1:        111")
    
    
    def test_s2():  #   login
        print("  2:     ,  222")
    
    
    def test_s3(login):
        print("  3:        333")
    
    
    if __name__ == "__main__":
        pytest.main(["-s", "test_fix1.py"])

    実行結果:
    test_fix1.py
    アカウントを入力して、パスワードはまず用例1にログインします:ログインした後にその他の動作111はteardownを実行します!最後にブラウザ用例2を閉じる:ログインする必要はなく、操作222はアカウントを入力し、パスワードはまず用例3にログインする:ログイン後他の動作333はteardownを実行する!最後にブラウザを閉じる