0Pricing
Python Academy · レッスン

初めての pytest テストを作成する

テストの検出、assert 文、テスト構成を理解します。

「初めての pytest テストを作成する」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。

pytestのインストール

pipでpytestをインストールします。必須の設定はなく、テストは自動的に検出されます。

# pip install pytest

# Run all tests
# pytest

# Run a specific file
# pytest test_math.py

シンプルなテスト関数

pytestはtest_で始まる関数を収集します。通常のassert文を使用してください。pytestが詳細な出力が得られるように書き換えます。

# test_math.py
def add(a, b):
    return a + b

def test_add():
    assert add(2, 3) == 5

def test_add_negative():
    assert add(-1, 1) == 0

テストファイルと検出

pytestは、test_*.pyまたは*_test.pyという名前のテストファイルを検出し、test_*という名前の関数やTest*という名前のクラスを収集します。

tests/
    test_utils.py
    test_models.py
    conftest.py   # shared fixtures

クラスでテストをグループ化する

関連するテストを、Testで始まるクラスにまとめます。unittest.TestCaseは必要ありません。

class TestCalculator:
    def test_add(self):
        assert 1 + 1 == 2

    def test_multiply(self):
        assert 3 * 4 == 12

例外をテストする

pytest.raisesをコンテキストマネージャーとして使用し、特定の例外が発生することを検証します。

import pytest

def divide(a, b):
    if b == 0:
        raise ZeroDivisionError("cannot divide by zero")
    return a / b

def test_divide_by_zero():
    with pytest.raises(ZeroDivisionError, match="cannot divide"):
        divide(10, 0)

-vフラグ

-v(verbose)を付けてpytestを実行すると、各テスト名と成功または失敗の状態を確認できます。

# pytest -v
# test_math.py::test_add PASSED
# test_math.py::test_add_negative PASSED

# Show print output too:
# pytest -v -s

テストをスキップする

@pytest.mark.skipまたは@pytest.mark.skipifを使用すると、条件付きでテストをスキップできます。

import pytest, sys

@pytest.mark.skip(reason="not implemented yet")
def test_future_feature():
    assert False

@pytest.mark.skipif(sys.platform == "win32", reason="Unix only")
def test_unix_only():
    assert True

失敗が予想されるテストをマークする

@pytest.mark.xfailは、失敗を予想するテストをマークします。失敗すれば成功扱いになり、予想に反して成功すると警告されます。

import pytest

@pytest.mark.xfail(reason="known bug #42")
def test_buggy():
    assert 1 == 2  # will fail, but that's expected

assertの書き換え

pytestはassert文を書き換え、失敗の原因となった値を表示します。単なるAssertionErrorよりもはるかに役立ちます。

def test_list_equal():
    result = [1, 2, 4]
    expected = [1, 2, 3]
    assert result == expected
# AssertionError:
#   assert [1, 2, 4] == [1, 2, 3]
#   At index 2 diff: 4 != 3

conftest.py

conftest.pyはpytestによって自動的に読み込まれます。共有フィクスチャやプラグインをここに置けば、明示的にインポートする必要はありません。

# conftest.py
import pytest

@pytest.fixture
def sample_data():
    return {"key": "value"}

# Any test file in the same dir can use sample_data as a parameter

テストの一部を実行する

-kを使用すると、キーワード式に一致するテストを実行できます。

# Run tests containing "add"
# pytest -k "add"

# Run tests NOT containing "slow"
# pytest -k "not slow"

# Run a specific test
# pytest test_math.py::test_add

クイックチェック

pytestのテスト関数名は、自動検出されるためにどの接頭辞で始める必要がありますか?

まとめ

pytestには定型コードが必要ありません。ファイル名をtest_*.py、関数名をtest_*にし、通常のassertを使用します。例外にはpytest.raises、詳細な出力には-v、共有フィクスチャにはconftest.pyを使用します。

よくある質問

「初めての pytest テストを作成する」レッスンは無料ですか?

はい。「初めての pytest テストを作成する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。

「初めての pytest テストを作成する」で何を学びますか?

テストの検出、assert 文、テスト構成を理解します。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Python Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「初めての pytest テストを作成する」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPython Academyレッスンでコードを書いて実行できますか?

はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 初めての pytest テストを作成する
  2. フィクスチャとセットアップ/ティアダウン
  3. パラメーター化とテストカバレッジ
  4. unittest.mock によるモック
← Python Academyに戻る