• 案件・求人一覧
  • お役立ちコンテンツ
  • 単価診断
  • ログイン
  • 会員登録
メニューを開く

Pytestとは|使い方・fixture・unittestとの違いと案件単価【pytest 9対応】

スキル

最終更新日:2026/10/19

Pytestとは|使い方・fixture・unittestとの違いと案件単価【pytest 9対応】

Pytestとは、Pythonのテストを書いて実行・管理するオープンソースのテストフレームワークです。標準のunittestより少ないコードで書け、2024年の開発者調査では回答者の53%が使っていました。2025年11月の9系でPython 3.10以上が必要になりました。テストを担うエンジニア向けに、使い方から案件での評価まで整理します。

先に結論

  • Pytestは、主要な開発者調査でPythonのテストフレームワークとして最も多く使われている。Python Software FoundationとJetBrainsの2024年調査(回答者3万人超・複数回答)では、単体テストフレームワークの利用率がpytest 53%、標準のunittest 23%だった

  • 標準のunittestとの最大の違いは、クラスを継承せず関数とassert文だけで書けること。unittestで書かれた既存のテストもそのまま実行できる

  • 2026年10月時点の最新はpytest 9.1.1。9.0(2025年11月)でPython 3.9のサポートが終了し、subtestsの本体統合、TOML形式の設定ファイル、strictモードが加わった。8系前提の解説記事は設定の書き方が古い場合がある

  • 現場で「テストが書ける人」と見なされる分岐点は、fixtureとparametrizeを使い分けられるか

  • フリコン掲載のPython案件3,760件のうち、案件名や概要にPytestを明記した案件は5件(0.13%)だけ。Pytestは看板スキルではなく、テストの担当範囲の中で評価されるスキル

  • 単価との関係が見えるのは、ツール名より担当範囲。概要に「品質」「自動化」「CI」などの語がある案件は上限100万円以上が18.8%、「テスト」が工程名としてだけ出る案件は6.5%だった

この記事でわかること

  • Pytestの定義と、Pythonのテストツールの中での位置づけ

  • unittest・nose2・doctestとの違いと、選び分けの考え方

  • pytest 9で変わった点(Python 3.10以上・subtests・TOML設定・strictモード)

  • fixture・parametrize・marker・pluginなど、実務でよく使う機能

  • フリコン掲載のPython案件3,760件から見た、テストの担当範囲と単価の関係

本記事は、Pythonの実務経験があり、テストの書き方を固めたいエンジニアと、Python案件で独立・参画を考えているフリーランスエンジニアを主な読者として書いています。

目次

  • Pytestとは?Pythonテストの定番フレームワーク

  • pytest 9で変わった点

  • Pytestとunittest・その他テストツールとの違い

  • Pytestでできること(実務での使われ方)

  • Pytestの始め方(インストールから初回実行まで)

  • Pytestの主要機能(フリーランス現場でよく使うもの)

  • Pytestを使うフリーランス案件の単価相場と動向

  • Pytestの学習ロードマップ

  • Pytestを案件で活かすためのキャリア戦略

  • テスト関連の記事マップ(言語・ツール・職種)

  • よくある失敗と対策

  • 案件参画前に確認したいPytest関連のチェックポイント

  • まとめ

  • よくある質問

Pytestとは?Pythonテストの定番フレームワーク

Pytestとは、Pythonのコードに対するテストを記述・実行・管理するためのサードパーティ製のテストフレームワークです。 標準ライブラリには含まれず、pipでインストールして使います。ライセンスはMITで、商用でも無料で使えます。

Pytest公式ドキュメントによれば、最小構成のテストは「test_」で始まる関数を作り、assert文で条件を書くだけで実行できます。クラスの継承や特別なメソッド名は必須ではないため、初めてでも書き始めやすい設計です。

Pytestの基本的な特徴

Pytestには、現場で評価されている特徴がいくつかあります。

  • assert文がそのまま使える:unittestのassertEqualやassertTrueといった専用メソッドを覚える必要がない

  • 失敗時の出力が読みやすい:assertが失敗すると、比較した値の中身を整形して表示する

  • fixtureで前処理・後処理を共通化できる:setUp/tearDownより柔軟に組める

  • parametrizeで同じテストを複数データで回せる:データ駆動のテストが簡潔に書ける

  • プラグインが豊富:pytest-mock、pytest-django、pytest-asyncioなど、用途別の拡張がそろう

どれくらい使われているか

