【FastAPI】APIをテストする方法【入門】
当ページのリンクには広告が含まれています。

敬遠しがちなテストコードですが、FastAPIではとても書きやすい印象です。
今回はテスト方法についてご紹介いたします。
あわせて読みたい


テスト – FastAPI
FastAPI framework, high performance, easy to learn, fast to code, ready for production
FastAPIの基礎についての記事まとめ
目次
パッケージのインストール
まずはFastAPI内に用いられている、テストに必要なパッケージのrequestsとpytestをインストールします。
pip install requests pytest必要なモジュールのインポート
テスト実行用のtest_main.pyを作成します。
テストの実行には、fastapi.testclientからTestClientをインポートして記述していきます。
from fastapi.testclient import TestClient
from main import app
client = TestClient(app)pytestテストファイルの記述
今回は、複数のエンドポイントを用いてテストを試してみます。
GET/products/all商品の全てを取得POST/token認証用JWTトークンの取得 (usernameとpasswordで発行)POST/articles新規記事を作成
APIへのアクセスとステータスコードの確認
/products/allのテストコードを記述します。
requestsのようにresponse = client.get("/products/all")でリクエストを簡単に送れます。
def test_get_products_all():
response = client.get("/products/all")
assert response.status_code == 200また、ステータスコードの確認もレスポンスから確認するだけでOKです。
def test_get_products_all():
response = client.get("/products/all")
assert response.status_code == 200認証用のデータを送信する
リクエストの際にデータを送る場合は、data={}とします。
def test_auth_success():
response = client.post(
"/token",
data={
"username": "string",
"password": "string"
}
)
access_token = response.json().get("access_token")
assert access_token受けとったレスポンスに、アクセストークンがあるかassertでチェックしています。
assertは結果がTrueではない場合に、テスト時にエラーを返してくれます。

エラーメッセージの確認
次は同じAPIでのエラーメッセージの確認を行います。
def test_auth_error():
response = client.post(
"/token",
data={
"username": "",
"password": ""
}
)
access_token = response.json().get("access_token")
assert access_token == None
message = response.json().get("detail")[0].get("msg")
assert message == "field required"メッセージ内容を確認するだけです。
ヘッダーの付与とjson
新規記事作成のAPIをテストします。手順としては
- JWTトークンの生成
- ポストする内容と認証用トークンを使用してリクエストを送る
- ステータスコードの確認
- レスポンスで返ってきた記事の内容を確認
となります。
def test_post_article():
auth = client.post(
"/token",
data={
"username": "string",
"password": "string"
}
)
access_token = auth.json().get("access_token")
assert access_token
response = client.post(
"/article/",
json={
"title": "string3",
"content": "string3",
"is_display": True,
"creater_id": 1
},
headers={
"Authorization": f'Bearer {access_token}'
}
)
print(response.json())
assert response.status_code == 200
assert response.json().get("title") == "string3"前半は先ほどと同じです。jsonやheadersの引数で必要な情報を送っています。
テストの実行
最後にテストを実施してみましょう。

4 passedで全てのテストが成功しました。敬遠しがちなテストも書きやすいですね。
FastAPIの基礎についての記事まとめ

コメント