

高岡智則
年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)
はじめに
このページでは pytest について、初心者の方にも分かりやすいように丁寧に解説します。pytest は Python のテストを実行するための最も人気のある道具の一つです。テストとは「このプログラムが正しく動くか」を自動で確かめる小さなプログラムのことです。pytest を使うと、コードの品質を保ちながら開発を進めやすくなります。
pytestとは何か
pytest は Python で書かれたテストを実行するためのフレームワークです。従来の unittest に比べて記述がシンプルで、直感的な書き方ができる点が魅力です。テスト名は test_ で始める のが基本ルールで、pytest はその名前を自動で探して実行します。パラメータ化テストやフィクスチャといった便利な機能も備えており、複雑な機能のテストも読みやすく整理できます。
なぜ pytest を使うのか
pytest を使うと以下のような利点があります。シンプルな記法でテストを書ける、自動的にテストを発見して実行できる、エラーメッセージが分かりやすい、テストの再利用性が高い、などです。これらの特長は特に初心者がプロジェクトを壊さずに新機能を追加していく際に大きな助けとなります。
インストールと準備
まずは pytest をインストールします。コマンドラインで次を実行します。pip install pytest これだけで準備は完了です。インストール後はテストファイルを作成していくだけです。一般的にはプロジェクトのルートに tests というディレクトリを作り、その中にテストファイルを置くのが習慣です。
基本の使い方
最も基本的な使い方は、テストファイルを作成して pytest コマンドを実行するだけです。例えばテストファイル名を test_sample.py とします。中身は次のように書くのが基本です。
def test_addition():
assert 1 + 1 == 2
def test_subtraction():
assert 5 - 3 == 2
このように、テスト関数名は test_ で始める必要があります。テストを実行するには、プロジェクトのルートで pytest と入力します。すると pytest が自動的に test_ から始まる関数を探し、実行結果を表示します。
アサーションとエラーの読み方
テストの「正解」を示すのがアサーションです。pytest では assert を使って期待と実際の値を比べます。もし条件が崩れるとテストは失敗します。失敗した場合、pytest はどの部分が間違っているかを詳しく教えてくれるので、原因の特定がしやすいのが特徴です。
フィクスチャと再利用性
実際のプログラムは「初期状態の準備」が必要な場合が多いです。pytest では フィクスチャ と呼ばれる仕組みを使って、テストの前後に共通の準備や後始末を自動で実行できます。例えばデータベースの接続を作る処理や、テスト用のデータを用意する処理をフィクスチャとして定義しておくと、各テスト関数からそのフィクスチャを引数として受け取るだけで使えます。
パラメータ化テスト
同じテストコードで複数の入力を試したいときは parametrize 機能が役立ちます。1つのテスト関数に複数の入力と期待値を組にして渡すことができ、テストの数を増やしていく際にも見やすく保てます。
テストの組織と実践のコツ
テストは小さく分けて書くのが基本です。大きな機能を一つのテストに詰め込むと原因の特定が難しくなります。テストは独立して実行できるように、相互に影響を与えないように設計します。また、失敗したテストだけを再実行することも可能で、時間の節約になります。
テストの実行と結果の読み取り
コマンドを実行すると、どのテストが成功・失敗したかが表示されます。失敗したテストにはエラーメッセージとスタックトレースが表示され、原因を特定しやすくなっています。pytest は拡張性が高く、プラグインを追加することでレポートの形式を変更したり、テストの並列実行をしたりすることも可能です。
サンプルの構成例
プロジェクトの規模が大きくなると、テストのファイル構成も重要になります。次のような構成を目安として考えると見通しが良くなります。
- tests/test_math.py 連携するテスト- tests/conftest.py 共通のフィクスチャを定義- tests/test_api.py 外部 API の挙動を検証
比較表と要点のまとめ
| 項目 | 内容 |
|---|---|
| 目的 | コードが正しく動くかを自動で確認する |
| 書き方の特徴 | test_で始める関数名、assert で検証 |
| 利点 | シンプルさと拡張性、エラーの説明が分かりやすい |
| 初期準備 | pip install pytest、テストファイル作成 |
| 応用機能 | フィクスチャ、パラメータ化、プラグイン |
まとめ
pytest は初心者にも優しく、Python での開発を進めるうえで強力な味方になります。最初は基本的なテストを書くところから始め、徐々にフィクスチャやパラメータ化を取り入れていくとよいでしょう。テストを日常的に回す習慣をつけることで、バグを早く見つけ、安定したコードを書けるようになります。
pytestの関連サジェスト解説
- pytest.fixture とは
- pytest.fixture とは、Python のテストを便利にする pytest の機能のひとつで、テストで使う前提となるデータや準備作業を自動で用意してくれる仕組みです。テストを書くとき、毎回同じデータを作るのは手間でミスの原因にもなります。fixture を使えば、準備の部分を1か所にまとめ、テスト関数に引数として渡すだけで使えます。fixture は関数として定義し、上部に @pytest.fixture をつけます。テスト関数は引数として fixture の名前を指定するだけ。pytest はその名前の関数を実行して得られた値を、テスト関数に渡します。以下は基本的な例です。import pytest@pytest.fixturedef sample_data(): data = [1, 2, 3, 4, 5] return datadef test_sum(sample_data): assert sum(sample_data) == 15このように書くと、テストが走るときに sample_data が自動的に用意され、test_sum はデータを受け取って検証します。fixture にはスコープという考え方があり、デフォルトでは function スコープです。つまりテスト1つごとに fixture が新しく作られます。複数のテストで同じデータを使いたいときは scope="module" や scope="session" に変更できます。さらに、yield を使うと準備だけでなく後片付け( teardown )も書けます。@pytest.fixturedef resource(): obj = create_resource() yield obj destroy_resource(obj)また、fixture は conftest.py というファイルに置くと、同じプロジェクト内の複数のテストから共有できます。autouse=True を使えば、特定の fixture を明示的に引数として書かなくても自動的に適用される仕組みもあります。使い方はシンプルですが、適切に分けて使うとテストが読みやすく、保守もしやすくなります。
- pytest mock とは
- pytest mock とは、テスト時に外部依存を置き換え、挙動を安定させる方法の1つです。特に pytest-mock というプラグインが有名で、これを使うと mocker というフィクスチャを通じて unittest.mock の Mock や patch を手軽に使えます。使い方は簡単で、まず pip install pytest pytest-mock で準備します。テスト関数の引数に mocker を受け取り、mocker.patch('モジュール.関数') のように外部の関数を差し替え、返り値や挙動を自由に決められます。例えば weather.get_weather を外部 API 呼び出しとして実在させず、返ってくるデータを決めたい場合、mocker.patch('weather.get_weather') を使い fake.return_value = {...} と設定します。実際のテスト本体は import 後の関数を呼ぶだけで、戻り値がモックの値になるため、外部環境に左右されず再現性の高いテストになります。注意点として、パッチする文字列はモジュールの import パスである必要があり、すでに読み込まれている関数を patch すると期待通り動かないことがあります。さらに mocker.spy を使えば、関数の呼び出しを監視しつつ元の動作を壊さずに検証できます。pytest mock とはこのように、テストを堅牢にする便利な道具の総称であり、初心者にも段階的に学べる入門的な手段となります。
- pytest-cov とは
- pytest-cov とは、pytestというテストフレームワークと組み合わせて、コードの実行割合(カバレッジ)を測るためのプラグインです。基本的には coverage.py を使って、テストがどのコードを実行したかを数値化します。たとえば、pytest --cov=myapp というコマンドを実行すると、myapp ディレクトリ配下のコードの実行状況を表示してくれます。オプションとして --cov-report=html をつければ、HTML形式のレポートが作成され、ブラウザで詳しく確認できます。--cov-report=term で端末にも結果を表示できます。さらに --cov-branch を付けると、分岐(if 文など)の網羅率も測れ、より厳密なカバレッジ評価が可能です。インストールは、まず pytest と pytest-cov を用意します。コマンド例は、pip install pytest pytest-cov です。その後、実際の使い方として、プロジェクトの測定対象ディレクトリを指定して実行します。例: pytest --cov=src --cov-report=html --cov-report=term。設定ファイルを使うと、毎回同じオプションを付ける手間が省けます。pytest.ini や setup.cfg に addopts = --cov=src --cov-report=html を追加しておくと便利です。初心者には、まず小さなプロジェクトで —cov の対象を絞り、HTML レポートを開いてどのファイルがカバーされていないかを視覚的に確認するところから始めるのがおすすめです。カバレッジはテストの有無や実行範囲に依存するため、適切なテストケースを追加して範囲を広げることで、コードの品質向上につながります。
- pytest assert とは
- pytest assert とは、Python のテストを簡単に実行できるツールである pytest の中で使う「検証の書き方」です。テストコードでは、実際の値と期待値が同じかを確かめるために assert 文を使います。assert とは、条件が真なら何も起きず、偽なら AssertionError が発生してテストが失敗する、という非常にシンプルな命令です。pytest はこの assert 文を使うだけで、失敗したときに「何がどう違うのか」を詳しく表示してくれる特徴があります。これは pytest の assertion rewriting(アサーション・リライティング)という機能のおかげで、条件の中身を調べて分かりやすいエラーメッセージを自動的に作ってくれる仕組みです。基本の使い方はとてもシンプルです。例: def test_add(): assert 1 + 1 == 2このように、テスト関数の中で現在の値と期待値を比較します。別の例として、文字列の包含チェック: def test_contains(): s = 'pytest assert とは' assert 'assert' in s浮動小数点数の比較には注意が必要です。0.1 + 0.2 が 0.3 になるとは限らないことがあるため、厳密な等価比較は避け、pytest.approx を使って誤差を許容します。例: def test_float(): assert 0.1 + 0.2 == pytest.approx(0.3)実務でのコツとしては、条件を小さな単位に分けて複数の assert に分けること、失敗時の原因を伝えるメッセージを追加することが挙げられます。例えば、assert a == b, 'a と b が等しくありません' のように書くと、失敗時のヒントになります。テストを始めるときは、test_ で始まるファイル名を作り、関数名も test_ で始めると pytest が自動で検出して実行してくれます。実行はターミナルで「pytest」と入力するだけです。初心者はまず簡単な例から始め、徐々に複雑な検証へ段階を上げていくと理解が進みやすいです。
- pytest.ini とは
- pytest.ini とは、Python のテストツール pytest の設定ファイルです。テストを実行する際に毎回コマンドラインで長いオプションを指定するのは手間がかかります。pytest.ini によって共通の設定をまとめておくと、同じ条件でテストを走らせることができ、作業がスムーズになります。ファイル形式は INI 形式で、通常はプロジェクトのルートディレクトリに置きます。中身は [pytest] というセクションの中に key = value の組み合わせで書きます。代表的なオプションとして addopts、testpaths、python_files、markers などがあります。addopts には実行時のデフォルトオプションを列挙します。たとえば -v は詳細表示、-s は標準出力をそのまま表示、などです。testpaths にはテストを探すディレクトリを指定します。よく使われるのは tests ですがプロジェクトの構成に合わせて変えられます。python_files にはテストファイルの名前のパターンを設定します。デフォルトは test_*.py ですが変更可能です。markers には独自のマーカーを登録します。これにより特定のグループだけを実行したり、遅いテストを後回しにするなどの運用がしやすくなります。norecursedirs は再帰探索の対象外とするディレクトリを指定するための設定です。log_cli や log_level を使えばテスト実行時のログ出力を調整できます。これらを適切に使うとチーム全体で同じテスト環境を再現しやすくなり、新しいメンバーもすぐにテストを回せるようになります。実例として次のように書くと便利です。[pytest]addopts = -v -stestpaths = testspython_files = test_*.pymarkers = slow: slow tests smoke: smoke tests
pytestの同意語
- pytest
- Python用のテストフレームワーク。簡潔な記述でテストを作成でき、フィクスチャ、マーカー、プラグインなどの機能を活用してテストを効率よく実行できるツールです。
- テストフレームワーク
- ソフトウェアの品質を保証するためのテスト作成・実行・報告を統括する枠組み。pytestはこのカテゴリの代表的なツールです。
- Pythonのテストツール
- Python言語でテストを自動化・実行するための道具の総称。pytestはその中でも特に人気の高い選択肢です。
- ユニットテストフレームワーク
- 個々の関数・メソッドの挙動を検証するための枠組み。pytestはユニットテストにも適用できます。
- テストランナー
- テストケースを順に実行し、結果を集計・報告してくれる役割のソフトウェア。pytestはこの機能を担います。
- テスト自動化ツール
- テスト作業を自動化し、反復を減らすための道具。pytestはテスト自動化を実現する代表格です。
- Pythonテストライブラリ
- Pythonでテストを支えるライブラリ群の総称。pytestはその中で特に有名なライブラリの一つです。
- アサーション付きテストフレームワーク
- テスト内で条件を検証するアサーション機能を組み込みで提供するフレームワーク。pytestは強力なアサーションサポートを特徴とします。
- プラグイン対応テストフレームワーク
- 機能を拡張するプラグインを簡単に追加できる設計のテストフレームワーク。pytestは豊富なプラグインを利用できます。
- unittest
- Python標準ライブラリに含まれるユニットテスト用フレームワーク。pytestと併用したり置き換えたりする選択肢として使われます。
- nose2
- Pythonの伝統的なテストフレームワークの一つ。pytestと比較して使われることもあります。
pytestの対義語・反対語
- 手動テスト
- テストを人の手で実行する方法。自動化ツールを使わず、手順書に沿って操作を検証します。pytestのような自動実行・スクリプト化とは対照的なアプローチです。
- 非自動化テスト
- 自動化されていない検証プロセス。人の操作のみでテストを進める方法で、繰り返しの自動実行を前提とするpytestとは異なります。
- スプレッドシート検証
- Excelなどの表計算ソフトを用いてテストケースを記録・実行する方法。自動化ツールを使わず、手作業ベースの検証です。
- 紙ベースのチェックリスト
- 紙やPDFのチェックリストを用いて検証を進める方法。デジタル化・自動化のpytestとは対照的な手法です。
- JUnit
- Java向けの代表的な自動化テストフレームワーク。pytestと同じ目的の別言語ツールとして、対比の例として挙げられます。
- NUnit
- C#向けの自動化テストフレームワーク。JavaのJUnitと同様に自動化テストを行うツールで、Pythonのpytestの対比として挙げられます。
- RSpec
- Ruby向けの自動化テストフレームワーク。Pythonのpytestとは異なる言語環境の自動化テストの例として参照されます。
pytestの共起語
- Python
- pytest は Python 用のテストフレームワークで、Python のコードを対象に自動でテストを実行します。
- テスト
- ソフトウェアの動作が仕様どおりかを検証する作業の総称です。
- ユニットテスト
- 関数やメソッドなどの最小単位を個別に検証するテストのことです。
- テストフレームワーク
- テストの作成・実行・管理を支援する道具の集合。pytest はその代表例です。
- フィクスチャ
- テストで使うデータや設定を提供する再利用可能な仕組みです。
- パラメータ化
- 同じテストを複数の入力データで実行する機能で、テストの網羅性を高めます。
- pytest.mark
- テストにラベルを付けて分類・条件づけする機能。後から絞り込みに使えます。
- マーク
- テストに付ける注釈の総称。pytest.mark はその代表例です。
- アサーション
- 期待する値と実際の値を比較してテストの成否を判定する判定文です。
- assert
- Python のアサーション文で、条件が真ならテスト継続、偽なら失敗となります。
- xfail
- 特定のケースで「失敗を期待する」マーク。条件付きの失敗を想定します。
- skip
- 条件付きでテストの実行をスキップします。
- capsys
- テスト中の標準出力・標準エラーをキャプチャして検証します。
- caplog
- テスト中のログ出力をキャプチャして検証します。
- monkeypatch
- テスト中に特定の関数や値を一時的に置換する手法です。
- tmp_path
- テスト用の一時ディレクトリを提供するフィクスチャです。
- tmp_path_factory
- 複数の一時ディレクトリを作成する補助的フィクスチャです。
- conftest.py
- テスト間で共有するフィクスチャや設定を定義するファイルです。
- pytest.ini
- pytest の設定を記述する設定ファイルです。
- pyproject.toml
- プロジェクト全体の設定を記述するファイルで、pytest の設定を含むことがあります。
- プラグイン
- pytest の機能を拡張する追加パッケージです。
- pytest-cov
- コードのカバレッジ(実行したコードの割合)を測定するプラグインです。
- カバレッージ
- テストがコードのどの部分を実行したかを示す指標です。
- pytest-django
- Django アプリのテストを補助する連携プラグインです。
- pytest-flask
- Flask アプリのテストを補助する連携プラグインです。
- pytest-asyncio
- asyncio を用いた非同期コードのテストを支援するプラグインです。
- pytest-xdist
- テストを複数の CPU コアやマシンで分散実行する拡張機能です。
- pytest-mock
- mock ライブラリを使いやすくする補助プラグインです。
- テスト自動検出
- デフォルト設定で自動的にテストファイルを見つけて実行します。
pytestの関連用語
- pytest
- Python向けのテストフレームワーク。シンプルな記述で強力なテスト機能と豊富なプラグインを利用できるのが特徴です。
- Fixture
- テストの前提条件を用意する仕組み。データベース接続、ファイルの作成、環境設定などを準備し、スコープを関数・クラス・モジュール・セッションのいずれかに設定できます。
- Parametrize
- 同じテストを複数の入力で繰り返し実行する機能。pytest.mark.parametrize を使って複数の引数組を渡します。
- Marker
- テストを分類・管理するラベル。@pytest.mark.xxx のように付け、-m で絞り込み実行できます。
- XFail
- 予期している失敗をマークする機能。実行結果に xfail と表示され、失敗を許容します。
- Skip
- 条件付きでテストをスキップするマーク。特定条件下で実行を回避できます。
- CapSys
- テスト中の標準出力と標準エラーをキャプチャする機能。
- CapLog
- テスト中のロギング出力をキャプチャする機能。
- CapFD
- ファイルディスクリプタレベルの出力をキャプチャする機能。CapSysのより低レベル版です。
- TmpPath
- テスト用の一時ディレクトリを提供するフィクスチャ。Path型で扱えます。
- TmpPathFactory
- 複数の一時ディレクトリを必要に応じて作成する補助機能。
- Monkeypatch
- テスト中にオブジェクトの挙動を一時的に書き換える機能。元に戻すことも自動で行われます。
- Doctest
- doctest 形式の例を pytest で実行する機能。ドキュメントのサンプル動作を検証できます。
- AssertionRewriting
- アサーションの失敗時に詳細な情報を表示する仕組み。どの値が期待と違ったかを分かりやすく示します。
- Conftest
- 共通のフィクスチャ定義を置くファイル。複数のテストで再利用できます。
- PytestIni
- pytest の設定を記述する設定ファイル。pytest.ini や pyproject.toml などで管理します。
- TestDiscovery
- デフォルトの命名規則に従って自動的にテスト関数を見つけ出す機能。
- CollectOnly
- テストを実行せず、収集結果だけを表示するモード。
- Ids
- parametrize の各ケースに分かりやすい識別子を付ける設定。
- Plugin
- pytest の機能を拡張する拡張機能。プラグインは個別に追加します。
- Plugins
- 複数のプラグインを組み合わせて機能を強化します。
- pytest-cov
- コードカバレッジを測定するプラグイン。テストがどの程度コードをカバーしているかを可視化します。
- pytest-mock
- モックライブラリとの統合を提供するプラグイン。mocker フィクスチャなどを使えます。
- pytest-xdist
- テストを並列実行して速度を上げるプラグイン。
- pytest-asyncio
- async/await を使った非同期テストをサポートするプラグイン。
- pytest-django
- Django アプリのテストを容易にするプラグイン。
- pytest-flask
- Flask アプリのテストを補助するプラグイン。
- Hypothesis
- 特性ベースのテストを行うライブラリ。pytest と組み合わせて自動データ生成を利用できます。
- Given
- Hypothesis のデコレーターの一部。テストデータを自動生成する仕組みの補助。
- Expression_K
- -k によるキーワード表現でテストを絞り込むオプション。
- Expression_M
- -m によるマーカー表現でテストを絞り込むオプション。
- QuietOption
- -q による出力を簡潔にするモード。
- VerboseOption
- -v による詳細出力モード。
- TracebackStyle
- --tb の表示スタイルを指定するオプション(short/long/auto など)。
- TestNamingConvention
- テストファイル名・関数名の命名規則(例: test_で始めるなど)を指します。
- CIIntegration
- 継続的インテグレーション(CI)環境での実行が容易になるよう設計されています。



















