PythonでFastAPIを使ったAPIをテストしてみる
※FastAPIで別APIを呼び出す記事はこちら
Python+FastAPIからRequestsにより別APIを呼び出してみる。uvicornでホスティング
https://qiita.com/thithi7110/items/c1b01798e69ddc31206b
1.適当なAPIを用意
main.py
import requests,json
from fastapi import FastAPI
app = FastAPI()
#単純なメッセージ返却
@app.get("/")
async def Hello():
return {"message":"Hello"}
#クエリパラメータ
@app.get("/zipcode")
async def ZipCode(zipcode:int = 0):
url = f'https://zipcloud.ibsnet.co.jp/api/search?zipcode={zipcode}'
r = requests.get(url)
print(r.text)
return json.loads(r.text)
2.テスト記述
tests/test_main.py
from fastapi.testclient import TestClient
from main import app
import json
client = TestClient(app)
def test_read_main():
response = client.get("/")
assert response.status_code == 200
print("★")
print(response.json())
print(response.json()['message'])
print("★★")
assert response.json() == {"message":"Hello"}
def test_read_zipcode():
response = client.get(f'/zipcode?zipcode=9012303')
print("test_read_zipcode")
assert response.status_code == 200
print(response.json()['results'])
assert response.json()['results'][0]['address1'] == '沖縄県'
3.testpyを実施(エラーになる)
ImportError while importing test module 'C:\work\prod\sample-app-cicd\sample-app-backend\tests\test_main.py'.
Hint: make sure your test modules/packages have valid Python names.
どうもルート直下にconftest.pyを配置しないといけないらしい。
5.再度実行
pytest
※pytestでテスト内部のprintを出力する場合は -s オプションをつける
pytest -s
以上