6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub ActionsでFastAPIテストを自動化

Posted at

単体テストサンプル

FastAPIのテストのためのモジュールTestClientを使って、テストの対象となるFastAPIモジュールに対してテスト用のクライアントを生成します。test_ で始まる関数は自動的にテストケースとして認識されるので関数名をtest_sampleにします。サンプルコードは下のようになります。

api/tests/test_sample.py

from app import app
from fastapi.testclient import TestClient

client = TestClient(app)

def test_sample():
    response = client.post(
        "/api/test-sample",
        json={
            [
            "test":"requset-sample"
            ]
        },
    )
    assert response.status_code == 200
    assert response.json() == {
        [
            "test":"respons-sample"
        ]
    }

まずはローカルで動作確認するためにpytestをインストールして、テストを実行します。

➜ pytest
========================================= test session starts =========================================
platform darwin -- Python 3.12.0, pytest-8.2.2, pluggy-1.5.0
rootdir: *****
configfile: pyproject.toml
plugins: anyio-4.3.0
collected 1 item                                                                                      

tests/test_get_city_code.py .                                                                   [100%]

========================================== 1 passed in 2.49s ==========================================

必要なPythonパッケージ

pytestを含めたpyproject.toml(パッケージ管理はryeを利用している)

[project]
name = "test-sample-api"
version = "0.1.0"
description = "FastAPIテストのサンプルコードです。"
authors = [
    { name = "kyoku", email = "kyoku@mierune.co.jp" }
]
dependencies = [
    "fastapi>=0.111.0",
     # ....(中略)
    "pytest>=8.2.2",
]
readme = "README.md"
requires-python = ">= 3.12"

[tool.rye]
managed = true
virtual = true
dev-dependencies = []

GitHub Actionsワークフローを作成

GitHub Actionsのワークフローを定義し、Pull Requestをオープンしたタイミングで作成したテストコードを走らせます。

.github/workflows/api-test.yml

name: Test API

on: pull_request

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
        with:
          lfs: true

      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"
          cache: "pip"

      - name: Install dependencies
        run: pip install -r requirements.lock
        working-directory: api
      - name: Run tests
        run: pytest
        working-directory: api
  • actions/checkout@v4:Workflowがリポジトリにアクセスする
  • actions/setup-python@v5:Pythonの実行環境をインストールする。cacheを指定することによってpip dependenciesのキャッシュを利用してテストを高速化する。
  • おまけ:actというツールを利用して、GitHubにアップロードする前にローカルでWorkflowの動作を確認することもできます。M2 Macでテストしたところactions/setup-python@v5 がインストールできず、Apple Siliconとの相性がよくないですが、本番のLinuxでは正常に動作します。

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?