パラメーター化とテストカバレッジ
@pytest.mark.parametrize を使い、複数の入力でテストを実行します。
「パラメーター化とテストカバレッジ」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。
@pytest.mark.parametrize
@pytest.mark.parametrizeを使うと、同じテストを複数の入力で実行できます。各タプルが個別のテストケースになります。
import pytest
@pytest.mark.parametrize("a,b,expected", [
(1, 2, 3),
(0, 0, 0),
(-1, 1, 0),
(10, -5, 5),
])
def test_add(a, b, expected):
assert a + b == expected単一のパラメーター
引数が1つの場合は、値のリストを直接渡します。
import pytest
@pytest.mark.parametrize("n", [1, 2, 3, 4, 5])
def test_positive(n):
assert n > 0名前付きテストID
idsリストを指定すると、各パラメーターセットにラベルを付けて、出力を分かりやすくできます。
import pytest
@pytest.mark.parametrize("value,result", [
(2, True),
(3, False),
], ids=["even", "odd"])
def test_is_even(value, result):
assert (value % 2 == 0) == resultparametrizeデコレーターの重ね付け
parametrizeデコレーターを2つ重ねると、入力の直積を取得できます。
import pytest
@pytest.mark.parametrize("x", [1, 2])
@pytest.mark.parametrize("y", [10, 20])
def test_product(x, y):
assert x * y > 0 # 4 test cases: (1,10),(1,20),(2,10),(2,20)pytest-cov:インストール
pytest-covをインストールすると、テストによってコードのどの行が実行されたかを測定できます。
# pip install pytest-cov
# Basic usage:
# pytest --cov=mypackage
# HTML report:
# pytest --cov=mypackage --cov-report=htmlカバレッジ出力の読み方
カバレッジによって、テスト中に到達しなかった行、分岐、ステートメントを確認できます。
# Name Stmts Miss Cover
# ------- ----- ---- -----
# mypackage/utils.py 20 3 85%
#
# Missing: lines 45, 67, 88分岐カバレッジ
--cov-branchを使うと、条件分岐の両方の分岐がテストされているかを追跡できます。
# pytest --cov=mypackage --cov-branch
def is_positive(n):
if n > 0: # branch 1: True
return True
return False # branch 2: False低いカバレッジでの失敗
--cov-fail-under=Nを使うと、カバレッジがNパーセント未満になった場合にビルドを失敗させられます。
# pytest --cov=mypackage --cov-fail-under=80
# FAIL Required test coverage of 80% not reached. Total: 72%.coveragercの設定
.coveragercでカバレッジの除外を設定すると、定型コードをスキップできます。
# .coveragerc
[run]
omit =
*/migrations/*
*/tests/*
setup.py
[report]
exclude_lines =
pragma: no cover
if TYPE_CHECKING:適切なカバレッジとは
高いカバレッジでも、テストの正しさは保証されません。行を通過させるだけでなく、意味のあるアサーションを目指してください。ほとんどのプロジェクトでは、80~90%が現実的な目標です。
# A covered but useless test:
def test_nothing():
is_positive(5) # no assert — 100% coverage, zero confidence
# A meaningful test:
def test_positive():
assert is_positive(5) is True
assert is_positive(-1) is Falseparametrizeとカバレッジの組み合わせ
パラメーター化されたテストでは、1つのテスト定義で複数のコードパスを実行するため、自然にカバレッジを向上できます。
import pytest
@pytest.mark.parametrize("n,expected", [
(5, True), (-1, False), (0, False)
])
def test_is_positive(n, expected):
assert is_positive(n) == expectedクイックチェック
pytestの実行で--cov-fail-under=90は何を行いますか。
まとめ
@pytest.mark.parametrizeを使うと、複数の入力を簡潔にテストできます。pytest-covでコードカバレッジを測定し、--cov-branchで分岐を追跡し、--cov-fail-underで最低値を適用します。
よくある質問
「パラメーター化とテストカバレッジ」レッスンは無料ですか?
はい。「パラメーター化とテストカバレッジ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。
「パラメーター化とテストカバレッジ」で何を学びますか?
@pytest.mark.parametrize を使い、複数の入力でテストを実行します。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Python Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「パラメーター化とテストカバレッジ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPython Academyレッスンでコードを書いて実行できますか?
はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 初めての pytest テストを作成する
- フィクスチャとセットアップ/ティアダウン
- パラメーター化とテストカバレッジ
- unittest.mock によるモック