0
2

初心者向け!サンプル付きコードで学ぶPyTest

Last updated at Posted at 2024-08-16

はじめに

PyTestは、Pythonのための強力で使いやすいテストフレームワークです。このブログ記事では、PyTestの基本的な使い方から始め、初心者でも理解しやすい形で15の章に分けて解説します。各章では、実際のコード例を用いてPyTestの機能を説明します。

1. PyTestとは

PyTestは、Pythonのコードをテストするためのフレームワークで、簡潔な記述と強力な機能を兼ね備えています。PyTestは、少ないボイラープレートコードでテストを記述でき、assert文を使用してテストを行うため、非常に直感的です。

2. 環境のセットアップ

まず、PythonとPyTestをインストールします。仮想環境を使用することをお勧めします。以下のコマンドで仮想環境を作成し、アクティブ化します。

$ python3 -m venv venv
$ source venv/bin/activate

次に、PyTestをインストールします。

$ pip install pytest

3. 初めてのテスト

PyTestを使用して最初のテストを作成します。test_sample.pyというファイルを作成し、以下のコードを記述します。

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

このテストは、1 + 1が2であることを確認します。テストを実行するには、以下のコマンドを使用します。

$ pytest

4. テストの組織化と命名

テストファイルはtest_で始まるか、_testで終わる名前にする必要があります。これにより、PyTestは自動的にテストを検出します。

5. テストの実行

PyTestは、ディレクトリ内のすべてのテストを自動的に実行します。特定のテストだけを実行したい場合は、以下のようにテスト名を指定できます。

$ pytest -k "test_addition"

6. フィクスチャの使用

フィクスチャは、テストの前に必要なセットアップを行うための機能です。以下の例では、フィクスチャを使用してテストの前にデータベース接続を設定します。

import pytest

@pytest.fixture
def db_connection():
    return "Database Connection"

def test_db(db_connection):
    assert db_connection == "Database Connection"

7. パラメータ化

PyTestの@pytest.mark.parametrizeデコレータを使用すると、同じテストに異なる入力を与えることができます。

import pytest

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

8. 例外のテスト

特定の例外が発生することを確認するには、pytest.raisesを使用します。

import pytest

def test_zero_division():
    with pytest.raises(ZeroDivisionError):
        1 / 0

9. モンキーパッチ

モンキーパッチを使用して、テスト中に特定の関数やメソッドの動作を変更できます。

def test_monkeypatch(monkeypatch):
    def mock_return():
        return "mocked!"

    monkeypatch.setattr("builtins.input", lambda _: "mocked!")
    assert input() == "mocked!"

10. テストのスキップとマーク

テストをスキップしたり、特定の条件でのみ実行したりすることができます。

import pytest

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

11. カバレッジの測定

pytest-covプラグインを使用して、テストのカバレッジを測定できます。

$ pip install pytest-cov
$ pytest --cov=your_module

12. プラグインの利用

PyTestには多くのプラグインがあり、機能を拡張できます。例えば、pytest-xdistを使用してテストを並列実行できます。

13. テストのベストプラクティス

テストを書く際のベストプラクティスを紹介します。テストはシンプルで、明確にすることが重要です。

def test_sum():
    # Arrange
    a = 1
    b = 2
    expected = 3

    # Act
    result = a + b

    # Assert
    assert result == expected

14. PyTestの高度な機能

PyTestの高度な機能として、カスタムフィクスチャ、フック、プラグインの作成方法を紹介します。

import pytest

# カスタムフィクスチャの作成
@pytest.fixture
def custom_data():
    return {"key": "value"}

def test_custom_data(custom_data):
    assert custom_data["key"] == "value"

# フックの使用
def pytest_runtest_setup(item):
    print(f"Setting up {item.name}")

15. PyTest-xdistでの並列テスト

pytest-xdistを使用すると、テストを並列で実行することができます。以下のコマンドでインストールします。

$ pip install pytest-xdist

テストを並列で実行するには、以下のコマンドを使用します。

$ pytest -n auto

このコマンドは、利用可能なCPUの数に応じてテストを並列に実行します[1][3][5]。

結論

PyTestは、Pythonのテストを簡単にし、効率的に行うための強力なツールです。このチュートリアルを通じて、PyTestの基本的な使い方を学びました。次は、実際のプロジェクトでPyTestを使用してみましょう。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2