Python Software FoundationとJetBrainsが2024年10〜11月に実施したPython Developers Survey 2024(回答者3万人超)では、単体テストフレームワークの利用率は次のとおりでした(複数回答)。

テストフレームワーク

利用率

pytest

53%

unittest

23%

mock

11%

doctest

6%

テストフレームワークを使っていない

36%

pytestの利用率はunittestの2倍以上です。一方で、回答者の36%はテストフレームワークを使っていません。テストを書く習慣自体が、まだ全員のものではないことも読み取れます。

なぜPytestが選ばれるのか

Pythonには標準ライブラリのunittestがあるため、本来は別のフレームワークを入れなくてもテストは書けます。それでもPytestが選ばれるのは、テストを書く負担を減らす設計だからです。

unittestがJavaのJUnitを手本にしているのに対し、Pytestは「Pythonらしい書き方」を重視しています。関数だけで書ける、assert文がそのまま動く、fixtureを関数の引数として受け取れる——こうした書き方は、テストコードを読み書きする時間を短くします。新しくテストを導入するPythonのプロジェクトでは、Pytestが第一候補として検討されることが多いです。

なお、JavaのテストではJUnitが広く使われています。JavaからPythonに移る場合は、JUnitの感覚を持ち込むより、Pytest独自の書き方を学び直すほうがスムーズです。

ミニFAQ:どのバージョンのPytestを学べばよい?

2026年10月1日時点の最新はpytest 9.1.1(2026年6月19日リリース)で、Python 3.10以上が必要です(PyPIのpytestページ)。新しく学ぶなら9系で問題ありません。参画先の現場が8系以前を使っている場合もあるため、requirementsやpyproject.tomlで実際のバージョンを確認しておきましょう。

フリーランスエンジニアの皆様

今の年収、今の働き方に満足してますか?

あなたの理想の案件を
専属コンシェルジュが実現

フリコンに無料会員登録して案件の相談をする

pytest 9で変わった点

pytest 9.0は2025年11月にリリースされた、2024年1月の8.0以来のメジャーバージョンです。 公式のChangelogから、実務に影響しやすい変更を整理します。

変更点

内容

実務への影響

Python 3.9のサポート終了

9系はPython 3.10以上が必要

古いPythonの現場では8系のまま止まっていることがある

subtestsの本体統合

pytest-subtestsプラグインの機能が本体に入った

収集時に値が決まらないケースを1つのテストの中で分けて検証できる(機能は実験的扱い)

TOML形式の設定

pyproject.tomlの[tool.pytest]や、pytest.tomlで設定を書ける

従来の[tool.pytest.ini_options]も使えるが、新規はTOML形式が書きやすい

strictモード

strictをtrueにすると、strict_config・strict_markers・strict_parametrization_ids・strict_xfailの4つがまとめて有効になる(個別に上書きも可)

設定ミスやマーカーの打ち間違いをCIで早く見つけられる

非推奨機能のエラー化

PytestRemovedIn9Warningが既定でエラーになった

古いプラグインや書き方が残る現場では、更新で突然テストが落ちることがある

設定ファイルの具体的な書き方は、使うバージョンの公式ドキュメント(Configuration)で確認してください。9.1(2026年6月)ではPython 3.15の公式サポートが加わりました。一方で、いくつかの機能が非推奨になり、pytest 10で削除する予定と告知されています。

ミニFAQ:8系の現場に入ったら、9系との違いで困る?

テストの書き方そのもの(関数、assert、fixture、parametrize)は変わっていないため、大きく困ることはありません。違いが出るのは設定ファイルの書き方と、非推奨警告の扱いです。バージョンを上げる作業を任されたら、まず警告を一覧にして、どのプラグインが原因かを切り分けるところから始めると安全です。

Pytestとunittest・その他テストツールとの違い

Pythonのテストツールには、Pytest以外にも選択肢があります。違いを押さえておくと、技術の選定や案件参画時の判断がしやすくなります。

ツール

位置づけ

特徴

unittest

Python標準ライブラリ

クラスベース。JUnitに近い書き方。追加のインストールが不要

Pytest

サードパーティ(MITライセンス)

関数ベース。assert文をそのまま使える。fixture・parametrizeが強力

nose2

サードパーティ

旧noseの後継。利用は限られる

doctest

Python標準ライブラリ

docstringに書いた実行例をテストとして実行する

unittestとの違い

unittestは標準ライブラリなので、追加の導入が要らないのが利点です。一方のPytestは、unittestで書かれたテストもそのまま実行できる互換性を持っています。

