Yuta NakataのBlog

Python / AWS / ITについて役立つ情報を発信します

Pythonテスト自動化: pytest.mark.parametrizeの使い方と実践例

はじめに

本記事では、pytestのデコレータである@pytest.mark.parametrizeについて使い方を解説します。

この記事で挙げるポイント

  • @pytest.mark.parametrizeの使い方とメリット

この記事で挙げないポイント

  • pytestの基本概念や説明
  • pytestを用いたassertによる単体テスト

関数をパラメータ化する

@pytest.mark.parametrizeの使い方を説明するため、下記のサンプルコードを見てみましょう。

import pytest

def double(x: int) -> int:
    return x * 2

@pytest.mark.parametrize(
    "input, expected",
    [
        (1, 2),
        (2, 4),
        (3, 6),
    ]
)
def test_double(input, expected):
    assert double(input) == expected

コードのポイント解説

1.デコレータの構文について

  • @pytest.mark.parametrize()の中で、テスト関数の引数として使う変数を指定。

  • 入力値と期待結果を列として指定。

2.メリットについて

  • テスト用の関数を変更せず、デコレータで入力値と期待結果を一覧するので、了解がしやすい。

デコレータを使わない場合

以下のように記述します。

def double(x: int) -> int:
    return x * 2

def test_double():
    assert double(1) == 2
    assert double(2) == 4
    assert double(3) == 6

比較

  • 読みやすさ: デコレータを使う場合は入力値と期待結果がまとめられており、読みやすい。

  • 拡張性: デコレータで入力値を増やしたい場合も定義した列を追加するだけで実現可能。

より詳細を知りたい方向けに

当ブログでもpytestについては、何度か取り上げていますので、気になる記事を参照してみてください。

www.yuta-nakata.net

www.yuta-nakata.net

www.yuta-nakata.net

pytest全体について理解を深めたい場合は、下記の技術書をオススメします。

https://amzn.to/4fK40yz