初めての 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 expectedassertの書き換え
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 != 3conftest.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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 初めての pytest テストを作成する
- フィクスチャとセットアップ/ティアダウン
- パラメーター化とテストカバレッジ
- unittest.mock によるモック