既存のunittest資産がある現場では、まずPytestを実行ツール(テストランナー)として導入し、新しいテストはPytestの書き方で足していく移行がよく採られます。pytest 9.0の変更履歴によると、unittestのsubTestも本体で扱えるようになりました。subTestを使った既存テストを移行するときの手間は、以前より小さくなっています。

nose・nose2の現在地

かつてはnoseがPytestと並ぶ選択肢でしたが、オリジナルのnoseは長くメンテナンスされておらず、新しいPythonでは使えない場面があります。後継のnose2は維持されているものの、前述の調査でnoseを使うと答えたのは2%でした。古い保守案件でnose系のテストが残っている場合は、Pytestへの移行計画があるかを参画前に確認すると安全です。

Pytestとunittestの選び分け

選び分けの目安は次のとおりです。

  • 新規プロジェクト:Pytestを採用するケースが多い

  • 依存を増やせない小さなスクリプトのテスト:標準のunittestで足りる

  • テストデータが多い/前処理が複雑:Pytestのfixtureとparametrizeで簡潔に書ける

  • JUnit経験者が多いチーム:unittestのクラスベースのほうが読みやすい場合もある

フリーランスエンジニアの皆様

今の年収、今の働き方に満足してますか?

あなたの理想の案件を
専属コンシェルジュが実現

フリコンに無料会員登録して案件の相談をする

Pytestでできること(実務での使われ方)

Pytestは単体テストだけのツールではなく、統合テストやE2Eテストの実行役としても使われます。 実務での使われ方をレイヤーごとに見ていきます。

ユニットテスト

関数やクラスのメソッドの入出力を検証する、最も基本的な使い方です。fixtureで前提条件を組み立て、parametrizeで境界値を網羅する流れが定番です。

統合テスト

複数のモジュールを組み合わせた動作を確認するテストです。WebアプリならDBやキャッシュを含めた挙動、データ処理パイプラインなら入力ファイルから出力までの一連の流れを確かめます。pytest-djangoやpytest-flaskといった統合用のプラグインがあり、Django・Flask・FastAPIの現場でもよく使われます。

E2E(End to End)テスト

ブラウザ操作を含むE2Eテストは、PytestとSelenium・Playwrightを組み合わせて作ります。実行の管理はPytestに任せ、画面操作はPlaywrightやSeleniumに任せる分担が一般的です。Playwrightには公式のPytestプラグイン(pytest-playwright)があります。

CI/CDパイプラインへの統合

PytestはGitHub ActionsやJenkinsと組み合わせやすく、プルリクエストごとに自動でテストを回す運用が組みやすいのも評価されている点です。JUnit形式のXMLレポートを出力するオプションがあり、CIツール側の集計と相性が良い作りになっています。

ミニFAQ:Pytestはデータ分析や機械学習のコードでも使う?

使います。pandasやNumPyを使う処理のロジック、機械学習モデルの前処理関数などのテストに使われます。データ系の現場ではテストが整っていないコードベースも多く、テストを書ける人が重宝されやすい領域です。

Pytestの始め方(インストールから初回実行まで)

Pythonと仮想環境の扱いに慣れていれば、インストールから最初の実行までは短時間で終わります。

環境準備

Python公式サイトからPython本体(pytest 9系を使うなら3.10以上)を入れ、venvなどで仮想環境を作ります。仮想環境の中でpip install pytestを実行すれば、インストールは完了です。テスト用の依存はrequirementsファイルやpyproject.tomlにまとめておくと、CI環境で同じ状態を再現しやすくなります。

最初のテストを書く

プロジェクト直下か、testsディレクトリに、名前が「test_」で始まるPythonファイル(例:tests/test_calc.py)を作ります。その中に「test_」で始まる関数を定義し、assert文で期待値を書きます。たとえば足し算の関数をテストするなら、テスト関数の中でその関数を呼び出し、結果が期待した値と等しいことをassertで宣言します。

実行と結果の見方

ターミナルでpytestコマンドを実行すると、テストファイルが自動で見つかり、まとめて実行されます。失敗したときは、assertが失敗した箇所と比較した値が整形されて表示されます。原因の特定が早いことが、初めて使う人に好評な理由のひとつです。

フリーランスエンジニアの皆様

今の年収、今の働き方に満足してますか?

あなたの理想の案件を
専属コンシェルジュが実現

フリコンに無料会員登録して案件の相談をする

