🦁

【AI_8日目】FastAPI_1冊目

2024/09/09に公開

こんにちは投資ロウトです。

背景

AI開発ができるためにwebAPIについて理解を深めていきます。
※Tailwind CSSとkeycloakは現場でピンチになれば再開します。

テストフレームワーク

pythonで有名なテストフレームワークは、pytestとのことで、mysqlを実際に呼び出すのではなく、SQLiteを使うとオーバーヘッドが大きい問題は、解決されるとのことでした。mockなどそういった概念があるのではと思うと、やはりpythonにもmockのライブラリはありそうでした。

https://docs.python.org/ja/3/library/unittest.mock.html#quick-guide

テストに必要なライブラリ等も入れていく。

docker compose exec アプリ名 poetry add -G dev pytest-asyncio aiosqlite httpx

-G devと指定すると、本番環境のデプロイではスキップされる開発環境のみで、インストールされる設定があるとのことでした。npmインストールでは聞いたことがない機能(知らないだけかも)だったので、ここは斬新でした。

テスト実施

今まで作ったテストコードをテストしていきます。DBはSQLiteを使うように上書きされております。
やはり気になるところは、テスト用に追加コードであるSQLiteを使っているのは、テストコードでさらに追加実装しているのは、気になるところですね。。。

import starlette.status

@pytest.mark.asyncio
async def test_create_and_read(async_client):
    response = await async_client.post("/stocks", json={"stock_name": "テスト実施中の投資ロウト株式会社"})
    assert response.status_code == starlette.status.HTTP_200_OK
    response_obj = response.json()
    assert response_obj["stock_name"] == "テスト実施中の投資ロウト株式会社"

    response = await async_client.get("/stocks")
    assert response.status_code == starlette.status.HTTP_200_OK
    response_obj = response.json()
    assert len(response_obj) == 1
    assert response_obj[0]["stock_name"] == "テスト実施中の投資ロウト株式会社"

テストを実施していきます。

docker compose run --entrypoint "poetry run pytest" アプリ名

警告は出ましたが、テストは通ったようです。

と短いですが章が変わるので、一旦学習を区切りたいと思います。焦らずコツコツ自分のペースでできればと思います。ご精読ありがとうございました。亀のようにノロノロと前に進んでいきたいと思います。

Discussion