コンテンツにスキップ

[Pytest] Fixture

Pytestのfixtureについて

以下の記事を参考にしている。

fixtureのサンプル

conftest.pyを同階層に配置する。
他にも色々方法はあるが、一番よく使うのがこれ。

以下はJumeauxサーバを立ち上げる例。

@pytest.fixture(scope="module")
def boot_server():
    print("fixture: boot_server start")
    p = subprocess.Popen(["python", "jumeaux/main.py", "server"])
    yield

    pid = p.pid
    print(f"boot_server returned: {pid}")
    p.kill()
    print(f"boot_server killed: {pid}")

yiledの前後で意味合いが変わる。

  • yieldの前 scopeに入る前の処理
  • yieldの後 scopeを出た後の処理

yieldに値を指定すると、テストケースで返却値を受け取り処理できる。

Scope

@pytest.fixture(scope="module")のようにデコレータで定義する。
デフォルトはfunction

scope 実行ルール
function テスト関数ごとに実行される
class クラスごとに実行される
module モジュール(ファイル)ごとに実行される
session 1度だけ実行される

boot_serverの場合は各テストファイルごとに実行される。