カテゴリ: Python 更新日: 2026/05/15

PythonでAPIテストを自動化!pytestとrequestsの使い方を徹底解説

PythonのAPIテストの自動化(pytest + requests)
PythonのAPIテストの自動化(pytest + requests)

先生と生徒の会話形式で理解しよう

生徒

「PythonでAPIの開発をしているのですが、毎回手動で動くかチェックするのが大変になってきました。何か良い方法はありますか?」

先生

「それは『テストの自動化』の出番ですね!Pythonにはpytestという便利な道具と、通信を行うためのrequestsというライブラリがあります。これらを組み合わせると、ボタン一つで全ての機能が正しく動くか確認できるようになりますよ。」

生徒

「自動化なんて難しそうですが、初心者でもできますか?」

先生

「大丈夫です。まずは基本の仕組みを理解するところから始めて、一歩ずつ進めていきましょう!」

1. APIテストの自動化とは?初心者向けにやさしく解説

1. APIテストの自動化とは?初心者向けにやさしく解説
1. APIテストの自動化とは?初心者向けにやさしく解説

まず「API」という言葉についておさらいしましょう。API(Application Programming Interface)は、ソフトウェア同士が情報をやり取りするための「窓口」のようなものです。例えば、スマホアプリがサーバーから最新のニュースを取得するとき、この窓口を通じてデータをやり取りします。

API開発が進むと、修正した箇所が原因で「以前まで動いていた場所が動かなくなる」というトラブル(デグレ)がよく起こります。これを防ぐために、人間が手作業で確認するのではなく、プログラムに「正しく動いているか」をチェックさせることを「テストの自動化」と呼びます。

パソコンを触ったことがない方でもイメージしやすい例えで言うと、工場で製品が出来上がるたびに検品担当者がチェックするのではなく、自動検査マシンを導入して一瞬で合否を判定させるようなイメージです。

2. 必要な道具を揃えよう!pytestとrequestsのインストール

2. 必要な道具を揃えよう!pytestとrequestsのインストール
2. 必要な道具を揃えよう!pytestとrequestsのインストール

PythonでAPIテストを自動化するために、今回は2つの非常に有名なライブラリ(便利な道具セット)を使います。

  • requests(リクエスト):PythonからウェブサイトやAPIにアクセスするためのライブラリです。ブラウザの代わりに「このデータをちょうだい!」とお願いする役割を持ちます。
  • pytest(パイテスト):テストを実行して、その結果が「合格(Pass)」か「不合格(Fail)」かを判定してくれるフレームワークです。

これらの道具を使うには、パソコンの「ターミナル」や「コマンドプロンプト」という黒い画面で、下記のコマンドを入力してインストールする必要があります。


# ライブラリをインストールするコマンド
# ターミナルで実行してください
pip install pytest requests

インストールが終われば、準備完了です。これであなたのパソコンは自動テストを実行するマシンへと進化しました。

3. requestsライブラリでAPIにアクセスする基本

3. requestsライブラリでAPIにアクセスする基本
3. requestsライブラリでAPIにアクセスする基本

テストを自動化する前に、まずはrequestsを使って実際にAPIからデータを取得する練習をしてみましょう。APIにアクセスすることを「リクエストを送る」と言い、返ってくるデータのことを「レスポンス」と言います。

以下のコードは、インターネット上にあるテスト用のAPIから情報を取得するシンプルな例です。


import requests

# テスト用のURLにアクセスしてデータを取得する
response = requests.get("https://jsonplaceholder.typicode.com/posts/1")

# 返ってきた「ステータスコード」を表示する(200なら成功!)
print(f"ステータスコード: {response.status_code}")

# 中身のデータ(JSON形式)を表示する
print(response.json())

実行結果は以下のようになります。


ステータスコード: 200
{'userId': 1, 'id': 1, 'title': 'sunt aut facere ...', 'body': 'quia et suscipit ...'}

「ステータスコード」とは、通信の結果を表す数字です。ウェブの世界では200番台なら「成功」404番なら「見つからない(エラー)」という決まりがあります。テストでは、この数字が「200」になっているかどうかをチェックするのが基本になります。

4. pytestを使って「自動テスト」の形にしてみよう

4. pytestを使って「自動テスト」の形にしてみよう
4. pytestを使って「自動テスト」の形にしてみよう

さて、いよいよ本番です。pytestを使って「テストコード」を書いてみましょう。pytestのルールはとても簡単で、関数(プログラムのまとまり)の名前を「test_」から始めるだけです。

「assert(アサート)」という言葉が出てきますが、これは「断言する」という意味です。「この結果は絶対こうなるはずだ!」とプログラムに命令し、もし違っていたらエラーとして報告してくれます。


import requests

def test_get_post_status_code():
    """APIが正常にデータを返してくれるか確認するテスト"""
    url = "https://jsonplaceholder.typicode.com/posts/1"
    response = requests.get(url)
    
    # ステータスコードが200(成功)であることを確認する
    assert response.status_code == 200

def test_get_post_title():
    """返ってきたデータのタイトルが正しいか確認するテスト"""
    url = "https://jsonplaceholder.typicode.com/posts/1"
    response = requests.get(url)
    data = response.json()
    
    # 取得したデータの「id」が1であることを確認する
    assert data["id"] == 1

このファイルを test_api.py という名前で保存し、コマンドプロンプトで pytest と入力して実行すると、自動的にテストが走り、結果を教えてくれます。

5. データを送信するテスト(POSTリクエスト)

5. データを送信するテスト(POSTリクエスト)
5. データを送信するテスト(POSTリクエスト)

