Open5

Pytest周りのあれこれ

ピン留めされたアイテム

このスクラップについて

プライベートでDjangoアプリを作っていますが、そこで得たPytest周りのノウハウをまとめるものです。

assertが失敗したときに詳細が出ない

pytestはASTの書き換えを行ってassertが失敗したときに詳細が出るようにしていますが、インポート先は書き換えません。register_assert_rewriteを使って、モジュールを登録してください。

https://docs.pytest.org/en/stable/writing_plugins.html

@pytest.mark.django_db(transaction=True) を付けているが、 Database access not allowed と出る

おそらく、parametrizeの引数に、DBをアクセスするものがあるためです。

@pytest.mark.parametrize(
    "instance, expected",
    (PurchaseFactory(name="暴君ハバネロ"), "〜〜〜"),
)
def test_it(self, instance, expected):
    ...

ではなく、以下のようにするといいです。

@pytest.mark.paramtrize(
    "params, expected",
    (dict(name="暴君ハバネロ"), "〜〜〜"),
)
def test_it(self, params, expected):
    instance = PurchaseFactory(**params)
    ...

skipとxfailの違い

  • skipは「Windowsでは動かないテスト」のように、テストする意味がないもの
  • xfailは「バグなどで落ちることが分かっていること」のように、テストする意味があるもの
ログインするとコメントできます