Pytestの主要機能(フリーランス現場でよく使うもの)

現場で頻出するのは、fixture・parametrize・marker・pluginの4つです。 これらを押さえておくと、参画初日からテストを書く側に回りやすくなります。

fixture(前処理・後処理の共通化)

fixtureは、テストの前に共通で用意したいもの(DBセッション、設定、テストデータなど)を関数として定義し、必要なテストの引数として受け取る仕組みです。conftest.pyにfixtureをまとめると、複数のテストファイルから自動で参照されます。

unittestのsetUp/tearDownと比べると、fixtureは有効範囲(スコープ)をfunction/class/module/package/sessionから選べ、必要な箇所だけで呼び出せるのが利点です。たとえばDB接続をテスト全体で使い回したいなら、scopeにsessionを指定すると、毎回接続し直すコストを抑えられます。

parametrize(テストデータのバリエーション)

pytest.mark.parametrizeを使うと、同じテストのロジックを複数の入力データで自動的に繰り返せます。境界値テスト、異常系テスト、ロケール別のテストなどを簡潔に書けます。ケースが増えても、テスト本体のコードを増やさずに済むのが大きな利点です。

marker(テストの分類・条件付き実行)

markerは、テストにタグを付けて分類する仕組みです。重いテストにslowマーカーを付けておき、普段のCIではslow以外だけを、夜間ビルドでは全部を実行する、といった運用ができます。skipやskipifを使えば、条件に応じてテストを飛ばせます。pytest 9のstrictモードを有効にすると、登録していないマーカーの打ち間違いもエラーで見つかります。

plugin(pytest-mock、pytest-cov、pytest-xdistなど)

Pytestはプラグインで拡張する文化が強く、現場では次のものがよく使われます。

  • pytest-mock:標準のunittest.mockをPytestの書き方で使えるようにする

  • pytest-cov:テストのカバレッジ(どのコードがテストで実行されたか)を計測する

  • pytest-xdist:テストを複数のプロセスで並列に実行し、時間を短くする

  • pytest-django:Djangoプロジェクト向けの機能を提供する

  • pytest-asyncio:async/awaitを使うコードのテストを書けるようにする

これらは本体ではなく、サードパーティの実績あるプラグインです。なお、以前はpytest-subtestsプラグインが必要だったsubtestsは、9系から本体の機能になりました。参画先のrequirementsに何が入っているかを見ると、その現場のテストの方針が読み取れます。

ミニFAQ:fixtureを増やしすぎるとどうなる?

fixtureの数が多かったり、fixture同士の依存が深くなったりすると、テストが読みにくくなります。「このテストで何が準備されているのか」を追うのに時間がかかり、保守の負担が増えます。conftest.pyに置くのは複数のテストで本当に共通化が必要なものに絞り、1回しか使わない準備はテスト関数の中に書くのが現場でよく取られる判断です。

Pytestを使うフリーランス案件の単価相場と動向

Pytestは、案件の看板としてはほとんど書かれないスキルです。 ここでは、フリコンに掲載されているPython案件3,760件(2026年10月1日時点・募集終了の案件を含む)の一覧カードに表示される、案件名・技術タグ・案件概要(抜粋)をすべて確認した結果をもとに整理します。単価は掲載時の募集単価の上限で、成約単価ではありません。

Pytestを明記した案件は0.13%

3,760件のうち、案件名か概要の抜粋に「pytest」の文字がある案件は5件でした。中身はFastAPIでのWebAPI開発、Flaskの製品開発、Playwrightを使った自動テスト基盤づくりなどで、いずれも開発の一部としてPytestでテストを書く形です。

一方で、「テスト」という語を含む案件は746件(19.8%)ありました。Pytestは案件名で探すスキルではなく、「テストまで任せられるか」という担当範囲の中で問われるスキルと捉えるのが実態に近いでしょう。

担当範囲で見た単価の傾向

概要の書かれ方で3つに分けると、募集単価の上限は次のようになりました。

概要の書かれ方

案件数

上限の平均

上限90万円以上

上限100万円以上

「品質」「自動化」「CI」「テスト設計」などの語がある

165件

84.0万円

31.5%

18.8%

「テスト」が工程名としてだけ出る(単体テスト・結合テストなど)

680件

78.1万円

20.3%

6.5%

テスト関連の語がない

2,915件

81.4万円

30.1%

13.3%

Python案件全体

3,760件

80.9万円

28.4%

12.3%

出典:Pythonのフリーランス案件・求人一覧(フリコン)のカード表示をもとに当社集計。

