PythonでAPIテストを始めたいエンジニアへ。pytest・requestsを使ったCRUD操作のAPIテストから、HTMLレポート・CSV出力まで、このシリーズ1本で全部学べます。
この記事では、APIテスト完全シリーズの全記事をまとめて紹介します。初心者から実務エンジニアまで、ステップバイステップで学べる構成です。
✅ 結論
PythonでAPIテストを自動化するなら pytest + requests の組み合わせが最もシンプルで実務でも使われています。
このシリーズでは以下を全7記事で体系的に学べる構成にしています。
- APIテストの基礎知識
- CRUD操作(GET・POST・PUT/PATCH・DELETE)の実装
- ヘッダー・スキーマ検証などの実務パターン
- HTMLレポート(pytest-html)による結果の可視化
- CSVエビデンスによるテスト結果の記録と共有
📌 この記事はこんな方におすすめ
- PythonでAPIテストを一から学びたい方
- pytest・requestsの使い方をまとめて確認したい方
- CRUD全操作のAPIテストをポートフォリオに追加したい方
- UIテストだけでなくAPIテストもできるエンジニアになりたい方
✅ このシリーズで学べること
- APIテストとは何か・なぜ重要かの基礎知識
- pytest・requestsによるGET・POST・PUT/PATCH・DELETEの全テスト実装
- raise_for_status()・ヘッダー検証・スキーマ検証など実務パターン
- HTMLレポート・CSV出力によるテスト結果の可視化と共有
00. このAPIテストシリーズについて
このシリーズは、PythonでAPIテストをゼロから学ぶための全7回の記事です。環境構築から始めて、GETテストから順にCRUD全操作を実装し、最終的にHTMLレポートとCSVでテスト結果を管理する方法まで学べます。
| 記事 | タイトル | 内容 |
|---|---|---|
| ① | APIテストとは? | 概念・UIテストとの違い・基本パターン |
| ② | 環境構築 | pip install・venv・pytest.ini設定 |
| ③ | GETテスト | ステータス・レスポンス・スキーマ検証 |
| ④ | POSTテスト | データ作成・ID付与・バリデーション検証 |
| ⑤ | PUT/PATCHテスト | 全体更新・部分更新の違いと実装 |
| ⑥ | DELETEテスト | 削除・削除後の404確認 |
| ⑦ | CSV・レポート化 | pytest-html・CSV出力・エビデンス管理 |
💡 ポイント:各記事は独立して読めますが、①→②→③の順に読むと体系的に学べます。特定のHTTPメソッドだけ知りたい場合は直接その記事に飛んでください。
01. APIテストシリーズ 記事一覧
各記事は独立して読めますが、①→②→③の順に読むと体系的に学べます。
02. シリーズで学んだ実務コードパターン
このシリーズを通じて登場した実務で必ず使うコードパターンをまとめます。
① 実務の基本パターン(毎回使う3行)
response = requests.get(url, timeout=5)
response.raise_for_status() # 4xx/5xxで自動例外
elapsed_ms = response.elapsed.total_seconds() * 1000② ヘッダーチェック(部分一致が正解)
# ✅ in で部分一致(charset付きでも失敗しない)
content_type = response.headers.get("Content-Type", "")
assert "application/json" in content_type③ 必須フィールドの一括検証
required_fields = ["id", "name", "email"]
for field in required_fields:
assert field in body, f"'{field}' が存在しません"④ スキーマ(型)検証
assert isinstance(body["id"], int)
assert isinstance(body["name"], str)
assert isinstance(body["email"], str)⑤ FAIL時もCSVに記録するパターン
try:
assert response.status_code == 200
write_result("TC01", "GET /users/1", "PASS", ...)
except AssertionError as e:
write_result("TC01", "GET /users/1", "FAIL", ..., str(e))
raise # pytestに失敗を伝える💡 ポイント:これら5つのパターンを組み合わせるだけで、実務レベルのAPIテストコードが書けます。
03. このシリーズで実装したテストケース一覧
シリーズ全体で合計34件のテストケースを実装しました。
| カテゴリ | 件数 | 主な検証内容 |
|---|---|---|
| GETテスト | 9件 | ステータス・raise_for_status・ヘッダー・ボディ・フィールド・スキーマ・404・一覧・レスポンスタイム |
| POSTテスト | 9件 | 201確認・raise_for_status・ヘッダー・ボディ・ID付与・必須フィールドなし・空文字・不正メール・スキーマ |
| PUT/PATCHテスト | 9件 | PUT200・raise_for_status・PUTボディ・ヘッダー・PATCH200・PATCHボディ・PATCH複数・スキーマ・404 |
| DELETEテスト | 7件 | 200確認・raise_for_status・レスポンスボディ・削除後404・存在しないリソース・200/204・ヘッダー |
💡 ポイント:34件のテストケースでCRUD全操作をカバーできます。「APIテストができる」というポートフォリオのアピールとして十分な内容です。
04. APIテストのポートフォリオ活用法
このシリーズで実装したコードをポートフォリオとして公開する際のポイントを紹介します。
GitHubに公開する構成(おすすめ)
automated-testing-portfolio/
├── README.md ← テストケース一覧・実行方法を記載
├── pytest.ini ← HTMLレポート自動生成設定
├── requirements.txt ← 依存ライブラリ一覧
├── tests/
│ ├── test_get_api.py ← GETテスト(9件)
│ ├── test_post_api.py ← POSTテスト(9件)
│ ├── test_put_patch_api.py ← PUT/PATCHテスト(9件)
│ └── test_delete_api.py ← DELETEテスト(7件)
├── report.html ← テスト実行結果(HTMLレポート)
└── test_results.csv ← テスト実行結果(CSV)💡 ポイント:report.html と test_results.csv をGitHubに含めると、「実際に動かした証拠」がそのまま見えます。クライアントや採用担当者へのアピールになります。
05. APIテストシリーズ ハマりポイント総まとめ
シリーズ全体を通じて、特によく出てくるハマりポイントをまとめます。
① Content-Typeは == ではなく in で比較する
# ❌ charset付きで失敗する
assert response.headers["Content-Type"] == "application/json"
# ✅ 部分一致で安全
assert "application/json" in response.headers.get("Content-Type", "")② 204 No Contentでjson()を呼ぶとエラーになる
# ✅ ステータスコードで分岐する
if response.status_code == 204:
body = None
else:
body = response.json()③ raise_for_statusとassertの使い分け
# 正常系:raise_for_status()でまとめて4xx/5xxを検知
response.raise_for_status()
# 異常系:意図的に4xx/5xxを確認するときはassertを使う
response = requests.delete(url)
assert response.status_code == 404④ CSV出力はutf-8-sigでExcel対応
# ✅ ExcelでCSVを開いても文字化けしない
with open(CSV_FILE, mode="w", encoding="utf-8-sig") as f:
...⑤ timeoutとresponse.elapsedで実務品質に
# ✅ 実務の基本パターン
response = requests.get(url, timeout=5)
elapsed_ms = response.elapsed.total_seconds() * 100006. よくある質問(FAQ)
Q. pytestとPostmanどちらでAPIテストを書くべきですか?
A. 手動テストや動作確認ならPostmanが便利ですが、自動テストやCI/CDに組み込む場合はpytest + requestsの方が適しています。コードとして管理できるため、テストの再利用・自動実行・GitHubでの共有が可能になります。ポートフォリオとして公開するならpytest + requestsがおすすめです。
Q. このシリーズはどの順番で読めばいいですか?
A. APIテストが初めての方は①→②→③の順に読むことをおすすめします。特定のHTTPメソッドだけ学びたい方は直接その記事に飛んでください。各記事は独立して読めるよう構成しています。
Q. JSONPlaceholder以外のAPIで試せますか?
A. はい。認証フローのテストには Restful Booker、より本格的なテストには reqres.in や自前のAPIを使うことができます。このシリーズのコードはAPIのURLを変えるだけで他のAPIにも応用できます。
Q. このシリーズのコードをポートフォリオに使ってもいいですか?
A. もちろんです。GitHubに公開してポートフォリオとして活用してください。READMEにテストケース一覧と実行方法を記載し、HTMLレポートも含めると完成度が上がります。
Q. Playwrightのコードも一緒に載せた方がいいですか?
A. はい。UIテスト(Playwright)とAPIテスト(requests)を1つのリポジトリで公開すると「UIもAPIも両方できます」というアピールになります。実際にGitHubで公開しているポートフォリオの構成としておすすめです。
Q. CI/CDに組み込む方法はありますか?
A. GitHub Actionsを使えばpushするたびにAPIテストを自動実行できます。.github/workflows/test.yml を作成して pytest コマンドを実行する設定を追加するだけです。シリーズの次のステップとして検討してみてください。
07. まとめ
PythonによるAPIテストの自動化は、pytestとrequestsの2つを組み合わせるだけで実務レベルの品質が実現できます。このシリーズで学んだスキルはポートフォリオとしてもUpworkやLinkedInへのアピールとしても十分な内容です。
このシリーズでは、APIテストの基礎から実務パターン・レポート化まで全7回で解説しました。
| スキル | 内容 |
|---|---|
| APIテストの基礎 | 概念・環境構築・基本パターンの理解 |
| CRUD全操作のテスト | GET・POST・PUT/PATCH・DELETEの実装(34件) |
| 実務パターンの習得 | raise_for_status・ヘッダー検証・スキーマ検証 |
| レポート・CSV出力 | pytest-html・csvモジュール・エビデンス管理 |
| ポートフォリオ活用 | GitHub公開・HTMLレポート・requirements.txt |
このシリーズを最後まで読んでいただきありがとうございました。「UIテストもAPIテストもできるQAエンジニア」として、ぜひポートフォリオに活かしてください💪

