【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の基礎についての記事まとめ
コメント