「製造〜単体テスト〜結合テスト」のようにテストが工程の一部として並ぶ案件は、上限100万円以上の比率が全体の約半分にとどまりました。反対に、品質の改善や自動化、CIまで任せる書き方の案件は、比率が全体より高くなっています。

ただし、これは案件カードの短い抜粋をキーワードで分けた集計です。165件は多い数ではなく、職種の構成も違うため、「品質」と書けば単価が上がるという因果を示すものではありません。 読み取れるのは、テストを「実施する」担当より、テストの仕組みを「設計・改善する」担当のほうが、高い帯の募集に入りやすいという傾向までです。

テスト専任の職種との比較

テストを専門に担う職種で見ると、傾向はさらにはっきりします。フリコンのテストエンジニアの案件(1,219件・職種タグで集計)は、上限の平均が64万円、上限100万円以上が2.0%でした。

上の表はPythonのスキルタグ、こちらは職種タグでの集計です。集計の単位が違うため、数字を直接比べることはできません。それでも、テストだけを担う働き方より、Pythonで開発しながらテストの仕組みまで整える働き方のほうが、高い帯の募集に届きやすいことがうかがえます。職種としての詳しい動向はテストエンジニアとはで解説しています。

案件で求められるレベル感

Pytestについて案件で求められる水準は、大きく3段階に分けられます。

  • 入門:既存テストの実行・修正、簡単なテストの追加ができる

  • 中級:fixture・parametrize・markerを使い分け、新しいモジュールのテストを設計できる

  • 上級:テストの方針を立て、CI/CDに組み込み、カバレッジの運用やテストの分割で開発サイクル全体を速くできる

上限90万円を超える帯に入りやすいのは、上級の内容を担える人です。目安としては、Pythonの実務が複数年あり、テストの方針づくりやCIの整備、レビュー方針の策定まで経験している層になります。

単価を体系的に上げる考え方は『フリーランスエンジニアの単価相場と単価の上げ方』で整理しています。自分の経験でどのくらいの単価を狙えるか気になる方は、無料のフリーランスエンジニア単価診断で市場単価の目安を確認できます。

Pytestスキルが評価される場面

Pytestは単価を直接上げるスキルというより、参画後に任される仕事の幅を広げるスキルです。評価されやすいのは次のような場面です。

  • テストが薄い既存コードに、後からテストを書いていく品質改善

  • 新規プロジェクトで、テストの方針を最初から設計する立ち上げ

  • プルリクエストにテストを付けて出すことによる、レビューでの信頼

  • GitHub Actionsなどでの自動実行の設定まで含めたCI/CDの整備

フリーランスエンジニアの皆様

今の年収、今の働き方に満足してますか?

あなたの理想の案件を
専属コンシェルジュが実現

フリコンに無料会員登録して案件の相談をする

Pytestの学習ロードマップ

初めて触る段階から、実務で使える水準に届くまでの順番を整理します。

初心者がまず押さえること

最初に取り組むのは次の3点です。

  • pip install pytestから最初のテスト実行までを自力でできる

  • assert文の基本パターン(等しいか、近い値か、例外が出るか、コレクションの中身)を書ける

  • fixtureの最小例(値を返す関数を引数として受け取る形)を動かせる

ここまで身につけば、自分が書いたコードに簡単なテストを付けられるようになります。

中級レベルへのステップ

中級では、現場でよく見るパターンへの対応力が問われます。

  • conftest.pyを使ったfixtureの共有

  • parametrizeでの境界値テスト・異常系テストの設計

  • markerによるテストの分類と、strictモードでの管理

  • pytest-covによるカバレッジ計測の基本

  • pytest-mockによる外部依存(API呼び出し、DBなど)の置き換え

このあたりまで来ると、新しいモジュールのテストを任されても自走できる水準です。

学習リソース

公式ドキュメントを軸に、技術書やオンライン教材を組み合わせるのが定番です。

  • 公式:Pytest Documentation

  • 公式のGet Started、Fixtures、Parametrizing testsのページが基本

  • 英語が苦にならなければ、公式のExamples and customization tricksが実務寄り

  • 書籍やWeb記事は、pytest 9より前に書かれたものだと設定ファイルの書き方が古い場合がある

Python本体の理解が浅い場合は、先にPythonとは?できること、将来性、年収・キャリアまで徹底解説!で全体像をつかんでからPytestに進むと、学習の効率が上がります。テストを先に書いて開発を進める手法は、TDD(テスト駆動開発)とはで整理しています。

