スタートアッププロジェクト
目次
概要
シリーズ「スタートアッププロジェクト」私はPythonウェブ開発にアプローチして、使用しようとしましたFastAPI web framework . 私は、それが使用の容易であることに非常に驚きました、そして、私はそれについてより深く入りたかったです;上記のすべての機能をテストしている.
ペットプロジェクト
機能をテストするためにpet project . 基本的に1つのREST APIを持つ単純なサーバです.
ローカルラン
コードをチェックアウトした後に、単にあなたのターミナルアプリケーションで「スクリプト/ci」を実行することができます.スクリプトはこれらの手順を実行します.
docker-compose up api
curl http://localhost:8080/items/123\?q\="test"
2番目はこのレスポンスを提供します.{"item_id":123,"q":"test","use_case":"Production Code"}
スコープ
コード設計については、2点を達成したかっただけです.
class AppController:
def __init__(self, app: FastAPI, use_case: UseCase):
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
return {
"item_id": item_id, "q": q, "use_case": use_case.run()
クラスAppControllerは、FastAPIとusecaseオブジェクトで構築できます.最初の1つはFastAPIの設定に関連しているし、2番目の1つを実行する私のビジネスロジックです.
このクラスを使用すると、アプリケーションに必要なコードを配線するstartup ()メソッドを使用してアプリケーションを設定できます.
def startup(use_case: UseCase = ProductionUseCase()):
app = FastAPI()
AppController(app, use_case)
return app
最後に、Dockerコンテナを使用してアプリケーションを実行できます.これはコンテナ定義です:FROM python:3.10.3-slim-bullseye
WORKDIR /code
COPY ./requirements.txt /code/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
COPY ./app /code/app
CMD ["uvicorn", "app.main:startup", "--host", "0.0.0.0", "--port", "8080", "--workers", "4"]
テスト
もちろん、アプリケーションを簡単にテストするために依存関係を注入するためにstartup ()メソッドを使うこともできます.
これらはコントローラの2つのテストです.
def test_e2e_production_code(self):
client = TestClient(startup())
response = client.get("/items/987?q=this%20is%20the%20query")
self.assertEqual(200, response.status_code)
self.assertEqual(
{"item_id": 987, "q": "this is the query", "use_case": "Production Code"},
response.json()
)
class TestableUseCase(UseCase):
def run(self):
return "Test Code"
def test_e2e_testable_code(self):
client = TestClient(startup(TestableUseCase()))
response = client.get("/items/987?q=this%20is%20the%20query")
self.assertEqual(200, response.status_code)
self.assertEqual(
{"item_id": 987, "q": "this is the query", "use_case": "Test Code"},
response.json()
)
最初のテストは、プロダクションコード依存関係を使用して、クライアントを生産ユースケースで構築します.client = TestClient(startup())
場合によっては、開発中に実際の接続を使用することはできませんし、テストを分解するだけです.頑固な協力者の使用このため、2つ目のテスト( TestCount E 2 eCurn TabableLesコード)のようなtestableCollapatorを注入できます.
client = TestClient(startup(TestableUseCase()))
考慮
Finapiのデザインポイントから、我々のマイクロサービスを構築するのに使用する超便利なフレームワークです.非常によくコンテナーロジックと雲の開発とフィットします.また、我々が開発しようとしているアプリケーションのテストスイートを構築することは非常に簡単です.
もちろん、依存関係やDBMSアクセスのような機能を備えた複雑さを導入しないよう注意しなければなりません.
参考文献
Github project link
Reference
この問題について(スタートアッププロジェクト), 我々は、より多くの情報をここで見つけました https://dev.to/maverick198/startup-project-with-fastapi-27imテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol