[Pytest] Fixture¶
Pytestのfixtureについて
以下の記事を参考にしている。
pytest:フィクスチャ(fixture)の使い方 - Qiita
はじめに
pytestはPython用のテストツールです。
標準のunittestに比べ、テストエラー時の結果が分かりやすいのが特徴です。
例として、辞書オブジェクトを比較する以下のテストコードをunittestとpytes...
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の場合は各テストファイルごとに実行される。