ミニFAQ:学習時間の目安はどのくらい?

個人差が大きいものの、Pythonの基礎ができている人なら、入門の範囲は短期間で押さえられる傾向があります。中級(fixture・parametrize・marker・カバレッジを使い分けられる)に届くには、実際のプロジェクトで使いながら経験を積む必要があります。机の上の学習だけで仕上げるより、個人開発や業務のコードで使いながら覚えるのが現場では一般的です。

Pytestを案件で活かすためのキャリア戦略

Pytestを単独のスキルとして売るのではなく、ほかのスキルと組み合わせて案件の幅を広げるのが現実的です。 案件のデータでも、テストの仕組みまで任される書き方の案件ほど、高い帯の募集が多く見られました。

テスト自動化の案件で重宝されるスキル

テスト自動化を中心に参画する場合、Pytestに加えて次のスキルがあると評価されやすくなります。

  • E2EテストのSeleniumまたはPlaywrightの経験

  • CI/CDの実装経験(GitHub Actions、GitLab CI、Jenkins、CircleCIなど)

  • テストの方針を立てた経験(テストピラミッド、テストの分割の判断)

  • カバレッジツールの運用経験

品質保証の立場から関わる働き方は、QAエンジニアとはも参考になります。

Web開発エンジニアとしての組み合わせ

Django・Flask・FastAPIの案件では、Pytestが使えることが「テストまで含めて任せられるエンジニア」の条件になりつつあります。

データ・機械学習領域での価値

データ分析・機械学習の現場では、テストの薄いコードベースが残っているケースが少なくありません。データ系の知見とテスト自動化の両方を持つ人は、品質改善の文脈で頼られやすくなります。データ前処理の関数のテストや、モデルの推論結果が変わっていないかを確かめるテスト(リグレッションテスト)が代表例です。

どの案件タイプを目指すかの決め方は、案件の選び方|フリーランスエンジニアが単価・稼働・スキルで決める優先順位で整理しています。

フリーランスエンジニアの皆様

今の年収、今の働き方に満足してますか?

あなたの理想の案件を
専属コンシェルジュが実現

フリコンに無料会員登録して案件の相談をする

テスト関連の記事マップ(言語・ツール・職種)

Pytestと一緒に検討されることが多いテストの技術と職種を、目的別にまとめました。

知りたいこと

記事

ほかの言語のテストフレームワーク

JUnit(Java)・Jest(JavaScript)・RSpec(Ruby)

ブラウザを使うE2Eテスト

Playwright・Selenium

テストを自動で回すCI/CD

GitHub Actions・GitLab CI・Jenkins・CircleCI

テストの進め方と生成AIの活用

TDD(テスト駆動開発)・AIテスト自動化の実務

テストを担う職種

テストエンジニア・QAエンジニア

よくある失敗と対策

Pytestの導入や運用で陥りやすいパターンを整理します。

fixtureの共通化しすぎ

fixtureを共通化しすぎると、conftest.pyが膨らみ、各テストでどのfixtureが効いているのかを追えなくなります。「同じ準備を2回以上書きそうになったら共通化する」くらいの温度感で進め、1回きりの準備は関数の中に書くのが無難です。

テストが遅くなる

テストが増えると、実行時間が問題になります。典型的な原因は、DBへの接続を毎回張り直している、大きなデータを毎回読み込んでいる、外部APIを実際に呼んでいる、の3つです。fixtureのスコープを見直す、モックを使う、pytest-xdistで並列に実行する、といった対応が効きます。

ローカルでは通るのにCIで落ちる

この多くは、テストの実行順への依存(あるテストが別のテストの結果に頼っている)、環境変数の違い、タイムゾーンの違いが原因です。テスト同士を独立させる、CIと同じコンテナイメージでローカルでも実行する、といった対策が効きます。

バージョンを上げたら大量に落ちた

pytest 9では、9系で削除予定だった機能の警告が既定でエラーになりました。古いプラグインや書き方が残る現場でバージョンだけ上げると、テストのロジックは正しいのに一斉に失敗することがあります。上げる前に8系のまま警告を一覧にし、原因のプラグインを先に更新するのが安全な順番です。

テストを書く時間が取れない

「テストを書く時間がない」という声は多くの現場で聞かれます。ただ実際には、テストがないことで生まれるバグ対応や手動確認の時間が、テストを書く時間を上回っていることも少なくありません。まずは新しく追加するコードにだけテストを書くルールから始めると、既存のコード全部に書く負担を背負わずに自動化を進められます。

