Pythonのpytestで--lfオプションを試してみる

はじめに

この記事では、「Pythonのpytestで-lfオプションの説明と実践した時のこと」について書いています。

私はこれまでpytestを使ったことはほぼなく、pytestの勉強をしていますが、pytestには色々なオプションがあるので、その中の--lfオプションについて、どういう機能なのか、実際に使ってみてどうなのかをまとめて記事を書きました。

自分に向けた備忘録の意味もありますが、「pytest使いたいけどよく知らない」な人の一助になれば嬉しいです。

pytest --lfは何が出来るのか

  • 前回のテストで失敗したテストのみ再び実行するオプションです
  • 何度もテスト行う際に便利です

前提(環境)

以下の環境で実験をしていきます。

sample
├ test_add.py
└ test_sub.py

test_add.pyの中身は以下のようになっています。

def test_add1():
        assert 3 == 1 + 2

def test_add2():
        assert 3 == 1 + 3

test_add2()は、テストに失敗するようにしています。

また、test_sub.pyの中身は以下のようになっています。

def test_sub1():
        assert 1 == 2 - 1

def test_sub2():
        assert 2 == 3 - 1

実際に試してみる

実際に試す前に、まずpytestでテスト結果を確認してみましょう。

...(省略)...
================================== short test summary info ===================================
FAILED test_add.py::test_add2 - assert 3 == (1 + 3)
================================ 1 failed, 3 passed in 0.19s =================================

test_add.pytest_add2関数で失敗していると出力されました。

ではtest_add2関数を修正し、テストに通るようにします。

def test_add2():
        assert 4 == 1 + 3

そしたら、次はpytest --lfを実行してみましょう

==================================== test session starts =====================================
platform win32 -- Python 3.9.4, pytest-7.1.3, pluggy-1.0.0
rootdir: C:\Users\xxxx\sample
plugins: anyio-3.6.1
collected 1 item
run-last-failure: rerun previous 1 failure (skipped 1 file)

test_add.py .                                                                           [100%]

===================================== 1 passed in 0.04s ======================================

直前に行ったpytestで失敗したtest_add2のみをテストしていることが出力から分かります。

おわりに

「pytestの-lfオプションの説明と実践した時のこと」について解説しました。

この方法を知っておくと、「時間短縮のために前回テストに失敗した箇所だけを再テストしたい」時などに役に立つかと思います。

さいごに、記事を書く上で参考にしたサイトのリンクを以下に掲載します。合わせて読んでいただくと良いかと思います。

www.python.ambitious-engineer.com