pytestを使ったPythonテストの基本と応用

この記事では、Pythonでのテストフレームワークである`pytest`の基本的な使用方法から応用例までを網羅します。具体的なコード例とその解説、応用例を含めています。

目次

はじめに

Pythonでのソフトウェア開発において、テストは非常に重要なフェーズです。`pytest`は、その中でも人気の高いテストフレームワークの一つです。この記事では、`pytest`の基本的な使い方から応用テクニックまでを解説します。

pytestの基本的な使い方

インストール方法

まずは、pytestをインストールしましょう。コマンドラインで以下のように入力します。

pip install pytest

簡単なテストケースの作成

pytestを使ったテストケースは非常に簡単に作成できます。以下に基本的な形を示します。

# test_sample.py
def test_addition():
  assert 1 + 1 == 2  # 1 + 1が2であればテスト成功

def test_subtraction():
  assert 3 - 1 == 2  # 3 - 1が2であればテスト成功

テストの実行

テストを実行するには、コマンドラインで以下を実行します。

pytest

pytestの応用テクニック

パラメータ化されたテスト

同じようなテストを繰り返し行いたい場合、パラメータ化されたテストが有用です。

import pytest

# test_parameters.py
@pytest.mark.parametrize("a, b, expected", [
  (1, 2, 3),
  (4, 5, 9),
  (10, 20, 30)
])
def test_addition(a, b, expected):
  assert a + b == expected

フィクスチャの使用

テストの前後で何らかのセットアップやクリーンアップが必要な場合には、フィクスチャを使用します。

import pytest

# test_fixture.py
@pytest.fixture
def setup_and_teardown():
  print("前処理")
  yield
  print("後処理")

def test_one(setup_and_teardown):
  assert 1 == 1

応用例

カスタムマーカーを用いたテスト

pytestでは、カスタムマーカーを用いてテストケースを分類できます。

# test_custom_marker.py
import pytest

@pytest.mark.slow
def test_slow_operation():
  pass

@pytest.mark.fast
def test_fast_operation():
  pass

データベースとの連携

データベースと連携したテストも可能です。

# test_database.py
import pytest
import sqlite3

@pytest.fixture
def db_connection():
  conn = sqlite3.connect(':memory:')
  yield conn
  conn.close()

def test_db_operation(db_connection):
  c = db_connection.cursor()
  c.execute('''CREATE TABLE users (id int, name text)''')
  c.execute("INSERT INTO users VALUES (1, 'John')")
  db_connection.commit()

  c.execute('SELECT * FROM users WHERE id=1')
  row = c.fetchone()
  assert row == (1, 'John')

まとめ

この記事では、`pytest`の基本的な使い方から応用テクニックまでを紹介しました。この知識を用いて、より堅牢なPythonアプリケーションを開発してください。

コメント

コメントする

目次