フリーランスエンジニアの皆様

今の年収、今の働き方に満足してますか?

あなたの理想の案件を
専属コンシェルジュが実現

フリコンに無料会員登録して案件の相談をする

案件参画前に確認したいPytest関連のチェックポイント

参画先のテスト運用は、面談や事前の資料で確認しておくと、参画後の負担を読みやすくなります。

確認項目

チェック内容

テストの有無

Pytest(または他のテストツール)が導入されているか

バージョン

Python本体とPytest本体のバージョン。pytest 9系ならPython 3.10以上

カバレッジ

カバレッジを計測しているか、目標値があるか

CI連携

プルリクエストごとに自動でテストが実行されているか

テストの方針

テストを書く文化があるか、誰が書く前提か

主要プラグイン

使っているプラグインと、そのサポート状況

PythonやPytestのバージョンが極端に古い場合は、依存ライブラリの公式サポート切れ(EOL)も重なっていることがあります。保守案件で残っていても安全とは限らないため、アップデート計画の有無を確認しておきましょう。

まとめ

Pytestは、Python開発者の半数以上が使う定番のテストフレームワークで、案件では「テストまで任せられるか」を示すスキルとして評価されます。単価との関係が見えるのはツールの名前より担当範囲で、テストの仕組みを設計・改善できるほど高い帯の募集に届きやすくなります。

  • 標準のunittestより、関数とassert文だけでシンプルに書ける。unittestのテストもそのまま実行できる

  • 2026年10月時点の最新はpytest 9.1.1。9系はPython 3.10以上が必要で、subtests・TOML設定・strictモードが加わった

  • fixture・parametrize・marker・pluginを使い分けられると、現場の即戦力に近づく

  • フリコン掲載のPython案件3,760件で、Pytestを明記した案件は5件だけ。看板ではなく担当範囲の中で問われる

  • 「品質」「自動化」「CI」まで任される書き方の案件は、上限100万円以上が18.8%(工程名だけの案件は6.5%)

  • 学習は公式ドキュメントを軸に進め、9系より前の解説は設定の書き方に注意する

次の一歩としては、手元のプロジェクトに小さくPytestを入れ、GitHub Actionsなどで自動実行するところまで試してみてください。CIまでつないだ経験は、案件の面談で具体的に話せる材料になります。

参考リンク

よくある質問

AnswerMark

PytestはMITライセンスのオープンソースソフトウェアで、商用利用を含めて無料で使えます。ライセンスの表示などの条件を守れば、業務システムでも個人のプロジェクトでも使えます。

AnswerMark

必須ではありませんが、読めると役立ちます。Pytestはunittestで書かれたテストもそのまま実行できるため、移行途中の現場ではunittestの書き方が混ざっています。新規プロジェクトなら、最初からPytestの書き方で進めて問題ありません。

AnswerMark

Pytestだけで単価が大きく上がるとは考えにくいです。フリコン掲載のPython案件で見ても、案件名や概要にPytestを明記した案件は3,760件中5件でした。単価との関係が見えるのは、テストの仕組みの設計や品質改善、CIの整備まで任される担当範囲のほうです。

AnswerMark

Pytestはテストを実行・管理する役、Seleniumはブラウザを操作するライブラリです。E2Eテストでは、Pytestで実行を管理し、その中でSeleniumを呼んでブラウザを操作する組み合わせがよく使われます。Playwrightと比べられるのはSelenium側で、どちらを選んでもPytestは実行役として使えます。

AnswerMark

pytest-xdistで複数のプロセスに分けて並列に実行する、markerで分類して必要なものだけ実行する、fixtureのスコープを広げて準備のコストを下げる、外部APIや重い処理をモックに置き換える、といった方法があります。CIでは並列度を上げ、手元では変更した周辺だけを実行するなど、場面で使い分けましょう。

AnswerMark

本体だけでは非同期のテスト関数を直接扱えませんが、pytest-asyncioプラグインを入れるとasync関数をテストとして書けます。FastAPIなど非同期の処理を使うプロジェクトでよく採用されています。

AnswerMark

どちらもテストフレームワークですが、JUnitはJava向け、PytestはPython向けです。設計の考え方も違い、JUnitはクラスベース、Pytestは関数ベースが基本です。JUnit経験者がPytestに移ると、クラスを継承せず関数だけで書けることが最初の発見になります。詳しくはJUnitとはも参照してください。