これまではデータを「取得」するテストでしたが、次はデータを「送信」するテストに挑戦しましょう。例えば、新しいユーザーを登録したり、メッセージを投稿したりする動作です。これを「POST(ポスト)リクエスト」と呼びます。

POSTリクエストのテストでは、送ったデータが正しく処理され、サーバー側で新しいIDが発行されたかなどを確認します。


import requests

def test_create_post():
    """新しい投稿が作成できるか確認するテスト"""
    url = "https://jsonplaceholder.typicode.com/posts"
    
    # 送信したいデータ(辞書形式)
    payload = {
        "title": "初めての自動テスト",
        "body": "Pythonとpytestでテストをしています。",
        "userId": 1
    }
    
    # データを送る(postメソッドを使用)
    response = requests.post(url, json=payload)
    
    # 201は「作成成功(Created)」を意味するステータスコード
    assert response.status_code == 201
    
    # 送ったタイトルが正しくレスポンスに含まれているか
    assert response.json()["title"] == "初めての自動テスト"

このように、入力値(送るデータ)と期待値(返ってくるはずのデータ)を比較することで、開発したAPIが仕様通りに動いているかを保証できるのです。

6. 異常系のテスト!エラーが正しく返るかチェック

6. 異常系のテスト!エラーが正しく返るかチェック
6. 異常系のテスト!エラーが正しく返るかチェック

「正常に動くこと」を確認するのと同じくらい大切なのが、「ダメなときに正しくエラーを出すこと」の確認です。これを「異常系テスト」と呼びます。

例えば、存在しないページにアクセスしたときに、ちゃんと「404 Not Found」というエラーが返ってくるかをチェックします。もしここで成功(200)が返ってきてしまったら、それはシステムのバグ(不具合)と言えます。


import requests

def test_not_found():
    """存在しないURLにアクセスしたときに404エラーになるか確認"""
    # 存在しない適当な番号を指定
    url = "https://jsonplaceholder.typicode.com/invalid-page-9999"
    response = requests.get(url)
    
    # 期待されるのは「404(見つからない)」エラー
    assert response.status_code == 404

わざと間違ったリクエストを送り、プログラムが「それは間違いですよ!」と正しく怒ってくれることを確認する。これも立派なテストのテクニックです。

7. Pythonのテスト自動化がエンジニアに必須な理由

7. Pythonのテスト自動化がエンジニアに必須な理由
7. Pythonのテスト自動化がエンジニアに必須な理由

最近のウェブ開発では、1日に何回もプログラムを更新することがあります。そのたびに手動で何十箇所もテストするのは現実的ではありません。自動テストを一度書いておけば、開発者は安心して新しい機能を追加できるようになります。

特に「APIテスト」は、画面のデザイン(見た目)が変わっても影響を受けにくいため、非常に安定したテストになります。プログラミング未経験の方でも、pytestrequests の基本さえマスターすれば、現場で即戦力として役立つ「品質管理」のスキルを身につけることができるでしょう。

まずは、自分の好きなサイトのステータスコードを確認するだけの簡単なコードから書いてみてください。その一歩が、プロフェッショナルなエンジニアへの道に繋がっています。

8. 実行結果を確認してデバッグする方法

8. 実行結果を確認してデバッグする方法
8. 実行結果を確認してデバッグする方法

テストを実行して、もし「Fail(不合格)」になった場合はどうすればいいでしょうか?pytestは、どこがどう違っていたのかを親切に表示してくれます。

例えば、ステータスコードが200のはずなのに500が返ってきた場合、画面には以下のようなメッセージが表示されます。


>       assert response.status_code == 200
E       assert 500 == 200
E        +  where 500 = <Response [500]>.status_code

これを見れば、「あ、サーバー側で何か重大なエラー(500)が起きているんだな」とすぐに原因の切り分けができます。このように、自動テストは単なる「合否判定」だけでなく、問題の場所を特定するための「探偵」のような役割も果たしてくれるのです。

パソコンの操作に不慣れなうちは、エラーが出ると驚いてしまうかもしれませんが、プログラミングの世界では「エラーは宝の山」です。エラーメッセージをじっくり読むことが、上達への一番の近道になります。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:
Python のAPI開発の記事一覧へ
新着記事
New1
Python
Pythonの変数とは?定義方法とデータ型を初心者向けに解説
New2
PHP
PHP の型変換を完全ガイド!初心者でもわかる明示的変換・自動変換
New3
PHP
PHPのCSVファイルの読み書きと文字列処理を基礎から解説!初心者向けガイド
New4
PHP
PHPのメモリ管理と変数の破棄方法をやさしく解説!初心者でもわかるunsetの使い方
人気記事
No.1
Java&Spring記事人気No1
Python
PythonでAPIリクエストを送信する方法を完全解説!requestsライブラリで簡単API通信
No.2
Java&Spring記事人気No2
Python
Pythonで経過時間を計測する方法を完全解説!初心者でもわかる time.perf_counter() と time.sleep()
No.3
Java&Spring記事人気No3
Python
Pythonのコンストラクタ(__init__)の使い方!初心者でもわかるオブジェクトの初期化
No.4
Java&Spring記事人気No4
PHP
PHPの配列をソートする方法!sort, rsort, asort, ksortの使い方を丁寧に解説します!
No.5
Java&Spring記事人気No5
PHP
PHP のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド
No.6
Java&Spring記事人気No6
Python
Pythonのタプルの要素を変更できない理由とその回避策を初心者向けに解説
No.7
Java&Spring記事人気No7
ChatGPT
ChatGPTでPythonコードを作成する方法!プロンプトの書き方と質問例を解説
No.8
Java&Spring記事人気No8
Python
Pythonのrequestsライブラリ完全入門!HTTPリクエストの送り方を初心者向けにやさしく解説