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インスタンスは を自動的に検索します
実行結果:
test_fix1.py
アカウントを入力して、パスワードはまず用例1にログインします:ログインした後にその他の動作111はteardownを実行します!最後にブラウザ用例2を閉じる:ログインする必要はなく、操作222はアカウントを入力し、パスワードはまず用例3にログインする:ログイン後他の動作333はteardownを実行する!最後にブラウザを閉じる
firtureはsetupやteardownに比べて以下の利点があるはずです
conftest.pyプリセットの操作シーンを管理する
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を実行する!最後にブラウザを閉じる