AnswerMark

pytest 9以降は、pyproject.tomlの[tool.pytest]テーブルか、pytest.tomlにTOML形式で書けます。従来のpytest.ini、pyproject.tomlの[tool.pytest.ini_options]、tox.ini、setup.cfgも引き続き使えます。新規プロジェクトでは、pyproject.tomlに集約するケースが増えています。

AnswerMark

fixtureの仕組みでつまずく人が多いです。「関数の引数にfixtureの名前を書くと、そのfixtureが返した値が渡される」というPytest独自の考え方に、最初は戸惑いやすいからです。公式ドキュメントのFixturesのページにあるサンプルを、そのまま書いて動かすところから始めると感覚をつかめます。

AnswerMark

2024年の調査で利用率53%と、unittest(23%)の2倍以上で、Pythonのテストフレームワークでは最も使われています。2025年11月に9系が出て開発も続いており、短期間で別のフレームワークに置き換わる兆候は見られません。ただし設定の書き方などは変わっていくため、年に1回はリリースノートを確認する習慣をつけておくと安心です。

AnswerMark

使えません。pytest 9.0でPython 3.9のサポートが終了し、9系はPython 3.10以上が必要です。Python 3.9の環境が残っている場合は、8系のまま使うか、Pythonのバージョンを上げる計画とあわせて検討します。

関連するタグ:

テストエンジニアPython

おすすめのお役立ちコンテンツ

Supabaseとは?特徴・Firebaseとの違い・料金・フリーランス案件動向をエンジニア視点で解説
スキル

Supabaseとは?特徴・Firebaseとの違い・料金・フリーランス案件動向をエンジニア視点で解説

Ollamaとは?ローカルLLM実行環境の特徴・使い方・案件単価をエンジニア視点で解説
スキル

Ollamaとは?ローカルLLM実行環境の特徴・使い方・案件単価をエンジニア視点で解説

PowerShellとは?できること・使い方・年収を初心者向けに徹底解説
スキル

PowerShellとは?できること・使い方・年収を初心者向けに徹底解説

G検定とは?合格率・難易度・効果的な勉強法をわかりやすく解説【2026年版】
スキル

G検定とは?合格率・難易度・効果的な勉強法をわかりやすく解説【2026年版】

Vercelとは?特徴・Next.js連携・料金・案件動向をフリーランス視点で解説
スキル

Vercelとは?特徴・Next.js連携・料金・案件動向をフリーランス視点で解説

新着のお役立ちコンテンツ

業務委託の契約期間|1ヶ月・3ヶ月更新の実態と更新判断の時期
働き方

業務委託の契約期間|1ヶ月・3ヶ月更新の実態と更新判断の時期

業務委託の単価は税込か税別か|案件の報酬表示と消費税の確認点
制度・申請

業務委託の単価は税込か税別か|案件の報酬表示と消費税の確認点

フリーランスエンジニアの健康保険の選び方|国保・任意継続・建設国保・扶養を徹底比較
制度・申請

フリーランスエンジニアの健康保険の選び方|国保・任意継続・建設国保・扶養を徹底比較

青色申告決算書の書き方|フリーランスエンジニアの記入例と勘定科目
制度・申請

青色申告決算書の書き方|フリーランスエンジニアの記入例と勘定科目

フリーランスエンジニアの健康管理|腰痛・眼精疲労・運動不足の対策
働き方

フリーランスエンジニアの健康管理|腰痛・眼精疲労・運動不足の対策

おすすめ案件・求人

【PMO】社内ITコンサルタント 兼 PMO 要員募集(フルリモート)

110~120万円/月

虎ノ門(東京都)

詳細を見る

【kintone】kintoneにおける業務改善サポートおよび導入/活用支援(フルリモート)

60~70万円/月

仙台(宮城県)

詳細を見る

(フルリモート)【フルスタックエンジニア】新規Webサービス立ち上げ支援

110~120万円/月

渋谷(東京都)

詳細を見る

(フルリモート)【PHP】人材系SaaSサービス案件

65~75万円/月

恵比寿(東京都)

詳細を見る

【PMO】某教育機関PMO案件(フルリモート)

65~75万円/月

新宿(東京都)

詳細を見る

あなたの理想の案件探しませんか?

公開非公開

フリーランスエンジニア向け案件の
85%以上が非公開案件!

※非公開案件のご紹介は登録者限定

非公開案件を紹介してもらう

タグからお役立ちコンテンツを探す