pytest:共通の前処理/後処理を作成する

@pytest.fixture デコレータで前処理/後処理が書けるので、テストで共通するログイン処理を前処理として作成した例です。

import requests
import pytest


@pytest.fixture
def login_session():
    with requests.Session() as session:
        res = session.post(
            "ログイン先のURL",
            data=(
                {
                    "id": "kuma",
                    "pass": "emon",
                }
            ),
        )
        if res.status_code != 200:
            raise Exception(res.text)
        yield session


def test_resource1(login_session):
    # login_session を使ってテスト
    res = login_session.get("リソースのURL")
    assert res.status_code == 200

with を使用したので後処理の記述が無いですが、以下のパターンで定義すれば良いです。

@pytest.fixture
def setup_teardown():
    # テストごとの事前処理
    # 例えば、データベースの接続を確立するなど

    yield  # 例えば、データベースの接続を返すなど

    # テストごとの事後処理
    # 例えば、データベースの接続を閉じるなど

def test_hoge(setup_teardown):
    # setup_teardown からの値を使ってテスト

コメント