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

はじめに

この記事では、「Pythonでpytestの-xオプションについての概要」について書いています。

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

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

要点: pytest -xは何が出来るの?

  • テストが失敗したら、テストを続けずその場で終了する
  • 失敗した時点で終了する(全てのテストを行わない)のでテスト時間が短縮できる可能性がある

前提(環境)

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

また、実験で使うフォルダ(ファイル)は以下の通りです。

sample
├ test_add.py
└ test_sub.py

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

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

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

test_add1()は、テストに失敗するようにしている点にご注意ください

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

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

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

試してみる

ではコマンドを実行してどのような結果が出力されるか確認してみましょう

まずはpytestとオプションをつけずに実行した場合の出力を確認します。

================================================= test session starts =================================================
platform win32 -- Python 3.9.4, pytest-7.1.3, pluggy-1.0.0
rootdir: C:\Users\xxx\sample
plugins: anyio-3.6.1
collected 4 items

test_add.py F.                                                                                                   [ 50%]
test_sub.py ..                                                                                                   [100%]

====================================================== FAILURES =======================================================
______________________________________________________ test_add1 ______________________________________________________

    def test_add1():
>           assert 2 == 1 + 2
E           assert 2 == (1 + 2)

test_add.py:2: AssertionError
=============================================== short test summary info ===============================================
FAILED test_add.py::test_add1 - assert 2 == (1 + 2)
============================================= 1 failed, 3 passed in 0.21s =============================================

計4つあるテストで1つが失敗し3つが成功したと書かれています。

では次に、今回のタイトルにもなっている-xオプションを使い、pytest -xと実行してみましょう

================================================= test session starts =================================================
platform win32 -- Python 3.9.4, pytest-7.1.3, pluggy-1.0.0
rootdir: C:\Users\xxx\sample
plugins: anyio-3.6.1
collected 4 items

test_add.py F

====================================================== FAILURES =======================================================
______________________________________________________ test_add1 ______________________________________________________

    def test_add1():
>           assert 2 == 1 + 2
E           assert 2 == (1 + 2)

test_add.py:2: AssertionError
=============================================== short test summary info ===============================================
FAILED test_add.py::test_add1 - assert 2 == (1 + 2)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
================================================== 1 failed in 0.19s ==================================================

下から2行目に、stopping after 1 failuresと、失敗して停止したことが書かれています。

-xオプションは、テストが失敗したらそこで終了します。

今回はテストの総数が4つと少なく、またそれぞれの内容も簡単でしたが、テストの数が多かったり複雑なものが増えてきた場合ですと、失敗時のテスト時間の短縮になります。

おわりに

Pythonでpytestの-xオプションについての概要」について解説しました。

「テストが多すぎて時間かかるから、1つでも失敗してたらその時点で終了して欲しい」時に役に立ちそうです。

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

https://ya6mablog.com/how-to-use-pytest-option/